Example #1
0
        /// <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);
        }
Example #2
0
 /// <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());
 }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }