diff options
| author | Werner Koch <[email protected]> | 2025-09-26 14:27:13 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2025-09-26 14:27:13 +0000 |
| commit | a966c2ce90802f2fa953b04e69fdc529d61b6f53 (patch) | |
| tree | 7a8a1da0919d8abd3049d6d9f15ca8aeac300dba /g10/encrypt.c | |
| parent | gpg: Rename a struct and some variables for clarity. (diff) | |
| download | gnupg-a966c2ce90802f2fa953b04e69fdc529d61b6f53.tar.gz gnupg-a966c2ce90802f2fa953b04e69fdc529d61b6f53.zip | |
gpg: Revamp structure of PKT_symkey_enc.
* g10/packet.h (PKT_symkey_enc): Allocate the session key so that we
have a fixed length for this struct.
* g10/free-packet.c (free_symkey_enc): Adjust for this change
* g10/parse-packet.c (parse_symkeyenc): Ditto.
* g10/encrypt.c (encrypt_simple, write_symkey_enc): Ditto.
Diffstat (limited to 'g10/encrypt.c')
| -rw-r--r-- | g10/encrypt.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/g10/encrypt.c b/g10/encrypt.c index b67d8039d..b305ce938 100644 --- a/g10/encrypt.c +++ b/g10/encrypt.c @@ -572,7 +572,7 @@ encrypt_simple (const char *filename, int mode, int use_seskey) if ( s2k ) { /* Fixme: This is quite similar to write_symkey_enc. */ - PKT_symkey_enc *enc = xmalloc_clear (sizeof *enc + enckeylen); + PKT_symkey_enc *enc = xmalloc_clear (sizeof *enc); enc->version = cfx.dek->use_aead ? 5 : 4; enc->cipher_algo = cfx.dek->algo; enc->aead_algo = cfx.dek->use_aead; @@ -580,13 +580,14 @@ encrypt_simple (const char *filename, int mode, int use_seskey) if (enckeylen) { enc->seskeylen = enckeylen; + enc->seskey = xmalloc (enckeylen); memcpy (enc->seskey, enckey, enckeylen); } pkt.pkttype = PKT_SYMKEY_ENC; pkt.pkt.symkey_enc = enc; if ((rc = build_packet( out, &pkt ))) log_error("build symkey packet failed: %s\n", gpg_strerror (rc) ); - xfree (enc); + free_symkey_enc (enc); xfree (enckey); enckey = NULL; } @@ -777,7 +778,7 @@ write_symkey_enc (STRING2KEY *symkey_s2k, aead_algo_t aead_algo, rc = encrypt_seskey (symkey_dek, aead_algo, &dek, &enckey, &enckeylen); if (rc) return rc; - enc = xtrycalloc (1, sizeof (PKT_symkey_enc) + enckeylen); + enc = xtrycalloc (1, sizeof (PKT_symkey_enc)); if (!enc) { rc = gpg_error_from_syserror (); @@ -790,6 +791,14 @@ write_symkey_enc (STRING2KEY *symkey_s2k, aead_algo_t aead_algo, enc->aead_algo = aead_algo; enc->s2k = *symkey_s2k; enc->seskeylen = enckeylen; + enc->seskey = xtrymalloc (enckeylen); + if (!enc->seskey) + { + rc = gpg_error_from_syserror (); + xfree (enc); + xfree (enckey); + return rc; + } memcpy (enc->seskey, enckey, enckeylen); xfree (enckey); @@ -799,7 +808,7 @@ write_symkey_enc (STRING2KEY *symkey_s2k, aead_algo_t aead_algo, if ((rc=build_packet(out,&pkt))) log_error("build symkey_enc packet failed: %s\n",gpg_strerror (rc)); - xfree (enc); + free_symkey_enc (enc); return rc; } |
