Каков механизм секретного ключа для расшифровки в 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 - это локализованный закрытый ключ, который будет использоваться для расшифровки?

Другие вопросы по тегам