C_GenerateKeyPair()
Синтаксис
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKeyPair)( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount, CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount, CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey );
Параметры
hSession | [in] | Дескриптор сессии |
| pMechanism | [in] | Указатель на структуру с информацией о механизме генерации ключа |
| pPublicKeyTemplate | [in] | Указатель на шаблон открытого ключа |
ulPublicKeyAttributeCount | [in] | Количество атрибутов в шаблоне генерируемого открытого ключа |
| pPrivateKeyTemplate | [in] | Указатель на шаблон закрытого ключа |
ulPrivateKeyAttributeCount | [in] | Количество атрибутов в шаблоне генерируемого закрытого ключа |
phPublicKey | [out] | Указатель на дескриптор генерируемого открытого ключа. |
phPrivateKey | [out] | Указатель на дескриптор генерируемого закрытого ключа |
Назначение
Функция генерирует пару «открытый/закрытый» ключ.
Примечание
Поскольку тип генерируемых ключей зависит от механизма генерации ключевой пары, в шаблонах необязательно указывать тип ключа. Если в шаблоне все-таки задан тип ключа, и он противоречит используемому механизму генерации, C_GenerateKeyPair завершается с ошибкой и возвращает код CKR_TEMPLATE_INCONSISTENT. Атрибут CKA_CLASS обрабатывается аналогично.
Вызов C_GenerateKeyPair никогда не создает только один ключ. Вызов может завершиться ошибкой без создания ключей, либо успешно завершиться, создав пару из открытого и закрытого ключа.
Ключевые объекты, созданные успешным вызовом C_GenerateKeyPair, получают атрибут CKA_LOCAL, установленный в значение CK_TRUE.
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_ATTRIBUTE_READ_ONLY,
CKR_ATTRIBUTE_TYPE_INVALID,
CKR_ATTRIBUTE_VALUE_INVALID,
CKR_CRYPTOKI_NOT_INITIALIZED,
CKR_DEVICE_ERROR,
CKR_DEVICE_MEMORY,
CKR_DEVICE_REMOVED,
CKR_DOMAIN_PARAMS_INVALID,
CKR_FUNCTION_CANCELED,
CKR_FUNCTION_FAILED,
CKR_GENERAL_ERROR,
CKR_HOST_MEMORY,
CKR_MECHANISM_INVALID,
CKR_MECHANISM_PARAM_INVALID,
CKR_OPERATION_ACTIVE,
CKR_PIN_EXPIRED,
CKR_SESSION_CLOSED,
CKR_SESSION_HANDLE_INVALID,
CKR_SESSION_READ_ONLY,
CKR_TEMPLATE_INCOMPLETE,
CKR_TEMPLATE_INCONSISTENT,
CKR_USER_NOT_LOGGED_IN.
Пример
C_DeriveKey()
Синтаксис
CK_DEFINE_FUNCTION(CK_RV, C_DeriveKey)( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey );
Параметры
hSession | [in] | Дескриптор сессии |
| pMechanism | [in] | Указатель на структуру с информацией о механизме выработки ключа |
| hBaseKey | [in] | Дескриптор существующего ключа, из которого вырабатывается новый |
pTemplate | [in] | Указатель на шаблон с атрибутами вырабатываемого ключа |
ulAttributeCount | [in] | Количество атрибутов в шаблоне вырабатываемого ключа |
phKey | [out] | Указатель на дескриптор выработанного ключа |
Назначение
Функция вырабатывает новый ключ из существующего.
Примечание
Значения атрибутов CKA_SENSITIVE, CKA_ALWAYS_SENSITIVE, CKA_EXTRACTABLE и CKA_NEVER_EXTRACTABLE существующего ключа влияют на то, какие значения могут принимать эти же атрибуты у вырабатываемого ключа.
Если вызов C_DeriveKey не может полноценно поддержать переданный ему шаблон, он завершается с ошибкой и возвращается без создания какого‑либо ключа.
Ключевой объект, созданный успешным вызовом C_DeriveKey, получает атрибут CKA_LOCAL, установленный в значение CK_FALSE.
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_ATTRIBUTE_READ_ONLY,
CKR_ATTRIBUTE_TYPE_INVALID,
CKR_ATTRIBUTE_VALUE_INVALID,
CKR_CRYPTOKI_NOT_INITIALIZED,
CKR_DEVICE_ERROR,
CKR_DEVICE_MEMORY,
CKR_DEVICE_REMOVED,
CKR_DOMAIN_PARAMS_INVALID,
CKR_FUNCTION_CANCELED,
CKR_FUNCTION_FAILED,
CKR_GENERAL_ERROR,
CKR_HOST_MEMORY,
CKR_KEY_HANDLE_INVALID,
CKR_KEY_SIZE_RANGE,
CKR_KEY_TYPE_INCONSISTENT,
CKR_MECHANISM_INVALID,
CKR_MECHANISM_PARAM_INVALID,
CKR_OPERATION_ACTIVE,
CKR_PIN_EXPIRED,
CKR_SESSION_CLOSED,
CKR_SESSION_HANDLE_INVALID,
CKR_SESSION_READ_ONLY,
CKR_TEMPLATE_INCOMPLETE,
CKR_TEMPLATE_INCONSISTENT,
CKR_USER_NOT_LOGGED_IN.