Каков механизм секретного ключа для расшифровки в PKCS11?
Вот часть моего кода
Я уже зашифровал текст из другого приложения VB.net через RSACryptoProvider
Но я застрял на шаге, чтобы расшифровать в C.
Вот мой код
static CK_RV usePrivateKeytoDecrypt(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject) {
CK_RV rv = CKR_OK;
CK_MECHANISM mechanism = {
{CKM_RSA_PKCS_OAEP}
};
rv = C_DecryptInit(hSession, &mechanism, hObject);
return rv;
}
Код не завершен. Я пытаюсь отладить и получил ошибку CKR_MECHANISM_PARAM_INVALID
Пожалуйста помоги. Спасибо
2 ответа
Это зависит от алгоритма пары ключей.
Если алгоритм пары ключей является RSA, это может быть CKM_RSA_PKCS / CKM_RSA_PKCS_OAEP / CKM_RSA_X_509.
Если алгоритм пары ключей - EC, это может быть CKM_ECDSA.
При условии, что закрытый ключ имеет атрибут CKA_DECRYPT, установленный в значение true.
Вы можете обратиться к этой документации здесь.
Необходимо установить параметры механизма:
CK_RSA_PKCS_OAEP_PARAMS oaepParams = {CKM_SHA_1, CKG_MGF1_SHA1, 1, NULL_PTR, 0};
CK_MECHANISM MechEncrypt = {CKM_RSA_PKCS_OAEP, &oaepParams, sizeof(oaepParams)};
Вы неправильно инициализируете структуру своего механизма. CK_MECHANISM - это структура, которая требует определения 3 параметров:
typedef struct CK_MECHANISM {
CK_MECHANISM_TYPE mechanism;
CK_VOID_PTR pParameter;
CK_ULONG ulParameterLen; /* in bytes */
} CK_MECHANISM;
Вам нужно инициализировать ваш механизм следующим образом:
CK_MECHANISM mechanism = { CKM_RSA_PKCS_OAEP, NULL_PTR, 0 };
Если вы сгенерировали свою пару открытых и открытых ключей в качестве пары ключей RSA (используя механизм CKM_RSA_PKCS_KEY_PAIR_GEN), например,
CK_MECHANISM GenMechanism = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 };
Затем вам нужно инициализировать ваш механизм для расшифровки следующим образом:
CK_MECHANISM mechanism = { CKM_RSA_PKCS, NULL_PTR, 0};
Я предполагаю, что вы уже вошли в систему со своим hsession, и hObject - это локализованный закрытый ключ, который будет использоваться для расшифровки?