Функция
CPCDuplicateKey() создает точную копию заданного ключа, включая все его переменные, определяющие внутреннее состояние ключа (вектор IV, режим шифрования, режим преобразования, режим дополнения, набор узлов замены и прочее). Используйте установку KP_ALGID перед вызовом функции, чтобы избежать повторного создания производных ключей.
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() для рабочего дескриптора криптопровайдера.
Требования:
Ядро AIX: 6/7.
Ядро FreeBSD: 11/12.
Ядро Linux: 2.6.x и выше.
Ядро Solaris: 10/11.
Ядро Windows: 7/8/8.1/10, Server 2008/2008R2/2012/2012R2/2016/2019.
См. также
CPCDestroyKey() ,CPDuplicateKey в MS CSP ,CryptDuplicateKey в MS CryptoAPI 2.0