KeyConverter.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Security.Cryptography;
  2. using Microsoft.IdentityModel.Tokens;
  3. namespace Passwordless;
  4. public static class KeyConverter
  5. {
  6. public static RSA JwkToRsa(JsonWebKey key)
  7. {
  8. var rsaParameters = new RSAParameters
  9. {
  10. // PUBLIC KEY PARAMETERS
  11. // n parameter - public modulus
  12. Modulus = Base64UrlEncoder.DecodeBytes(key.N),
  13. // e parameter - public exponent
  14. Exponent = Base64UrlEncoder.DecodeBytes(key.E),
  15. // PRIVATE KEY PARAMETERS (optional)
  16. // d parameter - the private exponent value for the RSA key
  17. D = Base64UrlEncoder.DecodeBytes(key.D),
  18. // dp parameter - CRT exponent of the first factor
  19. DP = Base64UrlEncoder.DecodeBytes(key.DP),
  20. // dq parameter - CRT exponent of the second factor
  21. DQ = Base64UrlEncoder.DecodeBytes(key.DQ),
  22. // p parameter - first prime factor
  23. P = Base64UrlEncoder.DecodeBytes(key.P),
  24. // q parameter - second prime factor
  25. Q = Base64UrlEncoder.DecodeBytes(key.Q),
  26. // qi parameter - CRT coefficient of the second factor
  27. InverseQ = Base64UrlEncoder.DecodeBytes(key.QI)
  28. };
  29. return RSA.Create(rsaParameters);
  30. }
  31. public static JsonWebKey ExtractPublicKey(JsonWebKey key)
  32. {
  33. return new JsonWebKey()
  34. {
  35. Kty = key.Kty,
  36. E = key.E,
  37. N = key.N,
  38. Use = "sig",
  39. };
  40. }
  41. }