/// <summary> /// Возвращает открытый ключ сертификата. /// </summary> public static AsymmetricAlgorithm GetPublicKeyAlgorithm(this X509Certificate2 certificate) { if (certificate.IsGost_R3410_2012_512()) { var publicKey = new Gost_R3410_2012_512_AsymmetricAlgorithm(); var encodedParameters = certificate.PublicKey.EncodedParameters.RawData; var encodedKeyValue = certificate.PublicKey.EncodedKeyValue.RawData; publicKey.ImportCspBlob(encodedParameters, encodedKeyValue); return(publicKey); } if (certificate.IsGost_R3410_2012_256()) { var publicKey = new Gost_R3410_2012_256_AsymmetricAlgorithm(); var encodedParameters = certificate.PublicKey.EncodedParameters.RawData; var encodedKeyValue = certificate.PublicKey.EncodedKeyValue.RawData; publicKey.ImportCspBlob(encodedParameters, encodedKeyValue); return(publicKey); } if (certificate.IsGost_R3410_2001()) { var publicKey = new Gost_R3410_2001_AsymmetricAlgorithm(); var encodedParameters = certificate.PublicKey.EncodedParameters.RawData; var encodedKeyValue = certificate.PublicKey.EncodedKeyValue.RawData; publicKey.ImportCspBlob(encodedParameters, encodedKeyValue); return(publicKey); } return(certificate.PublicKey.Key); }
/// <summary> /// Возвращает <see langword="true"/> для сертификатов ГОСТ. /// </summary> public static bool IsGost(this X509Certificate2 certificate) { return(certificate.IsGost_R3410_2012_512() || certificate.IsGost_R3410_2012_256() || certificate.IsGost_R3410_2001() || certificate.IsGost_R3410_94()); }
/// <summary> /// Возвращает закрытый ключ сертификата. /// </summary> public static AsymmetricAlgorithm GetPrivateKeyAlgorithm(this X509Certificate2 certificate) { if (certificate.IsGost_R3410_2012_512()) { var cspParameters = GetPrivateKeyInfo(certificate); return(new Gost_R3410_2012_512_AsymmetricAlgorithm(cspParameters)); } if (certificate.IsGost_R3410_2012_256()) { var cspParameters = GetPrivateKeyInfo(certificate); return(new Gost_R3410_2012_256_AsymmetricAlgorithm(cspParameters)); } if (certificate.IsGost_R3410_2001()) { var cspParameters = GetPrivateKeyInfo(certificate); return(new Gost_R3410_2001_AsymmetricAlgorithm(cspParameters)); } return(certificate.PrivateKey); }
/// <summary> /// Возвращает <see cref="Oid"/> функции хэширования сертификата. /// </summary> /// <param name="certificate"></param> /// <returns></returns> public static Oid GetHashAlgorithm(this X509Certificate2 certificate) { if (certificate.IsGost_R3410_2012_512()) { return(Gost_R3410_2012_512_Constants.HashAlgorithm.ToOid()); } if (certificate.IsGost_R3410_2012_256()) { return(Gost_R3410_2012_256_Constants.HashAlgorithm.ToOid()); } if (certificate.IsGost_R3410_2001()) { return(Gost_R3410_2001_Constants.HashAlgorithm.ToOid()); } if (certificate.IsGost_R3410_94()) { return(Gost_R3410_94_Constants.HashAlgorithm.ToOid()); } return(null); }