Exemplo n.º 1
0
        /// <summary>
        /// Create an authority key info X509 extension
        /// </summary>
        /// <param name="serialNumber">Serial number of the info</param>
        /// <param name="issuer">Issuer subject name</param>
        /// <param name="key">RSA key</param>
        /// <returns>The constructed X509 extension</returns>
        private X509Extension CreateAuthorityKeyInfo(byte[] serialNumber, X500DistinguishedName issuer, RSACryptoServiceProvider key)
        {
            CryptoApiMethods.CERT_AUTHORITY_KEY_ID_INFO keyInfo = new CryptoApiMethods.CERT_AUTHORITY_KEY_ID_INFO();
            X509Extension ret = null;

            try
            {
                keyInfo.CertSerialNumber = new CryptoApiMethods.CRYPTOAPI_BLOB(serialNumber);
                keyInfo.CertIssuer       = new CryptoApiMethods.CRYPTOAPI_BLOB(issuer.RawData);
                keyInfo.KeyId            = new CryptoApiMethods.CRYPTOAPI_BLOB(HashPublicKeyInfo(key));

                ret = EncodeExtension(CryptoApiMethods.szOID_AUTHORITY_KEY_IDENTIFIER, keyInfo, false);
            }
            finally
            {
                if (keyInfo.CertSerialNumber != null)
                {
                    keyInfo.CertSerialNumber.Release();
                }

                if (keyInfo.CertIssuer != null)
                {
                    keyInfo.CertIssuer.Release();
                }

                if (keyInfo.KeyId != null)
                {
                    keyInfo.KeyId.Release();
                }
            }

            return(ret);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Create an authority key info X509 extension
        /// </summary>
        /// <param name="serialNumber">Serial number of the info</param>
        /// <param name="issuer">Issuer subject name</param>
        /// <param name="key">RSA key</param>
        /// <returns>The constructed X509 extension</returns>
        private X509Extension CreateAuthorityKeyInfo(byte[] serialNumber, X500DistinguishedName issuer, RSACryptoServiceProvider key)
        {
            CryptoApiMethods.CERT_AUTHORITY_KEY_ID_INFO keyInfo = new CryptoApiMethods.CERT_AUTHORITY_KEY_ID_INFO();
            X509Extension ret = null;

            try
            {
                keyInfo.CertSerialNumber = new CryptoApiMethods.CRYPTOAPI_BLOB(serialNumber);
                keyInfo.CertIssuer = new CryptoApiMethods.CRYPTOAPI_BLOB(issuer.RawData);
                keyInfo.KeyId = new CryptoApiMethods.CRYPTOAPI_BLOB(HashPublicKeyInfo(key));

                ret = EncodeExtension(CryptoApiMethods.szOID_AUTHORITY_KEY_IDENTIFIER, keyInfo, false);
            }
            finally
            {
                if (keyInfo.CertSerialNumber != null)
                {
                    keyInfo.CertSerialNumber.Release();
                }

                if (keyInfo.CertIssuer != null)
                {
                    keyInfo.CertIssuer.Release();
                }

                if (keyInfo.KeyId != null)
                {
                    keyInfo.KeyId.Release();
                }
            }

            return ret;
        }