Криптография - статьи

       

Функции конвертирования ключей


Архитектура круговорота открытых ключей для "нестандартных" алгоритмов в Windows представлена на .

Функция A_ConvertPublicKeyInfo - на входе принимает ключ в формате ASN.1 DER и должна преобразовать его в формат, который "понимает" функция CSP CPImportKey

Функция A_EncodePublicKeyInfoAndParameters на входе принимает ключ в том формате,

в котором ключ экспортирует CPExportKey. На выходе A_EncodePublicKeyInfoAndParameters должна сформировать ASN.1 DER структуру с ключом - ту же самую, которая в случае импорта передается в A_ConvertPublicKeyInfo - на вход. Надеюсь, вы не запутались во всех этих входах и выходах.

Вот сигнатуры и краткие описания параметров этих функций:

BOOL WINAPI A_ConvertPublicKeyInfo( DWORD dwCertEncodingType, // IN - VOID *EncodedKeyInfo, // IN - буфер с ключом - указатель // на структуру CERT_PUBLIC_KEY_INFO

DWORD dwAlg, // IN - AlgId ключа

DWORD dwFlags, // IN - обычно 0

BYTE **ppStructInfo, // OUT - двойной указатель на структуру // в заголовке структуры идет сначала PUBLICKEYSTRUC, затем DSSPUBKEY, // а затем сам ключ с параметрами DWORD *StructLen // OUT - длина структуры

);

BOOL WINAPI A_EncodePublicKeyAndParameters( DWORD dwCertEncodingType, // IN

LPCSTR lpszStructType, // IN - OID алгоритма

const void* pvStructInfo, // IN - такая же структура как // на выходе ConvertPublicKeyInfo

DWORD nStructLen, // IN - длина входной структуры

DWORD dwFlags, // IN - обычно 0

DWORD Unk, // ? - неизвестно

BYTE **pbPubKey, // OUT - открытый ключ в ASN.1 DER

DWORD* pcPubKeyLen, // OUT - длина открытого ключа BYTE **pbParams, // OUT - параметры открытого ключа

DWORD* pcParamsLen // OUT - длина параметров

);

Форматы ключей зависят от криптопровайдера и используемых алгоритмов.



Содержание раздела