diff --git a/src/ScottBrady.IdentityModel/Extensions/ExtendedJsonWebKeyConverter.cs b/src/ScottBrady.IdentityModel/Extensions/ExtendedJsonWebKeyConverter.cs index c44dcb8..4314992 100644 --- a/src/ScottBrady.IdentityModel/Extensions/ExtendedJsonWebKeyConverter.cs +++ b/src/ScottBrady.IdentityModel/Extensions/ExtendedJsonWebKeyConverter.cs @@ -27,9 +27,7 @@ public static bool TryConvertToEdDsaSecurityKey(JsonWebKey webKey, out EdDsaSecu { key = null; - if (webKey != null - && webKey.Kty == ExtendedSecurityAlgorithms.KeyTypes.Ecdh - && webKey.Alg == ExtendedSecurityAlgorithms.EdDsa) + if (webKey != null && webKey.Kty == ExtendedSecurityAlgorithms.KeyTypes.Ecdh) { if (webKey.Crv == ExtendedSecurityAlgorithms.Curves.Ed25519 || webKey.Crv == ExtendedSecurityAlgorithms.Curves.Ed448) diff --git a/test/ScottBrady.IdentityModel.Tests/Tokens/ExtendedJsonWebKeyConverterTests.cs b/test/ScottBrady.IdentityModel.Tests/Extensions/ExtendedJsonWebKeyConverterTests.cs similarity index 88% rename from test/ScottBrady.IdentityModel.Tests/Tokens/ExtendedJsonWebKeyConverterTests.cs rename to test/ScottBrady.IdentityModel.Tests/Extensions/ExtendedJsonWebKeyConverterTests.cs index e9a9ff3..6cca3a8 100644 --- a/test/ScottBrady.IdentityModel.Tests/Tokens/ExtendedJsonWebKeyConverterTests.cs +++ b/test/ScottBrady.IdentityModel.Tests/Extensions/ExtendedJsonWebKeyConverterTests.cs @@ -5,7 +5,7 @@ using ScottBrady.IdentityModel.Tokens; using Xunit; -namespace ScottBrady.IdentityModel.Tests.Tokens; +namespace ScottBrady.IdentityModel.Tests.Extensions; public class ExtendedJsonWebKeyConverterTests { @@ -157,7 +157,7 @@ public void TryConvertToEdDsaSecurityKey_WhenJwkIsEd448PublicKey_ReturnsTrueWith [Fact] public void ConvertFromEdDsaSecurityKey_TryConvertToEdDsaSecurityKey_ExpectConvertableKey() { - const string jwk = "{\n \"kty\": \"OKP\",\n \"alg\": \"EdDSA\",\n \"crv\": \"Ed25519\",\n \"x\": \"60mR98SQlHUSeLeIu7TeJBTLRG10qlcDLU4AJjQdqMQ\"\n}"; + const string jwk = "{\"kty\":\"OKP\",\"crv\": \"Ed25519\",\"alg\":\"EdDSA\",\"x\":\"60mR98SQlHUSeLeIu7TeJBTLRG10qlcDLU4AJjQdqMQ\"}"; var jsonWebKey = new JsonWebKey(jwk); ExtendedJsonWebKeyConverter.TryConvertToEdDsaSecurityKey(jsonWebKey, out var edDsaKey).Should().BeTrue(); @@ -166,6 +166,19 @@ public void ConvertFromEdDsaSecurityKey_TryConvertToEdDsaSecurityKey_ExpectConve jsonWebKey.Should().BeEquivalentTo(convertedJsonWebKey); } + [Fact] + public void ConvertFromEdDsaSecurityKey_WithRfc8037Jwk_ExpectConvertableKey() + { + const string jwk = "{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"d\":\"nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A\",\"x\":\"11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo\"}"; + var jsonWebKey = new JsonWebKey(jwk); + + ExtendedJsonWebKeyConverter.TryConvertToEdDsaSecurityKey(jsonWebKey, out var edDsaKey).Should().BeTrue(); + var convertedJsonWebKey = ExtendedJsonWebKeyConverter.ConvertFromEdDsaSecurityKey(edDsaKey); + + // RFC8037 test vectors do not include the alg parameter + jsonWebKey.Should().BeEquivalentTo(convertedJsonWebKey, options => options.Excluding(x => x.Alg)); + } + private static void TestAndAssertFailure(JsonWebKey jwk) { var isSuccess = ExtendedJsonWebKeyConverter.TryConvertToEdDsaSecurityKey(jwk, out var key); diff --git a/test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/EdDsaBaseClassTests.cs b/test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/AsymmetricAlgorithmTests.cs similarity index 99% rename from test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/EdDsaBaseClassTests.cs rename to test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/AsymmetricAlgorithmTests.cs index b4a25ef..fd1130d 100644 --- a/test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/EdDsaBaseClassTests.cs +++ b/test/ScottBrady.IdentityModel.Tests/Tokens/EdDSA/AsymmetricAlgorithm/AsymmetricAlgorithmTests.cs @@ -8,7 +8,7 @@ namespace ScottBrady.IdentityModel.Tests.Tokens.EdDSA.AsymmetricAlgorithm; -public class EdDsaBaseClassTests : EdDsaTestBase +public class AsymmetricAlgorithmTests : EdDsaTestBase { public static TheoryData Keys => new TheoryData { { _ed25519Key, 32 }, { _ed448Key, 57 } }; @@ -154,6 +154,4 @@ public void Clear_WhenDisposed_ExpectNoException(EdDsa key, int _) [Theory, MemberData(nameof(Keys))] public void Dispose_WhenDisposed_ExpectNoException(EdDsa key, int _) => key.Dispose(); - - } \ No newline at end of file diff --git a/test/ScottBrady.IdentityModel.Tests/Tokens/JwtBearerHandlerTests.cs b/test/ScottBrady.IdentityModel.Tests/Tokens/JwtBearerHandlerTests.cs new file mode 100644 index 0000000..45ba888 --- /dev/null +++ b/test/ScottBrady.IdentityModel.Tests/Tokens/JwtBearerHandlerTests.cs @@ -0,0 +1,6 @@ +namespace ScottBrady.IdentityModel.Tests.Tokens; + +public class JwtBearerHandlerTests +{ + +} \ No newline at end of file