C_GenerateKey
¶C_GenerateKey
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey)¶Параметры: |
|
---|
Генерирует секретный ключ.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_GEN
(0x00001220
) – механизм генерации ключей, соответствующий стандарту ГОСТ 28147-89.CKM_DES2_KEY_GEN
(0x00000130
) – механизм генерации ключей DES двойной длины.CKM_DES3_KEY_GEN
(0x00000131
) – механизм генерации ключей для алгоритма triple-DES.CKM_TLS_PRE_MASTER_KEY_GEN
(0x00000374
) – механизм генерации 48-байтных секретных ключей, используемых
при создании pre_master
ключей для протокола TLS 1.0.CKM_AES_KEY_GEN
(0x00001080
) – механизм генерации ключей для алгоритма
AES.Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
// дескриптор сессии
CK_SESSION_HANDLE pkcs11SessionHandle;
// механизм генерации ключей
CK_MECHANISM pkcs11GenKeyMechanism = {CKM_GOST28147_KEY_GEN, NULL, 0};
// шаблон ключа
CK_ATTRIBUTE pkcs11SessionKeyTemplate[] =
{
{CKA_GOST28147_PARAMS, STR_CRYPTO_PRO_GOST28147_A, sizeof(STR_CRYPTO_PRO_GOST28147_A)}
};
// дескриптор сессионного ключа PKCS#11
CK_OBJECT_HANDLE pkcs11SessionKeyHandle;
// функция генерирует ключ, используя заданный шаблон
rv = C_GenerateKey(pkcs11SessionHandle,
&pkcs11GenKeyMechanism,
pkcs11SessionKeyTemplate,
sizeof(pkcs11SessionKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11SessionKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_GenerateKey failed.");
}
Возможные значения атрибута CKA_GOST28147_PARAMS
смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.
C_GenerateKeyPair
¶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)¶Параметры: |
|
---|
Генерирует ключевую пару.
Поддерживаются следующие механизмы:
CKM_GOSTR3410_KEY_PAIR_GEN
(0x00001200
) – механизм генерации ключевой пары, соответствующий стандарту
ГОСТ 34.10-2001.CKM_RSA_PKCS_KEY_PAIR_GEN
(0x00000000
) – механизм генерации ключевой пары для алгоритма RSA.CKM_ECDSA_KEY_PAIR_GEN
(0x00001040
) – механизм генерации ключевой пары для алгоритма
ECDSA.CKM_EC_KEY_PAIR_GEN
(0x00001040
) – механизм генерации ключевой пары для алгоритма
EC.Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
// открытый ключ должен храниться в памяти устройства
CK_BBOOL pkcs11KeyGenToken = TRUE;
// дескриптор сессии
CK_SESSION_HANDLE pkcs11SessionHandle;
// механизм генерации ключевой пары
CK_MECHANISM pkcs11GenKeyPairMechanism = {CKM_GOSTR3410_KEY_PAIR_GEN, NULL, 0};
// шаблон закрытого ключа
CK_ATTRIBUTE pkcs11PrivKeyTemplate[] =
{
{CKA_TOKEN, &pkcs11KeyGenToken, sizeof(pkcs11KeyGenToken)},
{CKA_GOSTR3410_PARAMS, STR_CRYPTO_PRO_A, sizeof(STR_CRYPTO_PRO_A)}
};
// шаблон открытого ключа
CK_ATTRIBUTE pkcs11PubKeyTemplate[] =
{
{CKA_TOKEN, &pkcs11KeyGenToken, sizeof(pkcs11KeyGenToken)},
{CKA_GOSTR3410_PARAMS, STR_CRYPTO_PRO_A, sizeof(STR_CRYPTO_PRO_A)}
};
// дескрипторы открытого и закрытого ключа ключевой пары PKCS#11
CK_OBJECT_HANDLE pkcs11PubKeyHandle, pkcs11PrivKeyHandle;
// функция генерирует ключевую пару
rv = C_GenerateKeyPair(pkcs11SessionHandle,
&pkcs11GenKeyPairMechanism,
pkcs11PubKeyTemplate, sizeof(pkcs11PubKeyTemplate)/sizeof(CK_ATTRIBUTE),
pkcs11PrivKeyTemplate, sizeof(pkcs11PrivKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11PubKeyHandle,
&pkcs11PrivKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_GenerateKeyPair failed.");
}
Значения атрибута CKA_GOSTR3410_PARAMS
смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.
C_WrapKey
¶C_WrapKey
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen)¶Параметры: |
|
---|
Производит экспорт сессионного ключа, на ключе согласования.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_WRAP
(0x00001224
) – механизм для импорта и экспорта ключей, соответствующий стандарту
ГОСТ 28147-89.CKM_RSA_PKCS
(0x00000001
) – механизм для импорта и экспорта ключей с использованием ключевой пары и
алгоритма RSA.CKM_DES3_ECB
(0x00000132
) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма triple-DES.CKM_DES3_CBC
(0x00000133
) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма triple-DES.CKM_AES_ECB
(0x00001081
) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма AES.CKM_AES_CBC
(0x00001082
) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма AES.Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_UnwrapKey
¶C_UnwrapKey
(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hUnwrappingKey, CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey)¶Параметры: |
|
---|
Производит импорт сессионного ключа, на ключе согласования.
Поддерживаются следующие механизмы:
CKM_GOST28147_KEY_WRAP
(0x00001224
) – механизм для импорта и экспорта ключей, соответствующий стандарту
ГОСТ 28147-89.CKM_RSA_PKCS
(0x00000001
) – механизм для импорта и экспорта ключей с использованием ключевой пары и
алгоритма RSA.CKM_DES3_ECB
(0x00000132
) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма triple-DES.CKM_DES3_CBC
(0x00000133
) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма triple-DES.CKM_AES_ECB
(0x00001081
) – механизм для импорта и экспорта ключей в режиме ECB с использованием
алгоритма AES.CKM_AES_CBC
(0x00001082
) – механизм для импорта и экспорта ключей в режиме CBC с использованием
алгоритма AES.Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
C_DeriveKey
¶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)¶Параметры: |
|
---|
Вырабатывает ключ согласования.
Поддерживаются следующие механизмы:
CKM_GOSTR3410_DERIVE
(0x00001204
) – механизм для выработки ключа согласования, соответствующий
стандарту ГОСТ Р 34.10-2001.CKM_TLS_GOST_MASTER_KEY_DERIVE
(NSSCK_VENDOR_PKSC11_RU_TEAM |0x101
) – механизм для выработки
48-байтного ключа из 32-байтного ключа, используемый при создании master_secret
ключей для протокола TLS 1.0.CKM_TLS_GOST_KEY_AND_MAC_DERIVE
(NSSCK_VENDOR_PKSC11_RU_TEAM |0x102
) – механизм для выработки ключа
согласования из master_secret
и случайных данных.CKM_TLS_GOST_PRF
(NSSCK_VENDOR_PKSC11_RU_TEAM |0x103
) – механизм для генерации псевдослучайных данных
произвольной длины защищенным образом, соответствующий стандарту ГОСТ.CKM_TLS_MASTER_KEY_DERIVE
(0x00000375
) – механизм для выработки 48-байтного ключа из другого
48-байтного ключа, используемый при создании master_secret
ключей для протокола TLS 1.0.CKM_TLS_KEY_AND_MAC_DERIVE
(0x00000376
) – механизм для выработки ключа согласования из
master_secret
и случайных данных.CKM_TLS_MASTER_KEY_DERIVE_DH
(0x00000377
) – механизм для выработки 48-байтного ключа из другого ключа
произвольного размера, используемый при создании master_secret
ключей для протокола TLS 1.0.CKM_TLS_PRF
(0x00000378
) – механизм для генерации псевдослучайных данных произвольной длины.CKM_ECDH1_DERIVE
(0x00001050
) – механизм для генерации ключа согласования, основывающийся на
эллиптических кривых и алгоритме Диффи-Хеллмана.Запускается в режимах
Результат: |
Совет Полный список ошибок см. в приложении. |
---|
Предупреждение
Данный раздел актуален только при работе с апплетом Криптотокен.
// механизм выработки ключа согласования
CK_MECHANISM pkcs11DeriveKeyMechanism;
// дескрипторы открытого и закрытого ключа ключавой пары PKCS#11
CK_OBJECT_HANDLE pkcs11PubKeyHandle, pkcs11PrivKeyHandle;
// шаблон ключа согласования
CK_ATTRIBUTE pkcs11DerivedKeyTemplate[] =
{
{CKA_GOST28147_PARAMS, STR_CRYPTO_PRO_GOST28147_A, sizeof(STR_CRYPTO_PRO_GOST28147_A)}
};
// дескриптор ключа согласования PKCS#11
CK_OBJECT_HANDLE pkcs11DerivedKeyHandle;
// параметры для выработки ключа согласования
CK_GOSTR3410_DERIVE_PARAMS pkcs11DeriveParams;
// устанавливаем параметры для создания ключа согласования
pkcs11DeriveParams.kdf = NULL;
pkcs11DeriveParams.pPublicData = cpPubKeyValue;
pkcs11DeriveParams.ulPublicDataLen = 64;
pkcs11DeriveParams.pUKM = ukm;
pkcs11DeriveParams.ulUKMLen = 8;
// устанавливаем механизм создания ключа согласования
pkcs11DeriveKeyMechanism.mechanism = CKM_GOSTR3410_DERIVE;
pkcs11DeriveKeyMechanism.pParameter = &pkcs11DeriveParams;
pkcs11DeriveKeyMechanism.ulParameterLen = sizeof(pkcs11DeriveParams);
// создаем ключ согласования
rv = C_DeriveKey(pkcs11SessionHandle,
&pkcs11DeriveKeyMechanism,
pkcs11PrivKeyHandle,
pkcs11DerivedKeyTemplate,
sizeof(pkcs11DerivedKeyTemplate)/sizeof(CK_ATTRIBUTE),
&pkcs11DerivedKeyHandle);
if(rv != CKR_OK)
{
throw runtime_error("C_DeriveKey failed.");
}
Возможные значения атрибута CKA_GOST28147_PARAMS
смотри в приложении.
Более полную информацию о работе с объектами смотри в приложении.