public static ISigner GetSigner( string algorithm) { if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = algorithm.ToUpper(CultureInfo.InvariantCulture); string mechanism = (string)algorithms[algorithm]; if (mechanism == null) { mechanism = algorithm; } if (mechanism.Equals("RSA")) { return(new RsaDigestSigner(new NullDigest())); } if (mechanism.Equals("MD2withRSA")) { return(new RsaDigestSigner(new MD2Digest())); } if (mechanism.Equals("MD4withRSA")) { return(new RsaDigestSigner(new MD4Digest())); } if (mechanism.Equals("MD5withRSA")) { return(new RsaDigestSigner(new MD5Digest())); } if (mechanism.Equals("SHA-1withRSA")) { return(new RsaDigestSigner(new Sha1Digest())); } if (mechanism.Equals("SHA-224withRSA")) { return(new RsaDigestSigner(new Sha224Digest())); } if (mechanism.Equals("SHA-256withRSA")) { return(new RsaDigestSigner(new Sha256Digest())); } if (mechanism.Equals("SHA-384withRSA")) { return(new RsaDigestSigner(new Sha384Digest())); } if (mechanism.Equals("SHA-512withRSA")) { return(new RsaDigestSigner(new Sha512Digest())); } if (mechanism.Equals("RIPEMD128withRSA")) { return(new RsaDigestSigner(new RipeMD128Digest())); } if (mechanism.Equals("RIPEMD160withRSA")) { return(new RsaDigestSigner(new RipeMD160Digest())); } if (mechanism.Equals("RIPEMD256withRSA")) { return(new RsaDigestSigner(new RipeMD256Digest())); } if (mechanism.Equals("RAWRSASSA-PSS")) { // TODO Add support for other parameter settings return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("PSSwithRSA")) { // TODO The Sha1Digest here is a default. In JCE version, the actual digest // to be used can be overridden by subsequent parameter settings. return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("SHA-1withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha512Digest())); } if (mechanism.Equals("NONEwithDSA")) { return(new DsaDigestSigner(new DsaSigner(), new NullDigest())); } if (mechanism.Equals("SHA-1withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha512Digest())); } if (mechanism.Equals("NONEwithECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new NullDigest())); } if (mechanism.Equals("SHA-1withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha512Digest())); } if (mechanism.Equals("RIPEMD160withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new RipeMD160Digest())); } if (mechanism.Equals("SHA1WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA224WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA256WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA384WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA512WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha512Digest())); } if (mechanism.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true)); } if (mechanism.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true)); } if (mechanism.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true)); } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }
public static ISigner GetSigner( string algorithm) { if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = Platform.ToUpperInvariant(algorithm); string mechanism = (string)algorithms[algorithm]; if (mechanism == null) { mechanism = algorithm; } if (mechanism.Equals("RSA")) { return(new RsaDigestSigner(new NullDigest(), (AlgorithmIdentifier)null)); } if (mechanism.Equals("MD2withRSA")) { return(new RsaDigestSigner(new MD2Digest())); } if (mechanism.Equals("MD4withRSA")) { return(new RsaDigestSigner(new MD4Digest())); } if (mechanism.Equals("MD5withRSA")) { return(new RsaDigestSigner(new MD5Digest())); } if (mechanism.Equals("SHA-1withRSA")) { return(new RsaDigestSigner(new Sha1Digest())); } if (mechanism.Equals("SHA-224withRSA")) { return(new RsaDigestSigner(new Sha224Digest())); } if (mechanism.Equals("SHA-256withRSA")) { return(new RsaDigestSigner(new Sha256Digest())); } if (mechanism.Equals("SHA-384withRSA")) { return(new RsaDigestSigner(new Sha384Digest())); } if (mechanism.Equals("SHA-512withRSA")) { return(new RsaDigestSigner(new Sha512Digest())); } if (mechanism.Equals("RIPEMD128withRSA")) { return(new RsaDigestSigner(new RipeMD128Digest())); } if (mechanism.Equals("RIPEMD160withRSA")) { return(new RsaDigestSigner(new RipeMD160Digest())); } if (mechanism.Equals("RIPEMD256withRSA")) { return(new RsaDigestSigner(new RipeMD256Digest())); } if (mechanism.Equals("RAWRSASSA-PSS")) { // TODO Add support for other parameter settings return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("PSSwithRSA")) { // TODO The Sha1Digest here is a default. In JCE version, the actual digest // to be used can be overridden by subsequent parameter settings. return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("SHA-1withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha512Digest())); } if (mechanism.Equals("NONEwithDSA")) { return(new DsaDigestSigner(new DsaSigner(), new NullDigest())); } if (mechanism.Equals("SHA-1withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha512Digest())); } if (mechanism.Equals("NONEwithECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new NullDigest())); } if (mechanism.Equals("SHA-1withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA-224withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA-256withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA-384withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA-512withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha512Digest())); } if (mechanism.Equals("RIPEMD160withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new RipeMD160Digest())); } if (mechanism.Equals("SHA1WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha1Digest())); } if (mechanism.Equals("SHA224WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha224Digest())); } if (mechanism.Equals("SHA256WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha256Digest())); } if (mechanism.Equals("SHA384WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha384Digest())); } if (mechanism.Equals("SHA512WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha512Digest())); } if (mechanism.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true)); } if (mechanism.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true)); } if (mechanism.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true)); } if (Platform.EndsWith(mechanism, "/X9.31")) { string x931 = mechanism.Substring(0, mechanism.Length - "/X9.31".Length); int withPos = Platform.IndexOf(x931, "WITH"); if (withPos > 0) { int endPos = withPos + "WITH".Length; string digestName = x931.Substring(0, withPos); IDigest digest = DigestUtilities.GetDigest(digestName); string cipherName = x931.Substring(endPos, x931.Length - endPos); if (cipherName.Equals("RSA")) { IAsymmetricBlockCipher cipher = new RsaBlindedEngine(); return(new X931Signer(cipher, digest)); } } } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }
public static ISigner GetSigner( string algorithm) { if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.ToUpperInvariant(algorithm); string mechanism = (string)algorithms[algorithm]; if (mechanism == null) { mechanism = algorithm; } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.StartsWith(mechanism, "Ed")) { if (mechanism.Equals("Ed25519")) { return(new Ed25519Signer()); } if (mechanism.Equals("Ed25519ctx")) { return(new Ed25519ctxSigner(Arrays.EmptyBytes)); } if (mechanism.Equals("Ed25519ph")) { return(new Ed25519phSigner(Arrays.EmptyBytes)); } if (mechanism.Equals("Ed448")) { return(new Ed448Signer(Arrays.EmptyBytes)); } if (mechanism.Equals("Ed448ph")) { return(new Ed448phSigner(Arrays.EmptyBytes)); } } if (mechanism.Equals("RSA")) { return(new RsaDigestSigner(new NullDigest(), (AlgorithmIdentifier)null)); } if (mechanism.Equals("RAWRSASSA-PSS")) { // TODO Add support for other parameter settings return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (mechanism.Equals("PSSwithRSA")) { // TODO The Sha1Digest here is a default. In JCE version, the actual digest // to be used can be overridden by subsequent parameter settings. return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withRSA")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new RsaDigestSigner(digest)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withRSAandMGF1")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new PssSigner(new RsaBlindedEngine(), digest)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withDSA")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new DsaDigestSigner(new DsaSigner(), digest)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withECDSA")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new DsaDigestSigner(new ECDsaSigner(), digest)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withCVC-ECDSA") || BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withPLAIN-ECDSA")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new DsaDigestSigner(new ECDsaSigner(), digest, PlainDsaEncoding.Instance)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "withECNR")) { string digestName = mechanism.Substring(0, mechanism.LastIndexOf("with")); IDigest digest = DigestUtilities.GetDigest(digestName); return(new DsaDigestSigner(new ECNRSigner(), digest)); } if (mechanism.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (mechanism.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true)); } if (mechanism.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true)); } if (mechanism.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true)); } if (BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.EndsWith(mechanism, "/X9.31")) { string x931 = mechanism.Substring(0, mechanism.Length - "/X9.31".Length); int withPos = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.IndexOf(x931, "WITH"); if (withPos > 0) { int endPos = withPos + "WITH".Length; string digestName = x931.Substring(0, withPos); IDigest digest = DigestUtilities.GetDigest(digestName); string cipherName = x931.Substring(endPos, x931.Length - endPos); if (cipherName.Equals("RSA")) { IAsymmetricBlockCipher cipher = new RsaBlindedEngine(); return(new X931Signer(cipher, digest)); } } } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }
public static ISigner GetSigner(string algorithm) { if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = Platform.ToUpperInvariant(algorithm); string source = (string)algorithms[algorithm]; if (source == null) { source = algorithm; } if (source.Equals("RSA")) { return(new RsaDigestSigner(new NullDigest(), null)); } if (source.Equals("MD2withRSA")) { return(new RsaDigestSigner(new MD2Digest())); } if (source.Equals("MD4withRSA")) { return(new RsaDigestSigner(new MD4Digest())); } if (source.Equals("MD5withRSA")) { return(new RsaDigestSigner(new MD5Digest())); } if (source.Equals("SHA-1withRSA")) { return(new RsaDigestSigner(new Sha1Digest())); } if (source.Equals("SHA-224withRSA")) { return(new RsaDigestSigner(new Sha224Digest())); } if (source.Equals("SHA-256withRSA")) { return(new RsaDigestSigner(new Sha256Digest())); } if (source.Equals("SHA-384withRSA")) { return(new RsaDigestSigner(new Sha384Digest())); } if (source.Equals("SHA-512withRSA")) { return(new RsaDigestSigner(new Sha512Digest())); } if (source.Equals("RIPEMD128withRSA")) { return(new RsaDigestSigner(new RipeMD128Digest())); } if (source.Equals("RIPEMD160withRSA")) { return(new RsaDigestSigner(new RipeMD160Digest())); } if (source.Equals("RIPEMD256withRSA")) { return(new RsaDigestSigner(new RipeMD256Digest())); } if (source.Equals("RAWRSASSA-PSS")) { return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (source.Equals("PSSwithRSA")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (source.Equals("SHA-1withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (source.Equals("SHA-224withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha224Digest())); } if (source.Equals("SHA-256withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha256Digest())); } if (source.Equals("SHA-384withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha384Digest())); } if (source.Equals("SHA-512withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha512Digest())); } if (source.Equals("NONEwithDSA")) { return(new DsaDigestSigner(new DsaSigner(), new NullDigest())); } if (source.Equals("SHA-1withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha1Digest())); } if (source.Equals("SHA-224withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha224Digest())); } if (source.Equals("SHA-256withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha256Digest())); } if (source.Equals("SHA-384withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha384Digest())); } if (source.Equals("SHA-512withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha512Digest())); } if (source.Equals("NONEwithECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new NullDigest())); } if (source.Equals("SHA-1withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha1Digest())); } if (source.Equals("SHA-224withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha224Digest())); } if (source.Equals("SHA-256withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha256Digest())); } if (source.Equals("SHA-384withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha384Digest())); } if (source.Equals("SHA-512withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha512Digest())); } if (source.Equals("RIPEMD160withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new RipeMD160Digest())); } if (source.Equals("SHA1WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha1Digest())); } if (source.Equals("SHA224WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha224Digest())); } if (source.Equals("SHA256WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha256Digest())); } if (source.Equals("SHA384WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha384Digest())); } if (source.Equals("SHA512WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha512Digest())); } if (source.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (source.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (source.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true)); } if (source.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true)); } if (source.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true)); } if (Platform.EndsWith(source, "/X9.31")) { string str2 = source.Substring(0, source.Length - "/X9.31".Length); int index = Platform.IndexOf(str2, "WITH"); if (index > 0) { int startIndex = index + "WITH".Length; IDigest digest = DigestUtilities.GetDigest(str2.Substring(0, index)); if (str2.Substring(startIndex, str2.Length - startIndex).Equals("RSA")) { return(new X931Signer(new RsaBlindedEngine(), digest)); } } } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }
public static ISigner GetSigner(string algorithm) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = Platform.ToUpperInvariant(algorithm); string text = (string)algorithms.get_Item((object)algorithm); if (text == null) { text = algorithm; } if (text.Equals("RSA")) { return(new RsaDigestSigner((IDigest) new NullDigest(), (AlgorithmIdentifier)null)); } if (text.Equals("MD2withRSA")) { return(new RsaDigestSigner(new MD2Digest())); } if (text.Equals("MD4withRSA")) { return(new RsaDigestSigner(new MD4Digest())); } if (text.Equals("MD5withRSA")) { return(new RsaDigestSigner(new MD5Digest())); } if (text.Equals("SHA-1withRSA")) { return(new RsaDigestSigner(new Sha1Digest())); } if (text.Equals("SHA-224withRSA")) { return(new RsaDigestSigner(new Sha224Digest())); } if (text.Equals("SHA-256withRSA")) { return(new RsaDigestSigner(new Sha256Digest())); } if (text.Equals("SHA-384withRSA")) { return(new RsaDigestSigner(new Sha384Digest())); } if (text.Equals("SHA-512withRSA")) { return(new RsaDigestSigner(new Sha512Digest())); } if (text.Equals("RIPEMD128withRSA")) { return(new RsaDigestSigner(new RipeMD128Digest())); } if (text.Equals("RIPEMD160withRSA")) { return(new RsaDigestSigner(new RipeMD160Digest())); } if (text.Equals("RIPEMD256withRSA")) { return(new RsaDigestSigner(new RipeMD256Digest())); } if (text.Equals("RAWRSASSA-PSS")) { return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("PSSwithRSA")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("SHA-1withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("SHA-224withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha224Digest())); } if (text.Equals("SHA-256withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha256Digest())); } if (text.Equals("SHA-384withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha384Digest())); } if (text.Equals("SHA-512withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha512Digest())); } if (text.Equals("NONEwithDSA")) { return(new DsaDigestSigner(new DsaSigner(), new NullDigest())); } if (text.Equals("SHA-1withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha1Digest())); } if (text.Equals("SHA-224withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha224Digest())); } if (text.Equals("SHA-256withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha256Digest())); } if (text.Equals("SHA-384withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha384Digest())); } if (text.Equals("SHA-512withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha512Digest())); } if (text.Equals("NONEwithECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new NullDigest())); } if (text.Equals("SHA-1withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha1Digest())); } if (text.Equals("SHA-224withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha224Digest())); } if (text.Equals("SHA-256withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha256Digest())); } if (text.Equals("SHA-384withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha384Digest())); } if (text.Equals("SHA-512withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha512Digest())); } if (text.Equals("RIPEMD160withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new RipeMD160Digest())); } if (text.Equals("SHA1WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha1Digest())); } if (text.Equals("SHA224WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha224Digest())); } if (text.Equals("SHA256WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha256Digest())); } if (text.Equals("SHA384WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha384Digest())); } if (text.Equals("SHA512WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha512Digest())); } if (text.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (text.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (text.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), isImplicit: true)); } if (text.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), isImplicit: true)); } if (text.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), isImplicit: true)); } if (Platform.EndsWith(text, "/X9.31")) { string text2 = text.Substring(0, text.get_Length() - "/X9.31".get_Length()); int num = Platform.IndexOf(text2, "WITH"); if (num > 0) { int num2 = num + "WITH".get_Length(); string algorithm2 = text2.Substring(0, num); IDigest digest = DigestUtilities.GetDigest(algorithm2); string text3 = text2.Substring(num2, text2.get_Length() - num2); if (text3.Equals("RSA")) { IAsymmetricBlockCipher cipher = new RsaBlindedEngine(); return(new X931Signer(cipher, digest)); } } } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }
private bool DoVerify( AsymmetricKeyParameter key) { string digestName = Helper.GetDigestAlgName(this.DigestAlgOid); IDigest digest = Helper.GetDigestInstance(digestName); DerObjectIdentifier sigAlgOid = this.encryptionAlgorithm.Algorithm; Asn1Encodable sigParams = this.encryptionAlgorithm.Parameters; ISigner sig; if (sigAlgOid.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdRsassaPss)) { // RFC 4056 2.2 // When the id-RSASSA-PSS algorithm identifier is used for a signature, // the AlgorithmIdentifier parameters field MUST contain RSASSA-PSS-params. if (sigParams == null) { throw new CmsException("RSASSA-PSS signature must specify algorithm parameters"); } try { // TODO Provide abstract configuration mechanism // (via alternate SignerUtilities.GetSigner method taking ASN.1 params) Asn1.Pkcs.RsassaPssParameters pss = Asn1.Pkcs.RsassaPssParameters.GetInstance( sigParams.ToAsn1Object()); if (!pss.HashAlgorithm.Algorithm.Equals(this.digestAlgorithm.Algorithm)) { throw new CmsException("RSASSA-PSS signature parameters specified incorrect hash algorithm"); } if (!pss.MaskGenAlgorithm.Algorithm.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdMgf1)) { throw new CmsException("RSASSA-PSS signature parameters specified unknown MGF"); } IDigest pssDigest = DigestUtilities.GetDigest(pss.HashAlgorithm.Algorithm); int saltLength = pss.SaltLength.IntValueExact; // RFC 4055 3.1 // The value MUST be 1, which represents the trailer field with hexadecimal value 0xBC if (!Asn1.Pkcs.RsassaPssParameters.DefaultTrailerField.Equals(pss.TrailerField)) { throw new CmsException("RSASSA-PSS signature parameters must have trailerField of 1"); } IAsymmetricBlockCipher rsa = new RsaBlindedEngine(); if (signedAttributeSet == null && digestCalculator != null) { sig = PssSigner.CreateRawSigner(rsa, pssDigest, pssDigest, saltLength, PssSigner.TrailerImplicit); } else { sig = new PssSigner(rsa, pssDigest, saltLength); } } catch (Exception e) { throw new CmsException("failed to set RSASSA-PSS signature parameters", e); } } else { // TODO Probably too strong a check at the moment // if (sigParams != null) // throw new CmsException("unrecognised signature parameters provided"); string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(this.EncryptionAlgOid); sig = Helper.GetSignatureInstance(signatureName); //sig = Helper.GetSignatureInstance(this.EncryptionAlgOid); //sig = SignerUtilities.GetSigner(sigAlgOid); } try { if (digestCalculator != null) { resultDigest = digestCalculator.GetDigest(); } else { if (content != null) { content.Write(new DigestSink(digest)); } else if (signedAttributeSet == null) { // TODO Get rid of this exception and just treat content==null as empty not missing? throw new CmsException("data not encapsulated in signature - use detached constructor."); } resultDigest = DigestUtilities.DoFinal(digest); } } catch (IOException e) { throw new CmsException("can't process mime object to create signature.", e); } // RFC 3852 11.1 Check the content-type attribute is correct { Asn1Object validContentType = GetSingleValuedSignedAttribute( CmsAttributes.ContentType, "content-type"); if (validContentType == null) { if (!isCounterSignature && signedAttributeSet != null) { throw new CmsException("The content-type attribute type MUST be present whenever signed attributes are present in signed-data"); } } else { if (isCounterSignature) { throw new CmsException("[For counter signatures,] the signedAttributes field MUST NOT contain a content-type attribute"); } if (!(validContentType is DerObjectIdentifier)) { throw new CmsException("content-type attribute value not of ASN.1 type 'OBJECT IDENTIFIER'"); } DerObjectIdentifier signedContentType = (DerObjectIdentifier)validContentType; if (!signedContentType.Equals(contentType)) { throw new CmsException("content-type attribute value does not match eContentType"); } } } // RFC 3852 11.2 Check the message-digest attribute is correct { Asn1Object validMessageDigest = GetSingleValuedSignedAttribute( CmsAttributes.MessageDigest, "message-digest"); if (validMessageDigest == null) { if (signedAttributeSet != null) { throw new CmsException("the message-digest signed attribute type MUST be present when there are any signed attributes present"); } } else { if (!(validMessageDigest is Asn1OctetString)) { throw new CmsException("message-digest attribute value not of ASN.1 type 'OCTET STRING'"); } Asn1OctetString signedMessageDigest = (Asn1OctetString)validMessageDigest; if (!Arrays.AreEqual(resultDigest, signedMessageDigest.GetOctets())) { throw new CmsException("message-digest attribute value does not match calculated value"); } } } // RFC 3852 11.4 Validate countersignature attribute(s) { Asn1.Cms.AttributeTable signedAttrTable = this.SignedAttributes; if (signedAttrTable != null && signedAttrTable.GetAll(CmsAttributes.CounterSignature).Count > 0) { throw new CmsException("A countersignature attribute MUST NOT be a signed attribute"); } Asn1.Cms.AttributeTable unsignedAttrTable = this.UnsignedAttributes; if (unsignedAttrTable != null) { foreach (Asn1.Cms.Attribute csAttr in unsignedAttrTable.GetAll(CmsAttributes.CounterSignature)) { if (csAttr.AttrValues.Count < 1) { throw new CmsException("A countersignature attribute MUST contain at least one AttributeValue"); } // Note: We don't recursively validate the countersignature value } } } try { sig.Init(false, key); if (signedAttributeSet == null) { if (digestCalculator != null) { if (sig is PssSigner) { sig.BlockUpdate(resultDigest, 0, resultDigest.Length); } else { // need to decrypt signature and check message bytes return(VerifyDigest(resultDigest, key, this.GetSignature())); } } else if (content != null) { try { // TODO Use raw signature of the hash value instead content.Write(new SignerSink(sig)); } catch (SignatureException e) { throw new CmsStreamException("signature problem: " + e); } } } else { byte[] tmp = this.GetEncodedSignedAttributes(); sig.BlockUpdate(tmp, 0, tmp.Length); } return(sig.VerifySignature(this.GetSignature())); } catch (InvalidKeyException e) { throw new CmsException("key not appropriate to signature in message.", e); } catch (IOException e) { throw new CmsException("can't process mime object to create signature.", e); } catch (SignatureException e) { throw new CmsException("invalid signature format in message: " + e.Message, e); } }
public static ISigner GetSigner(string algorithm) { if (algorithm == null) { throw new ArgumentNullException("algorithm"); } algorithm = Platform.ToUpperInvariant(algorithm); string text = (string)SignerUtilities.algorithms[algorithm]; if (text == null) { text = algorithm; } if (text.Equals("RSA")) { return(new RsaDigestSigner(new NullDigest(), null)); } if (text.Equals("MD2withRSA")) { return(new RsaDigestSigner(new MD2Digest())); } if (text.Equals("MD4withRSA")) { return(new RsaDigestSigner(new MD4Digest())); } if (text.Equals("MD5withRSA")) { return(new RsaDigestSigner(new MD5Digest())); } if (text.Equals("SHA-1withRSA")) { return(new RsaDigestSigner(new Sha1Digest())); } if (text.Equals("SHA-224withRSA")) { return(new RsaDigestSigner(new Sha224Digest())); } if (text.Equals("SHA-256withRSA")) { return(new RsaDigestSigner(new Sha256Digest())); } if (text.Equals("SHA-384withRSA")) { return(new RsaDigestSigner(new Sha384Digest())); } if (text.Equals("SHA-512withRSA")) { return(new RsaDigestSigner(new Sha512Digest())); } if (text.Equals("RIPEMD128withRSA")) { return(new RsaDigestSigner(new RipeMD128Digest())); } if (text.Equals("RIPEMD160withRSA")) { return(new RsaDigestSigner(new RipeMD160Digest())); } if (text.Equals("RIPEMD256withRSA")) { return(new RsaDigestSigner(new RipeMD256Digest())); } if (text.Equals("RAWRSASSA-PSS")) { return(PssSigner.CreateRawSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("PSSwithRSA")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("SHA-1withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha1Digest())); } if (text.Equals("SHA-224withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha224Digest())); } if (text.Equals("SHA-256withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha256Digest())); } if (text.Equals("SHA-384withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha384Digest())); } if (text.Equals("SHA-512withRSAandMGF1")) { return(new PssSigner(new RsaBlindedEngine(), new Sha512Digest())); } if (text.Equals("NONEwithDSA")) { return(new DsaDigestSigner(new DsaSigner(), new NullDigest())); } if (text.Equals("SHA-1withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha1Digest())); } if (text.Equals("SHA-224withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha224Digest())); } if (text.Equals("SHA-256withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha256Digest())); } if (text.Equals("SHA-384withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha384Digest())); } if (text.Equals("SHA-512withDSA")) { return(new DsaDigestSigner(new DsaSigner(), new Sha512Digest())); } if (text.Equals("NONEwithECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new NullDigest())); } if (text.Equals("SHA-1withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha1Digest())); } if (text.Equals("SHA-224withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha224Digest())); } if (text.Equals("SHA-256withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha256Digest())); } if (text.Equals("SHA-384withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha384Digest())); } if (text.Equals("SHA-512withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new Sha512Digest())); } if (text.Equals("RIPEMD160withECDSA")) { return(new DsaDigestSigner(new ECDsaSigner(), new RipeMD160Digest())); } if (text.Equals("SHA1WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha1Digest())); } if (text.Equals("SHA224WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha224Digest())); } if (text.Equals("SHA256WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha256Digest())); } if (text.Equals("SHA384WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha384Digest())); } if (text.Equals("SHA512WITHECNR")) { return(new DsaDigestSigner(new ECNRSigner(), new Sha512Digest())); } if (text.Equals("GOST3410")) { return(new Gost3410DigestSigner(new Gost3410Signer(), new Gost3411Digest())); } if (text.Equals("ECGOST3410")) { return(new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest())); } if (text.Equals("SHA1WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new Sha1Digest(), true)); } if (text.Equals("MD5WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new MD5Digest(), true)); } if (text.Equals("RIPEMD160WITHRSA/ISO9796-2")) { return(new Iso9796d2Signer(new RsaBlindedEngine(), new RipeMD160Digest(), true)); } if (text.EndsWith("/X9.31")) { string text2 = text.Substring(0, text.Length - "/X9.31".Length); int num = text2.IndexOf("WITH"); if (num > 0) { int num2 = num + "WITH".Length; string algorithm2 = text2.Substring(0, num); IDigest digest = DigestUtilities.GetDigest(algorithm2); string text3 = text2.Substring(num2, text2.Length - num2); if (text3.Equals("RSA")) { IAsymmetricBlockCipher cipher = new RsaBlindedEngine(); return(new X931Signer(cipher, digest)); } } } throw new SecurityUtilityException("Signer " + algorithm + " not recognised."); }