diff options
author | NIIBE Yutaka <[email protected]> | 2024-04-26 05:18:03 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2024-04-26 05:18:03 +0000 |
commit | 9128d81bb7b92660c896965d0b6b1b1a1622d3e6 (patch) | |
tree | c55cdc61d759e73470342f1e08bde0850325f4e7 /agent/divert-scd.c | |
parent | speedo: Use gpg-authcode-sign.sh and change archive label to v2.5. (diff) | |
download | gnupg-9128d81bb7b92660c896965d0b6b1b1a1622d3e6.tar.gz gnupg-9128d81bb7b92660c896965d0b6b1b1a1622d3e6.zip |
agent:kem:ecc: Support a key on smartcard.
* agent/agent.h (agent_card_ecc_kem): New.
* agent/divert-scd.c (agent_card_ecc_kem): New.
* agent/pkdecrypt.c (ecc_extract_pk_from_key): New.
(ecc_extract_sk_from_key): New.
(ecc_raw_kem, get_cardkey, ecc_get_curve): New.
(ecc_pgp_kem_decrypt): Support a key on smartcard for ECC.
(composite_pgp_kem_decrypt): Handle a case of a key on smartcard.
* common/sexputil.c (get_ecc_curve_from_key): New.
* common/util.h (get_ecc_curve_from_key): New.
--
GnuPG-bug-id: 7097
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'agent/divert-scd.c')
-rw-r--r-- | agent/divert-scd.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/agent/divert-scd.c b/agent/divert-scd.c index d7454d968..d8c2bcca7 100644 --- a/agent/divert-scd.c +++ b/agent/divert-scd.c @@ -486,6 +486,34 @@ divert_pkdecrypt (ctrl_t ctrl, return rc; } +gpg_error_t +agent_card_ecc_kem (ctrl_t ctrl, const unsigned char *ecc_ct, + size_t ecc_point_len, unsigned char *ecc_ecdh) +{ + gpg_error_t err = 0; + char *ecdh = NULL; + size_t len; + int rc; + + rc = agent_card_pkdecrypt (ctrl, ctrl->keygrip, getpin_cb, ctrl, NULL, + ecc_ct, ecc_point_len, &ecdh, &len, NULL); + if (rc) + return rc; + + if (len != ecc_point_len) + { + if (opt.verbose) + log_info ("%s: ECC result length invalid (%zu != %zu)\n", + __func__, len, ecc_point_len); + return gpg_error (GPG_ERR_INV_DATA); + } + else + memcpy (ecc_ecdh, ecdh, len); + + xfree (ecdh); + return err; +} + gpg_error_t divert_writekey (ctrl_t ctrl, int force, const char *serialno, |