md: fix length of stripped data in RSADecrypt
This commit is contained in:
parent
584e47a9b8
commit
e1da77e253
|
@ -2694,19 +2694,35 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData,
|
|||
}
|
||||
|
||||
if (alg_info->flags & SC_ALGORITHM_RSA_RAW) {
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher: using RSA-RAW mechanism\n");
|
||||
r = sc_pkcs15_decipher(vs->p15card, pkey, opt_crypt_flags, pbuf, pInfo->cbData, pbuf2, pInfo->cbData);
|
||||
if (r < 0) {
|
||||
logprintf(pCardData, 2, "PKCS#15 decipher failed: %i\n", r);
|
||||
return SCARD_F_INTERNAL_ERROR;
|
||||
}
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher returned %d\n", r);
|
||||
|
||||
// Need to handle padding
|
||||
if (pInfo->dwVersion >= CARD_RSA_KEY_DECRYPT_INFO_VERSION_TWO) {
|
||||
if (pInfo->dwPaddingType == CARD_PADDING_PKCS1) {
|
||||
r = sc_pkcs1_strip_02_padding(pbuf2, pInfo->cbData,
|
||||
pbuf2, &pInfo->cbData);
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher: DECRYPT-INFO dwVersion=%u\n", pInfo->dwVersion);
|
||||
if (pInfo->dwPaddingType == CARD_PADDING_PKCS1) {
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher: stripping PKCS1 padding\n");
|
||||
r = sc_pkcs1_strip_02_padding(vs->ctx, pbuf2, pInfo->cbData, pbuf2, &pInfo->cbData);
|
||||
if (r < 0) {
|
||||
logprintf(pCardData, 2, "Cannot strip PKCS1 padding: %i\n", r);
|
||||
return SCARD_F_INTERNAL_ERROR;
|
||||
}
|
||||
pInfo->cbData = r;
|
||||
}
|
||||
else if (pInfo->dwPaddingType == CARD_PADDING_OAEP) {
|
||||
/* TODO: Handle OAEP padding if present - can call PFN_CSP_UNPAD_DATA */
|
||||
logprintf(pCardData, 2, "OAEP padding not implemented\n");
|
||||
return SCARD_F_INTERNAL_ERROR;
|
||||
}
|
||||
/* TODO: Handle OAEP padding if present - can call PFN_CSP_UNPAD_DATA */
|
||||
}
|
||||
}
|
||||
else if (alg_info->flags & SC_ALGORITHM_RSA_PAD_PKCS1) {
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher: no oncard RSA RAW mechanism, try to use with PAD_PKCS1\n");
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher: using RSA_PAD_PKCS1 mechanism\n");
|
||||
r = sc_pkcs15_decipher(vs->p15card, pkey, opt_crypt_flags | SC_ALGORITHM_RSA_PAD_PKCS1,
|
||||
pbuf, pInfo->cbData, pbuf2, pInfo->cbData);
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher returned %d\n", r);
|
||||
|
@ -2739,7 +2755,7 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData,
|
|||
}
|
||||
|
||||
if ( r < 0) {
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher erreur %s\n", sc_strerror(r));
|
||||
logprintf(pCardData, 2, "sc_pkcs15_decipher error(%i): %s\n", r, sc_strerror(r));
|
||||
return SCARD_E_INVALID_VALUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue