diff options
author | Werner Koch <[email protected]> | 2003-09-27 19:37:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2003-09-27 19:37:53 +0000 |
commit | 20ed53942acc3b30576bae70826cced13bc84f4e (patch) | |
tree | ec1060581a6d035dc7a292b15e77aef90001054a /g10/sign.c | |
parent | * options.h, g10.c (main), keylist.c (list_keyblock_print): Add (diff) | |
download | gnupg-20ed53942acc3b30576bae70826cced13bc84f4e.tar.gz gnupg-20ed53942acc3b30576bae70826cced13bc84f4e.zip |
First bits of a card support backport from 1.9. It is not enabled by
default and tehre is not yet much more than a new configure option.
* configure.ac (LIBUSB_LIBS,HAVE_LIBUSB): Check for Libusb.
(--enable-card-support): New.
* sign.c (do_sign) [ENABLE_CARD_SUPPORT]: Divert to card.
* cardglue.c, cardglue.h: New.
* Makefile.am (gpg_LDADD): Added.
(card_support_sources): New.
* memory.h (xmalloc): Define xmalloc macros in terms of m_alloc.
Diffstat (limited to '')
-rw-r--r-- | g10/sign.c | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/g10/sign.c b/g10/sign.c index ab9d1a38f..d1d981480 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -40,6 +40,7 @@ #include "trustdb.h" #include "status.h" #include "i18n.h" +#include "cardglue.h" #ifdef HAVE_DOSISH_SYSTEM @@ -305,12 +306,38 @@ do_sign( PKT_secret_key *sk, PKT_signature *sig, sig->digest_algo = digest_algo; sig->digest_start[0] = dp[0]; sig->digest_start[1] = dp[1]; - frame = encode_md_value( sk->pubkey_algo, md, - digest_algo, mpi_get_nbits(sk->skey[0]), 0 ); - if (!frame) - return G10ERR_GENERAL; - rc = pubkey_sign( sk->pubkey_algo, sig->data, frame, sk->skey ); - mpi_free(frame); +#ifdef ENABLE_CARD_SUPPORT + if (sk->is_protected && sk->protect.s2k.mode == 1002) + { + char *rbuf; + size_t rbuflen; + char *snbuf; + + snbuf = serialno_and_fpr_from_sk (sk->protect.iv, sk->protect.ivlen,sk); + rc = G10ERR_GENERAL; +/* agent_scd_pksign (snbuf, digest_algo, */ +/* gcry_md_read (md, digest_algo), */ +/* gcry_md_get_algo_dlen (digest_algo), */ +/* &rbuf, &rbuflen); */ + xfree (snbuf); + if (!rc) + { +/* if (gcry_mpi_scan (&sig->data[0], GCRYMPI_FMT_USG, */ +/* rbuf, rbuflen, NULL)) */ + BUG (); + } + } + else +#endif /* ENABLE_CARD_SUPPORT */ + { + frame = encode_md_value( sk->pubkey_algo, md, + digest_algo, mpi_get_nbits(sk->skey[0]), 0 ); + if (!frame) + return G10ERR_GENERAL; + rc = pubkey_sign( sk->pubkey_algo, sig->data, frame, sk->skey ); + mpi_free(frame); + } + if (!rc && !opt.no_sig_create_check) { /* check that the signature verification worked and nothing is * fooling us e.g. by a bug in the signature create |