/// <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); }
/// <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; }