- 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:
parent
addb6fd992
commit
5b1d6dd926
|
@ -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));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue