КриптоПро CSP  

CPCDuplicateKey

Функция CPCDuplicateKey() создает точную копию заданного ключа, включая все его переменные, определяющие внутреннее состояние ключа (вектор IV, режим шифрования, режим преобразования, режим дополнения, набор узлов замены и прочее).

DWORD CPCAPI CPCDuplicateKey(
  HCRYPTMODULE hCSP,
  HCRYPTPROV hProv,
  HCRYPTKEY hKey,
  DWORD * pdwReserved,
  DWORD dwFlags,
  HCRYPTKEY * phKey
);

Аргументы

hCSP
[in] Указатель на таблицу функций криптопровайдера. Получается при помощи функции CPCCreateProvider()
hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPCAcquireContext().
hKey
[in] Дескриптор исходного (копируемого) ключа. Возможно дублирование только ключей класса ALG_CLASS_DATA_ENCRYPT (см. CryptGetProvParam в MS CryptoAPI 2.0 World Wide Web link ).
pdwReserved
[in] Параметр зарезервирован для будущего использования и должен быть NULL.
dwFlags
[in] Параметр зарезервирован для будущего использования и должен быть нулевым.
phKey
[out] Адрес, по которому функция возвращает дескриптор скопированного ключа.

Возвращаемые значения

При успешном завершении функция возвращает 0 (S_OK), в противном случае возвращается соответствующий код ошибки (см. таблицу).
Коды возвратаОписание
ERROR_INVALID_PARAMETERОдин из параметров содержит некорректное значение. Чаще всего это некорректный указатель.
NTE_BAD_KEYДескриптор исходного ключа ошибочен.
NTE_BAD_FLAGSПараметр dwFlags имеет ненулевое значение.

Примечания

Полученный дескриптор ключа должен в обязательном порядке быть удалён с помощью вызова функции CPCDestroyKey()  до вызова функции CPCReleaseContext() для рабочего дескриптора криптопровайдера.

Требования:

Ядро FreeBSD: 7/8/9 или выше
Ядро Linux: ядро 2.4.x/2.6.x/3.0.х/3.2.х или выше
Ядро Solaris: 10/11 или выше.
Ядро Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше.

См. также

CPCDestroyKey() ,CPDuplicateKey в MS CSP World Wide Web link ,CryptDuplicateKey в MS CryptoAPI 2.0 World Wide Web link