diff options
author | NIIBE Yutaka <[email protected]> | 2025-06-06 05:13:05 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2025-06-06 05:13:05 +0000 |
commit | fde915af1cf4b9166b68023899d41057baf95958 (patch) | |
tree | e25687373d1ab221d213db4141a97309efbc23ef | |
parent | scd: Take care of possible buffer overflow in do_auth. (diff) | |
download | gnupg-fde915af1cf4b9166b68023899d41057baf95958.tar.gz gnupg-fde915af1cf4b9166b68023899d41057baf95958.zip |
* agent/pkdecrypt.c (ECC_CURVE25519_INDEX): New.
(ecc_pgp_kem_decap): Handle the prefix 0x40 for Curve25519.
--
GnuPG-bug-id: 7676
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | agent/pkdecrypt.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/agent/pkdecrypt.c b/agent/pkdecrypt.c index d712e7f28..99896939b 100644 --- a/agent/pkdecrypt.c +++ b/agent/pkdecrypt.c @@ -43,6 +43,9 @@ struct ecc_params int scalar_reverse; }; +/* The first entry must be Curve25519, to handle the prefix of 0x40 in + OpenPGP. */ +#define ECC_CURVE25519_INDEX 0 static const struct ecc_params ecc_table[] = { { @@ -484,6 +487,13 @@ ecc_pgp_kem_decap (ctrl_t ctrl, gcry_sexp_t s_skey0, } *r_ecc = ecc; + if (ecc == &ecc_table[ECC_CURVE25519_INDEX] + && ecc_point_len == ecc->point_len + 1 && *ecc_ct == 0x40) + { + ecc_ct++; + ecc_point_len--; + } + if (ecc->point_len != ecc_point_len) { if (opt.verbose) |