diff options
| author | Werner Koch <[email protected]> | 2024-09-03 16:20:51 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2024-09-06 14:09:49 +0000 |
| commit | 1eaf1e236e6056a2b96d7fea7eeb7a5eadee7742 (patch) | |
| tree | fe6e45b263974dcd4b7c2d433428d734092d036b /g10/free-packet.c | |
| parent | gpg: remove workaround for Libgcrypt < 1.8.6 (diff) | |
| download | gnupg-1eaf1e236e6056a2b96d7fea7eeb7a5eadee7742.tar.gz gnupg-1eaf1e236e6056a2b96d7fea7eeb7a5eadee7742.zip | |
gpg: Simplify the pubkey_enc_list object
* g10/packet.h (struct pubkey_enc_list): Replace most by a
PKT_pubkey_enc member.
* g10/free-packet.c (free_pubkey_enc): Factor most stuff out to ...
(release_pubkey_enc_parts): new.
(copy_pubkey_enc_parts): New.
* g10/mainproc.c (release_list): Adjust for above change.
(proc_pubkey_enc): Ditto.
(print_pkenc_list): Ditto.
(proc_encrypted): Ditto.
Diffstat (limited to 'g10/free-packet.c')
| -rw-r--r-- | g10/free-packet.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/g10/free-packet.c b/g10/free-packet.c index a80bc7b04..0962af0fc 100644 --- a/g10/free-packet.c +++ b/g10/free-packet.c @@ -52,18 +52,50 @@ free_symkey_enc( PKT_symkey_enc *enc ) xfree(enc); } +/* This is the core of free_pubkey_enc but does only release the + * allocated members of ENC. */ void -free_pubkey_enc( PKT_pubkey_enc *enc ) +release_pubkey_enc_parts (PKT_pubkey_enc *enc) { - int n, i; - n = pubkey_get_nenc( enc->pubkey_algo ); - if( !n ) - mpi_release(enc->data[0]); - for(i=0; i < n; i++ ) - mpi_release( enc->data[i] ); - xfree(enc); + int n, i; + n = pubkey_get_nenc( enc->pubkey_algo ); + if (!n) + mpi_release (enc->data[0]); + for (i=0; i < n; i++ ) + mpi_release (enc->data[i]); +} + +void +free_pubkey_enc (PKT_pubkey_enc *enc) +{ + release_pubkey_enc_parts (enc); + xfree (enc); } + +/* Copy everything from SRC to DST. This assumes that DST has been + * malloced or statically allocated. */ +void +copy_pubkey_enc_parts (PKT_pubkey_enc *dst, PKT_pubkey_enc *src) +{ + int n, i; + + dst->keyid[0] = src->keyid[0]; + dst->keyid[1] = src->keyid[1]; + dst->version = src->version; + dst->pubkey_algo = src->pubkey_algo; + dst->seskey_algo = src->seskey_algo; + dst->throw_keyid = src->throw_keyid; + + if (!(n = pubkey_get_nenc (dst->pubkey_algo))) + n = 1; /* All data is in the first item as an opaque MPI. */ + for (i=0; i < n; i++) + dst->data[i] = my_mpi_copy (src->data[i]); + for (; i < PUBKEY_MAX_NENC; i++) + dst->data[i] = NULL; +} + + void free_seckey_enc( PKT_signature *sig ) { |
