Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var hStore = Libcapi.CertOpenSystemStoreA(IntPtr.Zero, "MY");
- Console.WriteLine("hStore = {0}", hStore);
- Console.WriteLine();
- var pCertReceiver = Libcapi.CertFindCertificateInStore(
- hStore, Libcapi.X509_ASN_ENCODING | Libcapi.PKCS_7_ASN_ENCODING,
- 0, Libcapi.CERT_FIND_SUBJECT_STR_A, "CRYPTO-PRO", IntPtr.Zero);
- Console.WriteLine("certReceiver = {0}", pCertReceiver);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- var certReceiver = Marshal.PtrToStructure<Libcapi.CertContext>(pCertReceiver);
- Console.WriteLine("certReceiver.hCertStore = {0}", certReceiver.hCertStore);
- Console.WriteLine();
- var certReceiverInfo = Marshal.PtrToStructure<Libcapi.CertInfo>(certReceiver.pCertInfo);
- Console.WriteLine("receiver's alg id = {0}", certReceiverInfo.SignatureAlgorithm.pszObjId);
- Console.WriteLine("receiver's pubk alg id = {0}", certReceiverInfo.SubjectPublicKeyInfo.Algorithm.pszObjId);
- Console.WriteLine();
- var pCertSender = Libcapi.CertFindCertificateInStore(
- hStore, Libcapi.X509_ASN_ENCODING | Libcapi.PKCS_7_ASN_ENCODING,
- 0, Libcapi.CERT_FIND_SUBJECT_STR_A, "test@example.com", IntPtr.Zero);
- Console.WriteLine("certSender = {0}", pCertSender);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- var certSender = Marshal.PtrToStructure<Libcapi.CertContext>(pCertSender);
- Console.WriteLine("certSender.hCertStore = {0}", certSender.hCertStore);
- Console.WriteLine();
- var certSenderInfo = Marshal.PtrToStructure<Libcapi.CertInfo>(certSender.pCertInfo);
- Console.WriteLine("sender's alg id = {0}", certSenderInfo.SignatureAlgorithm.pszObjId);
- Console.WriteLine("sender's pubk alg id = {0}", certSenderInfo.SubjectPublicKeyInfo.Algorithm.pszObjId);
- Console.WriteLine();
- Console.WriteLine("CryptAcquireCertificatePrivateKey = {0}",
- Libcapi.CryptAcquireCertificatePrivateKey(
- pCertSender, 0, IntPtr.Zero,
- out var hSenderProv, out var senderKeySpec, out var callerFreeProv
- )
- );
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine($"hSenderProv = {hSenderProv}, keySpec = {senderKeySpec}, callerFreeProv = {callerFreeProv}");
- Console.WriteLine();
- Console.WriteLine("CryptGetUserKey = {0}",
- Libcapi.CryptGetUserKey(hSenderProv, senderKeySpec, out var hSenderPrivKey)
- );
- Console.WriteLine("hSenderPrivKey = {0}", hSenderPrivKey);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- Console.WriteLine("CryptImportPublicKeyInfoEx = {0}",
- Libcapi.CryptImportPublicKeyInfoEx(
- hSenderProv, Libcapi.X509_ASN_ENCODING | Libcapi.PKCS_7_ASN_ENCODING,
- ref certReceiverInfo.SubjectPublicKeyInfo, 0, 0, IntPtr.Zero,
- out var hReceiverPubKey
- )
- );
- Console.WriteLine("hReceiverPubKey = {0}", hReceiverPubKey);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- uint recPubKeyBlobLen = 256;
- var recPubKeyBlob = Marshal.AllocHGlobal((int)recPubKeyBlobLen);
- Console.WriteLine("CryptExportKey = {0}",
- Libcapi.CryptExportKey(
- hReceiverPubKey, IntPtr.Zero, Libcapi.PUBLICKEYBLOB, 0,
- recPubKeyBlob, ref recPubKeyBlobLen
- )
- );
- Console.WriteLine("recPubKeyBlobLen = {0}", recPubKeyBlobLen);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- Console.WriteLine("CryptImportKey = {0}",
- Libcapi.CryptImportKey(
- hSenderProv, recPubKeyBlob, recPubKeyBlobLen,
- hSenderPrivKey, 0, out var hAgreeKey
- )
- );
- Console.WriteLine("hAgreeKey = {0}", hAgreeKey);
- Console.WriteLine("GetLastError: {0} (0x{0:x})", Librdrsup.GetLastError());
- Console.WriteLine();
- Console.WriteLine("CertCloseStore: {0}", Libcapi.CertCloseStore(hStore, 0));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement