2017-01-19 24 views
0

Вот какая-то часть моего кодаЧто такое механизм закрытого ключа для расшифровки в 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

Пожалуйста, помогите. Спасибо

+0

Сообщение об ошибке указано именно так, как следует из его имени: параметр (т. Е. HObject) недействителен. Итак, мы понятия не имеем, потому что вы не предоставили никакой информации об этом. –

+0

Беглый просмотр показывает, что вы не задали значения 'pParameter' и' ulParameterLen' механизма для представления [CK_RSA_PKCS_OAEP_PARAMS] (https://www.cryptsoft.com/pkcs11doc/v220/structCK__RSA__PKCS__OAEP__PARAMS.html). OAEP имеет опции, которые кодируются в этой структуре. – bartonjs

ответ

0

Это зависит от алгоритма Key Pair.

Если алгоритм криптографической пары является RSA, это может быть CKM_RSA_PKCS/CKM_RSA_PKCS_OAEP/CKM_RSA_X_509.

Если алгоритм криптографической пары является EC, это может быть CKM_ECDSA.

При условии, что у частного ключа есть атрибут CKA_DECRYPT установлен в true.

Здесь вы можете обратиться к этому documentation.

0

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