diff --git a/g10/import.c b/g10/import.c index c3ad53632..8223041d1 100644 --- a/g10/import.c +++ b/g10/import.c @@ -1431,7 +1431,7 @@ transfer_secret_keys (ctrl_t ctrl, struct stats_s *stats, kbnode_t sec_keyblock) /* Send the wrapped key to the agent. */ { - char *desc = gpg_format_keydesc (pk, 1, 1); + char *desc = gpg_format_keydesc (pk, FORMAT_KEYDESC_IMPORT, 1); err = agent_import_key (ctrl, desc, &cache_nonce, wrappedkey, wrappedkeylen, opt.batch); xfree (desc); diff --git a/g10/keydb.h b/g10/keydb.h index 6834fc9ad..492cde37f 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -198,6 +198,10 @@ void next_to_last_passphrase(void); void emit_status_need_passphrase (u32 *keyid, u32 *mainkeyid, int pubkey_algo); +#define FORMAT_KEYDESC_NORMAL 0 +#define FORMAT_KEYDESC_IMPORT 1 +#define FORMAT_KEYDESC_EXPORT 2 + char *gpg_format_keydesc (PKT_public_key *pk, int mode, int escaped); diff --git a/g10/keyedit.c b/g10/keyedit.c index c4d7ca8e3..9e5fb8f8f 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -1200,7 +1200,7 @@ change_passphrase (ctrl_t ctrl, kbnode_t keyblock) if (err) goto leave; - desc = gpg_format_keydesc (pk, 0, 1); + desc = gpg_format_keydesc (pk, FORMAT_KEYDESC_NORMAL, 1); err = agent_passwd (ctrl, hexgrip, desc, &cache_nonce, &passwd_nonce); xfree (desc); diff --git a/g10/passphrase.c b/g10/passphrase.c index bd0f0ffb0..7c1d6aa08 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -645,29 +645,49 @@ gpg_format_keydesc (PKT_public_key *pk, int mode, int escaped) char *maink; char *desc; const char *prompt; + const char *trailer = ""; + int is_subkey; + is_subkey = (pk->main_keyid[0] && pk->main_keyid[1] + && pk->keyid[0] != pk->main_keyid[0] + && pk->keyid[1] != pk->main_keyid[1]); algo_name = openpgp_pk_algo_name (pk->pubkey_algo); timestr = strtimestamp (pk->timestamp); - uid = get_user_id (pk->keyid, &uidlen); + uid = get_user_id (is_subkey? pk->main_keyid:pk->keyid, &uidlen); orig_codeset = i18n_switchto_utf8 (); - if (pk->main_keyid[0] && pk->main_keyid[1] - && pk->keyid[0] != pk->main_keyid[0] - && pk->keyid[1] != pk->main_keyid[1]) + if (is_subkey) maink = xtryasprintf (_(" (main key ID %s)"), keystr (pk->main_keyid)); else maink = NULL; switch (mode) { - case 0: + case FORMAT_KEYDESC_NORMAL: prompt = _("Please enter the passphrase to unlock the" - " secret key for the OpenPGP certificate:"); + " OpenPGP secret key:"); break; - case 1: + case FORMAT_KEYDESC_IMPORT: prompt = _("Please enter the passphrase to import the" - " secret key for the OpenPGP certificate:"); + " OpenPGP secret key:"); + break; + case FORMAT_KEYDESC_EXPORT: + if (is_subkey) + prompt = _("Please enter the passphrase to export the" + " OpenPGP secret subkey:"); + else + prompt = _("Please enter the passphrase to export the" + " OpenPGP secret key:"); + break; + case FORMAT_KEYDESC_DELKEY: + if (is_subkey) + prompt = _("Do you really want to permanently delete the" + " OpenPGP secret subkey key:"); + else + prompt = _("Do you really want to permanently delete the" + " OpenPGP secret key:"); + trailer = "?"; break; default: prompt = "?"; @@ -677,12 +697,12 @@ gpg_format_keydesc (PKT_public_key *pk, int mode, int escaped) desc = xtryasprintf (_("%s\n" "\"%.*s\"\n" "%u-bit %s key, ID %s,\n" - "created %s%s.\n"), + "created %s%s.\n%s"), prompt, (int)uidlen, uid, nbits_from_pk (pk), algo_name, keystr (pk->keyid), timestr, - maink?maink:"" ); + maink?maink:"", trailer ); xfree (maink); xfree (uid); diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c index 042a25598..a563ec0bf 100644 --- a/g10/pubkey-enc.c +++ b/g10/pubkey-enc.c @@ -200,7 +200,7 @@ get_it (PKT_pubkey_enc *enc, DEK *dek, PKT_public_key *sk, u32 *keyid) } /* Decrypt. */ - desc = gpg_format_keydesc (sk, 0, 1); + desc = gpg_format_keydesc (sk, FORMAT_KEYDESC_NORMAL, 1); err = agent_pkdecrypt (NULL, keygrip, desc, sk->keyid, sk->main_keyid, sk->pubkey_algo, s_data, &frame, &nframe, &padding); diff --git a/g10/sign.c b/g10/sign.c index d9f2dd3c6..8a878885b 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -270,7 +270,7 @@ do_sign (PKT_public_key *pksk, PKT_signature *sig, char *desc; gcry_sexp_t s_sigval; - desc = gpg_format_keydesc (pksk, 0, 1); + desc = gpg_format_keydesc (pksk, FORMAT_KEYDESC_NORMAL, 1); err = agent_pksign (NULL/*ctrl*/, cache_nonce, hexgrip, desc, pksk->keyid, pksk->main_keyid, pksk->pubkey_algo, dp, gcry_md_get_algo_dlen (mdalgo), mdalgo,