diff --git a/Sustainsys.Saml2/ManagedSha256SignatureDescription.cs b/Sustainsys.Saml2/ManagedRSASignatureDescription.cs similarity index 71% rename from Sustainsys.Saml2/ManagedSha256SignatureDescription.cs rename to Sustainsys.Saml2/ManagedRSASignatureDescription.cs index 9e33a9531..dcf20447f 100644 --- a/Sustainsys.Saml2/ManagedSha256SignatureDescription.cs +++ b/Sustainsys.Saml2/ManagedRSASignatureDescription.cs @@ -12,15 +12,31 @@ namespace Sustainsys.Saml2 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SHA")] public abstract class ManagedRSASignatureDescription : SignatureDescription { - public abstract string HashAlgorithm { get; } + public string HashAlgorithm { get; } /// /// Ctor /// - public ManagedRSASignatureDescription() + public ManagedRSASignatureDescription(int keyLength) { KeyAlgorithm = typeof(RSACryptoServiceProvider).FullName; - DigestAlgorithm = typeof(SHA256Managed).FullName; + switch (keyLength) + { + case 256: + HashAlgorithm = "sha256"; + DigestAlgorithm = typeof(SHA256Managed).FullName; + break; + case 384: + HashAlgorithm = "sha384"; + DigestAlgorithm = typeof(SHA384Managed).FullName; + break; + case 512: + HashAlgorithm = "sha512"; + DigestAlgorithm = typeof(SHA512Managed).FullName; + break; + default: + throw new InvalidOperationException($"Unexpected SHA key length= {keyLength}"); + } } /// @@ -64,16 +80,22 @@ public override AsymmetricSignatureFormatter CreateFormatter(AsymmetricAlgorithm public class ManagedRSASHA256SignatureDescription : ManagedRSASignatureDescription { - public override string HashAlgorithm => "sha256"; + public ManagedRSASHA256SignatureDescription() : base(256) + { + } } public class ManagedRSASHA384SignatureDescription : ManagedRSASignatureDescription { - public override string HashAlgorithm => "sha384"; + public ManagedRSASHA384SignatureDescription() : base(384) + { + } } public class ManagedRSASHA512SignatureDescription : ManagedRSASignatureDescription { - public override string HashAlgorithm => "sha512"; + public ManagedRSASHA512SignatureDescription() : base(512) + { + } } }