- Support raw RSA on decryption (Martin Buechler)

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@1641 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
okir 2003-11-26 13:12:26 +00:00
parent addb6fd992
commit 5b1d6dd926
1 changed files with 16 additions and 7 deletions

View File

@ -35,9 +35,9 @@ struct pkcs15_slot_data {
unsigned int len; unsigned int len;
} pin[2]; } pin[2];
}; };
#define slot_data(p) ((struct pkcs15_slot_data *) p) #define slot_data(p) ((struct pkcs15_slot_data *) (p))
#define slot_data_auth(p) (slot_data(p)->auth_obj) #define slot_data_auth(p) (slot_data(p)->auth_obj)
#define slot_data_pin_info(p) (slot_data_auth(p)? \ #define slot_data_pin_info(p) (((p) && slot_data_auth(p))? \
(struct sc_pkcs15_pin_info *) slot_data_auth(p)->data : NULL) (struct sc_pkcs15_pin_info *) slot_data_auth(p)->data : NULL)
#define check_attribute_buffer(attr,size) \ #define check_attribute_buffer(attr,size) \
@ -1809,7 +1809,7 @@ pkcs15_prkey_decrypt(struct sc_pkcs11_session *ses, void *obj,
struct pkcs15_prkey_object *prkey; struct pkcs15_prkey_object *prkey;
struct pkcs15_slot_data *data = slot_data(ses->slot->fw_data); struct pkcs15_slot_data *data = slot_data(ses->slot->fw_data);
u8 decrypted[256]; u8 decrypted[256];
int buff_too_small, rv; int buff_too_small, rv, flags = 0;
sc_debug(context, "Initiating unwrap/decryption.\n"); sc_debug(context, "Initiating unwrap/decryption.\n");
@ -1823,11 +1823,20 @@ pkcs15_prkey_decrypt(struct sc_pkcs11_session *ses, void *obj,
if (prkey == NULL) if (prkey == NULL)
return CKR_KEY_FUNCTION_NOT_PERMITTED; return CKR_KEY_FUNCTION_NOT_PERMITTED;
if (pMechanism->mechanism != CKM_RSA_PKCS) /* Select the proper padding mechanism */
switch (pMechanism->mechanism) {
case CKM_RSA_PKCS:
flags |= SC_ALGORITHM_RSA_PAD_PKCS1;
break;
case CKM_RSA_X_509:
flags |= SC_ALGORITHM_RSA_RAW;
break;
default:
return CKR_MECHANISM_INVALID; return CKR_MECHANISM_INVALID;
}
rv = sc_pkcs15_decipher(fw_data->p15_card, prkey->prv_p15obj, rv = sc_pkcs15_decipher(fw_data->p15_card, prkey->prv_p15obj,
SC_ALGORITHM_RSA_PAD_PKCS1, flags,
pEncryptedData, ulEncryptedDataLen, pEncryptedData, ulEncryptedDataLen,
decrypted, sizeof(decrypted)); decrypted, sizeof(decrypted));
@ -1842,7 +1851,7 @@ pkcs15_prkey_decrypt(struct sc_pkcs11_session *ses, void *obj,
rv = revalidate_pin(data, ses); rv = revalidate_pin(data, ses);
if (rv == 0) if (rv == 0)
rv = sc_pkcs15_decipher(fw_data->p15_card, prkey->prv_p15obj, rv = sc_pkcs15_decipher(fw_data->p15_card, prkey->prv_p15obj,
SC_ALGORITHM_RSA_PAD_PKCS1, flags,
pEncryptedData, ulEncryptedDataLen, pEncryptedData, ulEncryptedDataLen,
decrypted, sizeof(decrypted)); decrypted, sizeof(decrypted));