private void Append(string value) { var tick = 0m; if (_firstTick.HasValue) { tick = Environment.TickCount - _firstTick.Value; } else { _firstTick = Environment.TickCount; } tick /= 1000m; _builder.Append('[') .AppendFormat(CultureInfo.InvariantCulture, "{0}", tick) .Append(", \"o\", \"").Append(JsonEncodedText.Encode(value)).AppendLine("\"]"); }
internal static void WriteDictionary <TProperty>( JsonValueConverter <TProperty> converter, JsonSerializerOptions options, ref WriteStackFrame current, Utf8JsonWriter writer) { if (converter == null) { return; } Debug.Assert(current.Enumerator != null); string key; TProperty value; if (current.Enumerator is IEnumerator <KeyValuePair <string, TProperty> > enumerator) { // Avoid boxing for strongly-typed enumerators such as returned from IDictionary<string, TRuntimeProperty> value = enumerator.Current.Value; key = enumerator.Current.Key; } else if (current.Enumerator is IEnumerator <KeyValuePair <string, object> > polymorphicEnumerator) { value = (TProperty)polymorphicEnumerator.Current.Value; key = polymorphicEnumerator.Current.Key; } else { // Todo: support non-generic Dictionary here (IDictionaryEnumerator) throw new NotSupportedException(); } if (value == null) { writer.WriteNull(key); } else { JsonEncodedText escapedKey = JsonEncodedText.Encode(key); converter.Write(escapedKey, value, writer); } }
public void StructuredLoggingOptions() { using var ms = new MemoryStream(); var sourceCodeHash = Guid.NewGuid().ToString(); var loggerFactory = LoggerFactory.Create(x => { x.SetMinimumLevel(LogLevel.Debug); x.AddZLoggerStream(ms, option => { var hashProp = JsonEncodedText.Encode("Hash"); option.EnableStructuredLogging = true; option.StructuredLoggingFormatter = (writer, info) => { // Use default and add custom metadata info.WriteToJsonWriter(writer); writer.WriteString(hashProp, sourceCodeHash); }; }); }); var logger = loggerFactory.CreateLogger("test"); logger.ZLogDebugWithPayload(new { tako = 100, yaki = "あいうえお" }, "FooBar{0} NanoNano{1}", 100, 200); loggerFactory.Dispose(); using var sr = new StreamReader(new MemoryStream(ms.ToArray()), Encoding.UTF8); var json = sr.ReadLine(); var doc = JsonDocument.Parse(json).RootElement; doc.GetProperty("Message").GetString().Should().Be("FooBar100 NanoNano200"); var payload = doc.GetProperty("Payload"); payload.GetProperty("tako").GetInt32().Should().Be(100); payload.GetProperty("yaki").GetString().Should().Be("あいうえお"); doc.GetProperty("Hash").GetString().Should().Be(sourceCodeHash); doc.GetProperty("LogLevel").GetString().Should().Be("Debug"); }
/// <summary>Validates the presence and the type of a required member.</summary> /// <param name="utf8Name"></param> protected void CheckRequiredMemberAsNumber(JsonEncodedText utf8Name) { if (!TryGetValue(utf8Name, out var claim)) { ThrowHelper.ThrowJwtDescriptorException_SecEventAttributeIsRequired(utf8Name); } if (!claim.Type.IsNumber()) { ThrowHelper.ThrowJwtDescriptorException_SecEventAttributeMustBeOfType(utf8Name, new[] { JwtValueKind.Int32, JwtValueKind.Int64, JwtValueKind.UInt32, JwtValueKind.UInt64, JwtValueKind.Float, JwtValueKind.Double }); } }
public override void Write(JsonEncodedText propertyName, TValue value, Utf8JsonWriter writer) { if (TreatAsString) { writer.WriteString(propertyName, value.ToString()); } else if (s_enumTypeCode == TypeCode.UInt64) { // Use the ulong converter to prevent conversion into a signed\long value. ulong ulongValue = Convert.ToUInt64(value); writer.WriteNumber(propertyName, ulongValue); } else { // long can hold the signed\unsigned values of other integer types. long longValue = Convert.ToInt64(value); writer.WriteNumber(propertyName, longValue); } }
public void TestEncoding() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.WriteLine(encoder.Encode("тест")); Console.WriteLine(JavaScriptEncoder.Default.Encode("тест")); JsonEncodedText text = JsonEncodedText.Encode("тест"); Console.WriteLine(text.ToString()); Console.WriteLine(); // To find out source and target byte[] bytes = Encoding.UTF8.GetBytes(new char[] { '\u0442', '\u0435', '\u0441', '\u0442' }); string source = Encoding.UTF8.GetString(bytes); //"\u0442\u0435\u0441\u0442"; //"Ðàáîòà â ãåðìàíèè"; const string destination = "тест"; //"Работа в германии"; var decodedCyrillic = Encoding.GetEncoding(1251).GetString(bytes); Console.WriteLine(decodedCyrillic); foreach (var sourceEncoding in Encoding.GetEncodings()) { bytes = sourceEncoding.GetEncoding().GetBytes(source); foreach (var targetEncoding in Encoding.GetEncodings()) { if (targetEncoding.GetEncoding().GetString(bytes) == destination) { Console.WriteLine("Source Encoding: {0} TargetEncoding: {1}", sourceEncoding.CodePage, targetEncoding.CodePage); } } } // Result1: Source Encoding: 1252 TargetEncoding: 1251 // Result2: Source Encoding: 28591 TargetEncoding: 1251 // Result3: Source Encoding: 28605 TargetEncoding: 1251 // The code for you to use //var decodedCyrillic = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(source)); Console.WriteLine(decodedCyrillic); // Result: Работа в германии }
public NamingPolicyRespectJsonStringEnumConverter(JsonNamingPolicy?namingPolicy, JavaScriptEncoder?encoder, bool serializeAsStrings) { this.serializeAsStrings = serializeAsStrings; namingPolicy ??= new AsIsNamingPolicy(); var names = Enum.GetNames(TypeToConvert); var values = Enum.GetValues(TypeToConvert); Debug.Assert(names.Length == values.Length); valuesToNames = new Dictionary <T, JsonEncodedText>(names.Length); stringsToValues = new Dictionary <string, T>(names.Length); for (var i = 0; i < names.Length; i++) { var value = (T)values.GetValue(i) !; var name = namingPolicy.ConvertName(names[i]); valuesToNames.Add(value, JsonEncodedText.Encode(name, encoder)); stringsToValues.Add(name, value); } }
public override void WriteTo() { var key = RsaJwk.GenerateKey(2048, true, SignatureAlgorithm.RsaSha256.Utf8Name); key.Kid = "kid-rsa"; key.KeyOps.Add("sign"); key.Use = JwkUseNames.Sig.ToArray(); key.X5t = Base64Url.Decode("dGhpcyBpcyBhIFNIQTEgdGVzdCE"); key.X5tS256 = Base64Url.Decode("dGhpcyBpcyBhIFNIQTI1NiB0ZXN0ISAgICAgICAgICAgIA"); key.X5u = "https://example.com"; key.X5c.Add(Convert.FromBase64String("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==")); using (var bufferWriter = new PooledByteBufferWriter()) { key.Serialize(bufferWriter); var json = Encoding.UTF8.GetString(bufferWriter.WrittenSpan.ToArray()); Assert.Contains("\"kid\":\"kid-rsa\"", json); Assert.Contains("\"key_ops\":[\"sign\"]", json); Assert.Contains("\"use\":\"sig\"", json); Assert.Contains("\"x5t\":\"dGhpcyBpcyBhIFNIQTEgdGVzdCE\"", json); Assert.Contains("\"x5t#S256\":\"dGhpcyBpcyBhIFNIQTI1NiB0ZXN0ISAgICAgICAgICAgIA\"", json); #if NETCOREAPP Assert.Contains("\"x5u\":\"" + JsonEncodedText.Encode("https://example.com", Constants.JsonEncoder) + "\"", json); Assert.Contains("\"x5c\":[\"" + JsonEncodedText.Encode("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==", Constants.JsonEncoder) + "\"]", json); #else Assert.Contains("\"x5u\":\"" + JsonEncodedText.Encode("https://example.com") + "\"", json); Assert.Contains("\"x5c\":[\"" + JsonEncodedText.Encode("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==") + "\"]", json); #endif Assert.Contains("\"e\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.E)) + "\"", json); Assert.Contains("\"n\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.N)) + "\"", json); Assert.Contains("\"d\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.D)) + "\"", json); Assert.Contains("\"dp\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.DP)) + "\"", json); Assert.Contains("\"dq\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.DQ)) + "\"", json); Assert.Contains("\"p\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.P)) + "\"", json); Assert.Contains("\"q\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.Q)) + "\"", json); Assert.Contains("\"qi\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.QI)) + "\"", json); } }
private async Task <Jwk[]> GetKeysAsync() { var keys = new List <Jwk>(); await foreach (var keyProperties in _client.GetPropertiesOfKeysAsync()) { var kvKey = await _client.GetKeyAsync(keyProperties.Name); Jwk?key = null; if (kvKey.Value.KeyType == KeyType.Oct) { key = SymmetricJwk.FromByteArray(kvKey.Value.Key.K, false); } else if (kvKey.Value.KeyType == KeyType.Rsa || kvKey.Value.KeyType == KeyType.RsaHsm) { key = RsaJwk.FromParameters(kvKey.Value.Key.ToRSA(true).ExportParameters(true), false); } #if !NETFRAMEWORK else if (kvKey.Value.KeyType == KeyType.Ec || kvKey.Value.KeyType == KeyType.EcHsm) { ECJwk.FromParameters(ConvertToECParameters(kvKey.Value), computeThumbprint: false); } #endif if (!(key is null)) { key.Kid = JsonEncodedText.Encode(kvKey.Value.Key.Id); if (kvKey.Value.Key.KeyOps != null) { foreach (var operation in kvKey.Value.Key.KeyOps) { key.KeyOps.Add(JsonEncodedText.Encode(operation.ToString())); } } keys.Add(key); } } return(keys.ToArray()); }
public static IEnumerable <object[]> GetPropertiesToWrite() { yield return(new object[] { new JwtMember(JsonEncodedText.Encode("object"), new object()), "{\"object\":{}}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("array"), new List <object>()), "{\"array\":[]}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int64"), 1L), "{\"int64\":1}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int32"), 1), "{\"int32\":1}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int16"), (short)1), "{\"int16\":1}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int8"), (byte)1), "{\"int8\":1}" }); #if NETCOREAPP2_1 || NETFRAMEWORK || NETSTANDARD yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.0f), "{\"float\":1}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.1f), "{\"float\":" + ((double)1.1f).ToString("G9", CultureInfo.InvariantCulture) + "}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.0d), "{\"double\":1}" }); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.1d), "{\"double\":" + (1.1d).ToString("G17", CultureInfo.InvariantCulture) + "}" }); #else byte[] destination = new byte[256]; Utf8Formatter.TryFormat(1.0f, destination, out int bytesWritten); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.0f), "{\"float\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" }); Utf8Formatter.TryFormat(1.1f, destination, out bytesWritten); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.1f), "{\"float\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" }); Utf8Formatter.TryFormat(1.0d, destination, out bytesWritten); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.0d), "{\"double\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" }); Utf8Formatter.TryFormat(1.1d, destination, out bytesWritten); yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.1d), "{\"double\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" }); #endif yield return(new object[] { new JwtMember(JsonEncodedText.Encode("string"), "hello"), "{\"string\":\"hello\"}" }); //yield return new object[] { new JwtMember("utf8String", new[] { (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o' }), "{\"utf8String\":\"hello\"}" }; yield return(new object[] { new JwtMember(JsonEncodedText.Encode("boolean"), true), "{\"boolean\":true}" }); }
private async Task InternalAsyncTask(LogEventInfo logEvent, CancellationToken cancellationToken) { InternalLogger.Debug("Sending one log event"); using var sb = ZString.CreateUtf8StringBuilder(); sb.Append("[{\"logs\": ["); if (EscapeJson) { sb.Append("{\"timestamp\": "); sb.Append(new DateTimeOffset(logEvent.TimeStamp).ToUnixTimeMilliseconds()); sb.Append(",\"message\": \""); sb.Append(JsonEncodedText.Encode(Layout.Render(logEvent))); sb.Append("\"}"); } else { sb.Append(Layout.Render(logEvent)); } sb.Append("]}]"); await SendLogStringBuilder(sb, cancellationToken).ConfigureAwait(false); }
public void Write_WithSomeMissingContent_Works() { var value = new ProblemDetails { Title = "Not found", Type = "https://tools.ietf.org/html/rfc7231#section-6.5.4", Status = 404, }; var expected = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status}}}"; var converter = new ProblemDetailsJsonConverter(); var stream = new MemoryStream(); using (var writer = new Utf8JsonWriter(stream)) { converter.Write(writer, value, JsonSerializerOptions); } var actual = Encoding.UTF8.GetString(stream.ToArray()); Assert.Equal(expected, actual); }
public void allows_custom_scalar_that_resolves_to_an_object() { var query = @" query SetsCustomScalarInput($input: JsonScalarReturningObject) { fieldWithCustomScalarInput(input: $input) } "; var expected = @" { ""fieldWithCustomScalarInput"": ""bear-cat, dog, bird"" } "; var jsonInput = @"{ ""stringProperty"": ""bear"", ""arrayProperty"": [""cat"", ""dog"", ""bird""] }"; var jsonInputEncoded = JsonEncodedText.Encode(jsonInput); var inputs = $@"{{ ""input"": ""{jsonInputEncoded}"" }}".ToInputs(); AssertQuerySuccess(query, expected, inputs); }
public bool TryGetEntry(JsonEncodedText kid, [NotNullWhen(true)] out CacheEntry?entry) { // Fast path. Try to avoid the lookup to the dictionary // as we should only have 1 entry if (LatestEntry.Key.Equals(kid)) { entry = LatestEntry.Value; goto Found; } if (Entries.TryGetValue(kid, out entry)) { LatestEntry = new KeyValuePair <JsonEncodedText, CacheEntry>(kid, entry); goto Found; } return(false); Found: return(true); }
public EcdhKeyWrapper(ECJwk key, EncryptionAlgorithm encryptionAlgorithm, KeyManagementAlgorithm algorithm) : base(encryptionAlgorithm, algorithm) { Debug.Assert(key.SupportKeyManagement(algorithm)); Debug.Assert(algorithm.Category == AlgorithmCategory.EllipticCurve); _key = key; if (algorithm.WrappedAlgorithm is null) { _algorithm = encryptionAlgorithm.Name; _keySizeInBytes = encryptionAlgorithm.RequiredKeySizeInBytes; } else { _algorithm = algorithm.Name; _keySizeInBytes = algorithm.WrappedAlgorithm.RequiredKeySizeInBits >> 3; _keyManagementAlgorithm = algorithm.WrappedAlgorithm; } _algorithmNameLength = _algorithm.EncodedUtf8Bytes.Length; _hashAlgorithm = GetHashAlgorithm(encryptionAlgorithm); }
protected override Jwks GetKeysFromSource() { var keys = new List <Jwk>(); foreach (var keyProperties in _client.GetPropertiesOfKeys()) { var kvKey = _client.GetKey(keyProperties.Name); Jwk?key = null; if (kvKey.Value.KeyType == KeyType.Oct) { key = SymmetricJwk.FromByteArray(kvKey.Value.Key.K, false); } else if (kvKey.Value.KeyType == KeyType.Rsa || kvKey.Value.KeyType == KeyType.RsaHsm) { key = RsaJwk.FromParameters(kvKey.Value.Key.ToRSA(true).ExportParameters(true), false); } #if !NETFRAMEWORK else if (kvKey.Value.KeyType == KeyType.Ec || kvKey.Value.KeyType == KeyType.EcHsm) { ECJwk.FromParameters(ConvertToECParameters(kvKey.Value), computeThumbprint: false); } #endif if (!(key is null)) { key.Kid = JsonEncodedText.Encode(kvKey.Value.Key.Id); if (kvKey.Value.Key.KeyOps != null) { foreach (var operation in kvKey.Value.Key.KeyOps) { key.KeyOps.Add(JsonEncodedText.Encode(operation.ToString())); } } keys.Add(key); } } return(new Jwks(_client.VaultUri.ToString(), keys)); }
public override void Write(Utf8JsonWriter writer, Delta <T> value, JsonSerializerOptions options) { if (value == null) { writer.WriteNullValue(); } else { var clrType = typeof(T); var type = _typeHandler.ResolveType(clrType); if (type == null) { throw new JsonException($"Could not resolve API type '{clrType.Name}'"); } writer.WriteStartObject(); foreach (var changedProperty in value.ChangedProperties) { if (type.TryGetProperty(changedProperty.Key, out var property)) { var propertyClrType = property.ClrProperty.PropertyType; var propertyApiType = _typeHandler.ResolveType(propertyClrType); var key = options.PropertyNamingPolicy.ConvertName(property.JsonName); writer.WritePropertyName(JsonEncodedText.Encode(key)); JsonHelper.WriteValue(writer, propertyApiType, changedProperty.Value, null, _typeHandler, options); } } writer.WriteEndObject(); } }
public bool TryGetValue(JsonEncodedText key, out JwtMember value) { if (key.Equals(_value1.Name)) { value = _value1; } else if (key.Equals(_value2.Name)) { value = _value2; } else { #if NET5_0_OR_GREATER Unsafe.SkipInit(out value); #else value = default; #endif return(false); } return(true); }
public EnumConverter(EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions) { _converterOptions = converterOptions; _namingPolicy = namingPolicy; _nameCache = new ConcurrentDictionary <ulong, JsonEncodedText>(); #if NETCOREAPP string[] names = Enum.GetNames <T>(); T[] values = Enum.GetValues <T>(); #else string[] names = Enum.GetNames(TypeToConvert); Array values = Enum.GetValues(TypeToConvert); #endif Debug.Assert(names.Length == values.Length); JavaScriptEncoder?encoder = serializerOptions.Encoder; for (int i = 0; i < names.Length; i++) { if (_nameCache.Count >= NameCacheSizeSoftLimit) { break; } #if NETCOREAPP T value = values[i]; #else T value = (T)values.GetValue(i) !; #endif ulong key = ConvertToUInt64(value); string name = names[i]; _nameCache.TryAdd( key, namingPolicy == null ? JsonEncodedText.Encode(name, encoder) : FormatEnumValue(name, encoder)); } }
public override void Write( Utf8JsonWriter writer, Context value, JsonSerializerOptions options) { // Serialize contect mappings if (value?.Mappings != null) { writer.WriteStartObject(); foreach (KeyValuePair <string, Uri> mapping in value.Mappings) { writer.WriteString( JsonEncodedText.Encode(mapping.Key), mapping.Value.ToString()); } writer.WriteEndObject(); } // Serialize context reference else if (value?.Reference != null) { writer.WriteStringValue(value.Reference.ToString()); } }
public void Equal() { var key = SymmetricJwk.GenerateKey(128); Assert.True(key.Equals(key)); Assert.Equal(key, key); var copiedKey = Jwk.FromJson(key.ToString()); Assert.Equal(key, copiedKey); // 'kid' is not a discriminant, excepted if the value is different. copiedKey.Kid = default; Assert.Equal(key, copiedKey); Assert.Equal(copiedKey, key); key.Kid = default; Assert.Equal(key, copiedKey); key.Kid = JsonEncodedText.Encode("X"); copiedKey.Kid = JsonEncodedText.Encode("Y"); Assert.NotEqual(key, copiedKey); Assert.NotEqual(key, Jwk.None); }
private static IEnumerable <Expression> BuildPropertyWriters(Type type, Expression objectParam, Expression writerParam) { var members = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty); foreach (PropertyInfo property in members) { if (GetPrimitiveWriterExpression(property, objectParam, writerParam, out var writePrimitiveExpression)) { yield return(writePrimitiveExpression); } else { var fieldInfo = typeof(DelegateCacheType <>).MakeGenericType(property.PropertyType).GetField(nameof(cachedDelegateWithName)); var propertyNameExpression = Expression.Constant(JsonEncodedText.Encode(property.Name)); yield return (Expression.IfThenElse( Expression.Equal(Expression.Property(objectParam, property), Expression.Constant(null)), Expression.Call(writerParam, "WriteNull", null, propertyNameExpression), Expression.Invoke(Expression.Field(null, fieldInfo), Expression.Property(objectParam, property), writerParam, propertyNameExpression))); } } }
public bool TryGetValue(JsonEncodedText key, out JwtMember value) { if (key.Equals(_value1.Name)) { value = _value1; } else if (key.Equals(_value2.Name)) { value = _value2; } else if (key.Equals(_value3.Name)) { value = _value3; } else { value = default; return(false); } return(true); }
public void Equal() { var key = PasswordBasedJwk.FromPassphrase("Hello world"); Assert.True(key.Equals(key)); Assert.Equal(key, key); var copiedKey = PasswordBasedJwk.FromPassphrase("Hello world"); Assert.Equal(key, copiedKey); // 'kid' is not a discriminant, excepted if the value is different. copiedKey.Kid = default; Assert.Equal(key, copiedKey); Assert.Equal(copiedKey, key); key.Kid = default; Assert.Equal(key, copiedKey); key.Kid = JsonEncodedText.Encode("X"); copiedKey.Kid = JsonEncodedText.Encode("Y"); Assert.NotEqual(key, copiedKey); Assert.NotEqual(key, Jwk.None); }
private static bool IsEligibleHeaderForJwe(int count, JsonEncodedText kid, string?typ, string?cty) { bool eligible = kid.EncodedUtf8Bytes.Length != 0; if (eligible) { int maxHeaderCount = 3; // alg + enc + kid if (typ != null) { maxHeaderCount++; } if (cty != null) { maxHeaderCount++; } eligible = count <= maxHeaderCount; } return(eligible); }
public static void WriteDictionary( Utf8JsonWriter writer, IDictionary value, IOpenApiType valueType, IOpenApiTypeHandler typeHandler, JsonSerializerOptions options) { writer.WriteStartObject(); foreach (DictionaryEntry dictionaryEntry in value) { var key = options.DictionaryKeyPolicy != null ? options.DictionaryKeyPolicy.ConvertName(dictionaryEntry.Key.ToString()) : dictionaryEntry.Key.ToString(); writer.WritePropertyName(JsonEncodedText.Encode(key)); WriteValue(writer, valueType, dictionaryEntry.Value, null, typeHandler, options); } writer.WriteEndObject(); }
public override void Write( Utf8JsonWriter writer, SupportedClass value, JsonSerializerOptions options) { writer.WriteStartObject(); WriteStringIfNotNull("@id", value.Id?.ToString()); writer.WriteString(JsonEncodedText.Encode("@type"), value.Type); WriteStringIfNotNull("title", value.Title); WriteStringIfNotNull("description", value.Description); // Member assertion serialization for collections if (value is SupportedCollection supportedCollection) { WriteObjectIfNotNull("memberAssertion", supportedCollection.MemberAssertion); } WriteObjectIfNotNull("supportedProperty", value.SupportedProperties); WriteObjectIfNotNull("supportedOperation", value.SupportedOperations); void WriteObjectIfNotNull <T>(string propertyName, T value) { if (value != null) { writer.WritePropertyName(propertyName); string valueJson = JsonSerializer.Serialize(value); using JsonDocument document = JsonDocument.Parse(valueJson); document.RootElement.WriteTo(writer); } } void WriteStringIfNotNull(string propertyName, string?value) { if (value != null) { writer.WriteString(JsonEncodedText.Encode(propertyName), value); } } writer.WriteEndObject(); }
public void AddHeader_WithKid() { const int Count = 10; var cache = new LruJwtHeaderCache(); byte[] binaryHeader; var headers = new JwtHeader[10]; JwtHeader header; for (int i = 0; i < Count; i++) { string kid = i.ToString(); binaryHeader = new byte[10] { (byte)i, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; headers[i] = header = new JwtHeader { { "alg", "whatever" } }; cache.AddHeader(header, SignatureAlgorithm.HS256, JsonEncodedText.Encode(kid), default, binaryHeader);
static void Main() { // Key sample from https://tools.ietf.org/html/rfc7517#appendix-C var rsaKey = RsaJwk.FromBase64Url ( n: "t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRyO125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0XOC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q", e: "AQAB", d: "GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfSNkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9UvqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnuToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsurY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2ahecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ", p: "2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHfQP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws", q: "1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6Iedis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYKrYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s", dp: "KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1wY52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c", dq: "AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBymXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots", qi: "lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqqabu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0oYu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8" ); rsaKey.Kid = JsonEncodedText.Encode("*****@*****.**"); rsaKey.Use = JwkUseValues.Enc; // Generates the password based key var sharedPassword = PasswordBasedJwk.FromPassphrase("Thus from my lips, by yours, my sin is purged.", iterationCount: 4096, saltSizeInBytes: 16, computeThumbprint: false); // Creates the JWE descriptor for JWK // The descriptor sets the 'alg' with value 'PBES2-HS256+A128KW' and 'enc' with value 'A128CBC-HS256' var descriptor = new JwkJweDescriptor(sharedPassword, KeyManagementAlgorithm.Pbes2HS256A128KW, EncryptionAlgorithm.A128CbcHS256) { Payload = rsaKey }; // Generates the UTF-8 string representation of the JWT var writer = new JwtWriter(); var token = writer.WriteTokenString(descriptor); Console.WriteLine("The JWT is:"); Console.WriteLine(descriptor); Console.WriteLine(); Console.WriteLine("Its compact form is:"); Console.WriteLine(token); }
public Jwk CanonicalizeKey(Jwk key) { key.Kid = JsonEncodedText.Encode("kid"); key.Use = JwkUseValues.Sig; key.X5c.Add(new byte[0]); key.X5t = Base64Url.Decode("XOf1YEg_zFLX0PtGjiEVvjM1WsA"); key.X5tS256 = Base64Url.Decode("ZgPMqAT8BELhXwBa2nIT0OvdWtQCiF_g09nAyHhgCe0"); key.X5u = "https://example.com/jwks"; var json = key.Canonicalize(); var canonicalizedKey = Jwk.FromJson(Encoding.UTF8.GetString(json)); Assert.NotNull(canonicalizedKey); Assert.True(canonicalizedKey.Alg.EncodedUtf8Bytes.IsEmpty); Assert.True(canonicalizedKey.Kid.EncodedUtf8Bytes.IsEmpty); Assert.True(canonicalizedKey.Use.EncodedUtf8Bytes.IsEmpty); Assert.Empty(canonicalizedKey.X5c); Assert.Null(canonicalizedKey.X5t); Assert.Null(canonicalizedKey.X5tS256); Assert.Null(canonicalizedKey.X5u); return(canonicalizedKey); }