mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
gpg: Some support to allow Kyber decryption.
* g10/call-agent.c (agent_pkdecrypt): Support dual keygrips and switch to KEM mode. * g10/ecdh.c (pk_ecdh_decrypt): Add an extra length check. * g10/keyid.c (do_hash_public_key): Fix Kyber fingerprint computation. * g10/mainproc.c (release_list): Free all 4 data elements. (proc_pubkey_enc): Copy all 4 data elements. * g10/misc.c (openpgp_pk_test_algo2): Map Kyber to KEM. * g10/parse-packet.c (parse_pubkeyenc): Fix Kyber parser. * g10/pubkey-enc.c (get_session_key): Allow Kyber. (get_it): Support Kyber. -- GnuPG-bug-id: 6815
This commit is contained in:
parent
1a37f0080b
commit
52c4b09080
7 changed files with 67 additions and 15 deletions
|
@ -2878,6 +2878,7 @@ agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
|
|||
membuf_t data;
|
||||
size_t n, len;
|
||||
char *p, *buf, *endp;
|
||||
const char *keygrip2 = NULL;
|
||||
struct default_inq_parm_s dfltparm;
|
||||
|
||||
memset (&dfltparm, 0, sizeof dfltparm);
|
||||
|
@ -2886,13 +2887,26 @@ agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
|
|||
dfltparm.keyinfo.mainkeyid = mainkeyid;
|
||||
dfltparm.keyinfo.pubkey_algo = pubkey_algo;
|
||||
|
||||
if (!keygrip || strlen(keygrip) != 40
|
||||
|| !s_ciphertext || !r_buf || !r_buflen || !r_padding)
|
||||
if (!keygrip || !s_ciphertext || !r_buf || !r_buflen || !r_padding)
|
||||
return gpg_error (GPG_ERR_INV_VALUE);
|
||||
|
||||
*r_buf = NULL;
|
||||
*r_padding = -1;
|
||||
|
||||
/* Parse the keygrip in case of a dual algo. */
|
||||
keygrip2 = strchr (keygrip, ',');
|
||||
if (!keygrip2)
|
||||
keygrip2 = keygrip + strlen (keygrip);
|
||||
if (keygrip2 - keygrip != 40)
|
||||
return gpg_error (GPG_ERR_INV_VALUE);
|
||||
if (*keygrip2)
|
||||
{
|
||||
keygrip2++;
|
||||
if (strlen (keygrip2) != 40)
|
||||
return gpg_error (GPG_ERR_INV_VALUE);
|
||||
}
|
||||
|
||||
|
||||
err = start_agent (ctrl, 0);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -2903,11 +2917,19 @@ agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
snprintf (line, sizeof line, "SETKEY %s", keygrip);
|
||||
snprintf (line, sizeof line, "SETKEY %.40s", keygrip);
|
||||
err = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (*keygrip2)
|
||||
{
|
||||
snprintf (line, sizeof line, "SETKEY --another %.40s", keygrip2);
|
||||
err = assuan_transact (agent_ctx, line, NULL, NULL,NULL,NULL,NULL,NULL);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (desc)
|
||||
{
|
||||
snprintf (line, DIM(line), "SETKEYDESC %s", desc);
|
||||
|
@ -2926,7 +2948,8 @@ agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
|
|||
err = make_canon_sexp (s_ciphertext, &parm.ciphertext, &parm.ciphertextlen);
|
||||
if (err)
|
||||
return err;
|
||||
err = assuan_transact (agent_ctx, "PKDECRYPT",
|
||||
err = assuan_transact (agent_ctx,
|
||||
*keygrip2? "PKDECRYPT --kem=PQC-PGP":"PKDECRYPT",
|
||||
put_membuf_cb, &data,
|
||||
inq_ciphertext_cb, &parm,
|
||||
padding_info_cb, r_padding);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue