diff options
author | Werner Koch <[email protected]> | 2009-07-10 10:15:33 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2009-07-10 10:15:33 +0000 |
commit | 96abdb1386284da07a7fe129b79d08890949d2ed (patch) | |
tree | cd4b233459c2fc39cafcee035161a6e7fc6bf7d7 /scd/app-openpgp.c | |
parent | Support writing of existing keys with non-matching key sizes. (diff) | |
download | gnupg-96abdb1386284da07a7fe129b79d08890949d2ed.tar.gz gnupg-96abdb1386284da07a7fe129b79d08890949d2ed.zip |
Fix for card keys > 2048 bit.
Diffstat (limited to 'scd/app-openpgp.c')
-rw-r--r-- | scd/app-openpgp.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 9620d5b40..134679bfb 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -3008,6 +3008,7 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, const char *fpr = NULL; unsigned long sigcount; int use_auth = 0; + int exmode, le_value; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); @@ -3148,7 +3149,19 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, xfree (pinvalue); } - rc = iso7816_compute_ds (app->slot, data, datalen, outdata, outdatalen); + + if (app->app_local->cardcap.ext_lc_le) + { + exmode = 1; /* Use extended length. */ + le_value = app->app_local->extcap.max_rsp_data; + } + else + { + exmode = 0; + le_value = 0; + } + rc = iso7816_compute_ds (app->slot, exmode, data, datalen, le_value, + outdata, outdatalen); return rc; } @@ -3219,8 +3232,23 @@ do_auth (app_t app, const char *keyidstr, rc = verify_chv2 (app, pincb, pincb_arg); if (!rc) - rc = iso7816_internal_authenticate (app->slot, indata, indatalen, - outdata, outdatalen); + { + int exmode, le_value; + + if (app->app_local->cardcap.ext_lc_le) + { + exmode = 1; /* Use extended length. */ + le_value = app->app_local->extcap.max_rsp_data; + } + else + { + exmode = 0; + le_value = 0; + } + rc = iso7816_internal_authenticate (app->slot, exmode, + indata, indatalen, le_value, + outdata, outdatalen); + } return rc; } |