OpenPGP: allow reading large DOs in v3 cards
Set the read buffer size in pgp_read_blob() large enough to contain DOs with the maximum size defineable in the extended capabilities DO 00C0.
This commit is contained in:
parent
ee9abfcc71
commit
b95d936e6c
|
@ -222,6 +222,12 @@ static int pgp_get_pubkey_pem(sc_card_t *, unsigned int,
|
||||||
/* Gnuk only supports 1 key length (2048 bit) */
|
/* Gnuk only supports 1 key length (2048 bit) */
|
||||||
#define MAXLEN_RESP_PUBKEY_GNUK 271
|
#define MAXLEN_RESP_PUBKEY_GNUK 271
|
||||||
|
|
||||||
|
/* Maximal size of a DO:
|
||||||
|
* v2.0+: max. certificate size it at bytes 5-6 of Extended Capabilities DO 00C0
|
||||||
|
* v3.0+: max. special DO size is at bytes 7-8 of Extended Capabilities DO 00C0
|
||||||
|
* Theoretically we should have the 64k, but we currently limit to 8k. */
|
||||||
|
#define MAX_OPENPGP_DO_SIZE 8192
|
||||||
|
|
||||||
static struct do_info pgp1x_objects[] = { /* OpenPGP card spec 1.1 */
|
static struct do_info pgp1x_objects[] = { /* OpenPGP card spec 1.1 */
|
||||||
{ 0x004f, SIMPLE, READ_ALWAYS | WRITE_NEVER, NULL, NULL },
|
{ 0x004f, SIMPLE, READ_ALWAYS | WRITE_NEVER, NULL, NULL },
|
||||||
{ 0x005b, SIMPLE, READ_ALWAYS | WRITE_PIN3, NULL, sc_put_data },
|
{ 0x005b, SIMPLE, READ_ALWAYS | WRITE_PIN3, NULL, sc_put_data },
|
||||||
|
@ -1089,7 +1095,7 @@ pgp_read_blob(sc_card_t *card, pgp_blob_t *blob)
|
||||||
return blob->status;
|
return blob->status;
|
||||||
|
|
||||||
if (blob->info->get_fn) { /* readable, top-level DO */
|
if (blob->info->get_fn) { /* readable, top-level DO */
|
||||||
u8 buffer[2048];
|
u8 buffer[MAX_OPENPGP_DO_SIZE];
|
||||||
size_t buf_len = sizeof(buffer);
|
size_t buf_len = sizeof(buffer);
|
||||||
int r = SC_SUCCESS;
|
int r = SC_SUCCESS;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue