Функция
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 ).
- 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 ,CryptDuplicateKey в MS CryptoAPI 2.0