aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-04-15 14:40:48 +0000
committerWerner Koch <[email protected]>2014-04-15 17:44:50 +0000
commitdb3b528239c9d56bc71fd2283e07a3f1d91e4fd0 (patch)
tree905f77e255d5f32f01590c37a6802dc773de96e6 /g10/getkey.c
parentgpg: Re-indent a file. (diff)
downloadgnupg-db3b528239c9d56bc71fd2283e07a3f1d91e4fd0.tar.gz
gnupg-db3b528239c9d56bc71fd2283e07a3f1d91e4fd0.zip
gpg: Re-enable secret key deletion.
* g10/call-agent.c (agent_delete_key): New. * g10/keydb.h (FORMAT_KEYDESC_DELKEY): New. * g10/passphrase.c (gpg_format_keydesc): Support new format. * g10/delkey.c (do_delete_key): Add secret key deletion.
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index 777f3833f..458672a09 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -1237,6 +1237,38 @@ getkey_end (getkey_ctx_t ctx)
************* Merging stuff ********************
************************************************/
+/* Set the mainkey_id fields for all keys in KEYBLOCK. This is
+ usually done by merge_selfsigs but at some places we only need the
+ main_kid but the the full merging. The function also guarantees
+ that all pk->keyids are computed. */
+void
+setup_main_keyids (kbnode_t keyblock)
+{
+ u32 kid[2], mainkid[2];
+ kbnode_t kbctx, node;
+ PKT_public_key *pk;
+
+ if (keyblock->pkt->pkttype != PKT_PUBLIC_KEY)
+ BUG ();
+ pk = keyblock->pkt->pkt.public_key;
+
+ keyid_from_pk (pk, mainkid);
+ for (kbctx=NULL; (node = walk_kbnode (keyblock, &kbctx, 0)); )
+ {
+ if (!(node->pkt->pkttype == PKT_PUBLIC_KEY
+ || node->pkt->pkttype == PKT_PUBLIC_SUBKEY))
+ continue;
+ pk = node->pkt->pkt.public_key;
+ keyid_from_pk (pk, kid); /* Make sure pk->keyid is set. */
+ if (!pk->main_keyid[0] && !pk->main_keyid[1])
+ {
+ pk->main_keyid[0] = mainkid[0];
+ pk->main_keyid[1] = mainkid[1];
+ }
+ }
+}
+
+
/* Merge all self-signatures with the keys. */
void
merge_keys_and_selfsig (KBNODE keyblock)