Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <CSP_WinDef.h>
- #include <CSP_WinCrypt.h>
- #include <reader/tchar.h>
- #include <WinCryptEx.h>
- int main(void) {
- BOOL result;
- HCERTSTORE hStore = CertOpenSystemStore(0, "MY");
- // printf("hStore = %p\n", hStore);
- PCERT_CONTEXT pCertReceiver = CertFindCertificateInStore(
- hStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,
- CERT_FIND_SUBJECT_STR_A, "CRYPTO-PRO", NULL
- );
- // printf("pCertReceiver = %p\n", pCertReceiver);
- // printf("pCertReceiver.hStore = %p\n", pCertReceiver->hCertStore);
- PCERT_CONTEXT pCertSender = CertFindCertificateInStore(
- hStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,
- CERT_FIND_SUBJECT_STR_A, "test@example.com", NULL
- );
- // printf("pCertSender = %p\n", pCertSender);
- // printf("pCertSender.hStore = %p\n", pCertSender->hCertStore);
- HCRYPTPROV hSenderProv;
- DWORD senderPrivKeySpec;
- result = CryptAcquireCertificatePrivateKey(
- pCertSender, 0, NULL,
- &hSenderProv, &senderPrivKeySpec, NULL
- );
- printf("CryptAcquireCertificatePrivateKey = %d\n", result);
- printf("hSenderProv = %llu\n", hSenderProv);
- printf("senderPrivKeySpec = %d\n", senderPrivKeySpec);
- printf("\n");
- HCRYPTKEY hSenderPrivKey;
- result = CryptGetUserKey(hSenderProv, senderPrivKeySpec, &hSenderPrivKey);
- printf("CryptGetUserKey = %d\n", result);
- printf("hSenderPrivKey = %llu\n", hSenderPrivKey);
- printf("\n");
- HCRYPTKEY hReceiverPubKey;
- result = CryptImportPublicKeyInfoEx(
- hSenderProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- &(pCertReceiver->pCertInfo->SubjectPublicKeyInfo), 0, 0, NULL, &hReceiverPubKey
- );
- printf("CryptImportPublicKeyInfoEx = %d\n", result);
- printf("hReceiverPubKey = %llu\n", hReceiverPubKey);
- printf("\n");
- DWORD recPubLen = 256;
- BYTE *recPubBuffer = (BYTE*)malloc(recPubLen);
- result = CryptExportKey(
- hReceiverPubKey, 0, PUBLICKEYBLOB, 0, recPubBuffer, &recPubLen
- );
- printf("CryptExportKey = %d\n", result);
- printf("recPubLen = %u\n", recPubLen);
- printf("GetLastError = %x\n", GetLastError());
- printf("\n");
- HCRYPTKEY hAgreeKey;
- result = CryptImportKey(
- hSenderProv, recPubBuffer, recPubLen,
- hSenderPrivKey, 0, &hAgreeKey
- );
- printf("CryptImportKey = %d\n", result);
- printf("hAgreeKey = %llu\n", hAgreeKey);
- printf("GetLastError = %x\n", GetLastError());
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement