TLS клиент с использованием CryptoAPI

Тема в разделе "WASM.CRYPTO", создана пользователем al79, 25 авг 2017.

  1. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    126
    Адрес:
    Екатеринбург
    Всем привет!
    Пытаюсь написать TLS клиента с использованием CryptoAPI и есть подозрения, что я не правильно экспортирую pre-master key, делаю примерно так:
    lea ecx,hProv
    invoke CryptAcquireContext,ecx,0,0,PROV_RSA_SCHANNEL,CRYPT_VERIFYCONTEXT
    lea eax,hMasterKey
    invoke CryptGenKey,hProv,CALG_TLS1_MASTER,CRYPT_EXPORTABLE,eax
    Из полученного сертификата от сервера получаю его контекст, в edi указатель на сертификат в ecx его длина.
    invoke CertCreateCertificateContext,X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,edi,ecx
    mov hCert,eax
    mov eax,[eax.CERT_CONTEXT].pCertInfo
    lea eax,[eax.CERT_INFO].SubjectPublicKeyInfo
    Импортирую публичный ключ из сертификата
    lea ecx,hPubKey
    invoke CryptImportPublicKeyInfo,hProv,X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,eax,ecx
    Ну и делаю экспорт pre-master key шифруя его публичным ключом
    mov edx,esp
    push 140
    invoke CryptExportKey,hMasterKey,hPubKey,SIMPLEBLOB,0,edx,esp
    pop eax
    lea esi,[esp+12] ; в esi указатель на зашифрованный pre-master key

    Ну собственно вопрос правильно ли я делаю экспорт или нужно просто выгружать pre-master key и шифровать его с помощью CrytpEncrypt или еще какие то действия нужно сделать с публичным ключом или сертификатом?