aboutsummaryrefslogtreecommitdiffstats
path: root/g10/free-packet.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-09-03 16:20:51 +0000
committerWerner Koch <[email protected]>2024-09-06 14:09:49 +0000
commit1eaf1e236e6056a2b96d7fea7eeb7a5eadee7742 (patch)
treefe6e45b263974dcd4b7c2d433428d734092d036b /g10/free-packet.c
parentgpg: remove workaround for Libgcrypt < 1.8.6 (diff)
downloadgnupg-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.c48
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 )
{