gpg: Use a more descriptive prompt for symmetric decryption.

* g10/keydb.h (GETPASSWORD_FLAG_SYMDECRYPT): New.
(passphrase_to_dek_ext): Remove this obsolete prototype.
* g10/passphrase.c (passphrase_get): Add arg flags.  Use new flag
value.
(passphrase_to_dek): Add arg flags and pass it on.
* g10/mainproc.c (proc_symkey_enc): Use new flag.

* sm/decrypt.c (pwri_decrypt): Use "passphrase".
--

Signed-off-by: Werner Koch <wk@gnupg.org>
(cherry picked from commit 03f83bcda5)

Note that we keep on using the term "passphrase" although "password"
would be better.  There are however so many occurance of this and
given it is a bike shedding topic we fix that in the PO files.

Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2021-05-17 19:27:54 +02:00
parent 1406f551f1
commit 6dfae2f402
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
8 changed files with 34 additions and 18 deletions

View File

@ -572,7 +572,7 @@ setup_symkey (STRING2KEY **symkey_s2k, DEK **symkey_dek)
(*symkey_s2k)->hash_algo = s2kdigest; (*symkey_s2k)->hash_algo = s2kdigest;
*symkey_dek = passphrase_to_dek (defcipher, *symkey_dek = passphrase_to_dek (defcipher,
*symkey_s2k, 1, 0, NULL, &canceled); *symkey_s2k, 1, 0, NULL, 0, &canceled);
if (!*symkey_dek || !(*symkey_dek)->keylen) if (!*symkey_dek || !(*symkey_dek)->keylen)
{ {
xfree(*symkey_dek); xfree(*symkey_dek);

View File

@ -579,13 +579,14 @@ check_secret_key (PKT_public_key *pk, int n)
*/ */
DEK * DEK *
passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, int create, int nocache, passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, int create, int nocache,
const char *tmp, int *canceled) const char *tmp, unsigned int flags, int *canceled)
{ {
(void)cipher_algo; (void)cipher_algo;
(void)s2k; (void)s2k;
(void)create; (void)create;
(void)nocache; (void)nocache;
(void)tmp; (void)tmp;
(void)flags;
if (canceled) if (canceled)
*canceled = 0; *canceled = 0;

View File

@ -292,19 +292,19 @@ gpg_error_t build_sk_list (ctrl_t ctrl, strlist_t locusr,
SK_LIST *ret_sk_list, unsigned use); SK_LIST *ret_sk_list, unsigned use);
/*-- passphrase.h --*/ /*-- passphrase.h --*/
/* Flags for passphrase_to_dek */
#define GETPASSWORD_FLAG_SYMDECRYPT 1
int have_static_passphrase(void); int have_static_passphrase(void);
const char *get_static_passphrase (void); const char *get_static_passphrase (void);
void set_passphrase_from_string(const char *pass); void set_passphrase_from_string(const char *pass);
void read_passphrase_from_fd( int fd ); void read_passphrase_from_fd( int fd );
void passphrase_clear_cache (const char *cacheid); void passphrase_clear_cache (const char *cacheid);
DEK *passphrase_to_dek_ext(u32 *keyid, int pubkey_algo,
int cipher_algo, STRING2KEY *s2k, int mode,
const char *tryagain_text,
const char *custdesc, const char *custprompt,
int *canceled);
DEK *passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, DEK *passphrase_to_dek (int cipher_algo, STRING2KEY *s2k,
int create, int nocache, int create, int nocache,
const char *tryagain_text, int *canceled); const char *tryagain_text, unsigned int flags,
int *canceled);
void set_next_passphrase( const char *s ); void set_next_passphrase( const char *s );
char *get_last_passphrase(void); char *get_last_passphrase(void);
void next_to_last_passphrase(void); void next_to_last_passphrase(void);

View File

@ -408,7 +408,8 @@ proc_symkey_enc (CTX c, PACKET *pkt)
} }
else else
{ {
c->dek = passphrase_to_dek (algo, &enc->s2k, 0, 0, NULL, NULL); c->dek = passphrase_to_dek (algo, &enc->s2k, 0, 0, NULL,
GETPASSWORD_FLAG_SYMDECRYPT, NULL);
if (c->dek) if (c->dek)
{ {
c->dek->symmetric = 1; c->dek->symmetric = 1;
@ -663,7 +664,8 @@ proc_encrypted (CTX c, PACKET *pkt)
log_info (_("assuming %s encrypted data\n"), "IDEA"); log_info (_("assuming %s encrypted data\n"), "IDEA");
} }
c->dek = passphrase_to_dek (algo, s2k, 0, 0, NULL, &canceled); c->dek = passphrase_to_dek (algo, s2k, 0, 0, NULL,
GETPASSWORD_FLAG_SYMDECRYPT, &canceled);
if (c->dek) if (c->dek)
c->dek->algo_info_printed = 1; c->dek->algo_info_printed = 1;
else if (canceled) else if (canceled)

View File

@ -171,15 +171,18 @@ read_passphrase_from_fd( int fd )
* operation. If CACHEID is not NULL, it will be used as the cacheID * operation. If CACHEID is not NULL, it will be used as the cacheID
* for the gpg-agent; if is NULL and a key fingerprint can be * for the gpg-agent; if is NULL and a key fingerprint can be
* computed, this will be used as the cacheid. * computed, this will be used as the cacheid.
*
* For FLAGS see passphrase_to_dek;
*/ */
static char * static char *
passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat, passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat,
const char *tryagain_text, int *canceled) const char *tryagain_text, unsigned int flags, int *canceled)
{ {
int rc; int rc;
char *pw = NULL; char *pw = NULL;
char *orig_codeset; char *orig_codeset;
const char *my_cacheid; const char *my_cacheid;
const char *desc;
if (canceled) if (canceled)
*canceled = 0; *canceled = 0;
@ -194,6 +197,11 @@ passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat,
if (tryagain_text) if (tryagain_text)
tryagain_text = _(tryagain_text); tryagain_text = _(tryagain_text);
if ((flags & GETPASSWORD_FLAG_SYMDECRYPT))
desc = _("Please enter the passphrase for decryption.");
else
desc = _("Enter passphrase\n");
/* Here we have: /* Here we have:
* REPEAT is set in create mode and if opt.passphrase_repeat is set. * REPEAT is set in create mode and if opt.passphrase_repeat is set.
* (Thus it is not a clean indication that we want a new passphrase). * (Thus it is not a clean indication that we want a new passphrase).
@ -205,7 +213,7 @@ passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat,
* for a full state analysis and thus this new parameter. * for a full state analysis and thus this new parameter.
*/ */
rc = agent_get_passphrase (my_cacheid, tryagain_text, NULL, rc = agent_get_passphrase (my_cacheid, tryagain_text, NULL,
_("Enter passphrase\n"), desc,
newsymkey, repeat, nocache, &pw); newsymkey, repeat, nocache, &pw);
i18n_switchback (orig_codeset); i18n_switchback (orig_codeset);
@ -264,11 +272,15 @@ passphrase_clear_cache (const char *cacheid)
* CANCELED is not NULL, sets it to true. * CANCELED is not NULL, sets it to true.
* *
* If CREATE is true a new passphrase will be created. If NOCACHE is * If CREATE is true a new passphrase will be created. If NOCACHE is
* true the symmetric key caching will not be used. */ * true the symmetric key caching will not be used.
* FLAG bits are:
* GETPASSWORD_FLAG_SYMDECRYPT := for symmetric decryption
*/
DEK * DEK *
passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, passphrase_to_dek (int cipher_algo, STRING2KEY *s2k,
int create, int nocache, int create, int nocache,
const char *tryagain_text, int *canceled) const char *tryagain_text, unsigned int flags,
int *canceled)
{ {
char *pw = NULL; char *pw = NULL;
DEK *dek; DEK *dek;
@ -355,7 +367,7 @@ passphrase_to_dek (int cipher_algo, STRING2KEY *s2k,
/* Divert to the gpg-agent. */ /* Divert to the gpg-agent. */
pw = passphrase_get (create, create && nocache, s2k_cacheid, pw = passphrase_get (create, create && nocache, s2k_cacheid,
create? opt.passphrase_repeat : 0, create? opt.passphrase_repeat : 0,
tryagain_text, canceled); tryagain_text, flags, canceled);
if (*canceled) if (*canceled)
{ {
xfree (pw); xfree (pw);

View File

@ -1605,7 +1605,7 @@ sign_symencrypt_file (ctrl_t ctrl, const char *fname, strlist_t locusr)
s2k->hash_algo = S2K_DIGEST_ALGO; s2k->hash_algo = S2K_DIGEST_ALGO;
algo = default_cipher_algo (); algo = default_cipher_algo ();
cfx.dek = passphrase_to_dek (algo, s2k, 1, 1, NULL, &canceled); cfx.dek = passphrase_to_dek (algo, s2k, 1, 1, NULL, 0, &canceled);
if (!cfx.dek || !cfx.dek->keylen) if (!cfx.dek || !cfx.dek->keylen)
{ {

View File

@ -336,13 +336,14 @@ check_secret_key (PKT_public_key *pk, int n)
*/ */
DEK * DEK *
passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, int create, int nocache, passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, int create, int nocache,
const char *tmp, int *canceled) const char *tmp, unsigned int flags, int *canceled)
{ {
(void)cipher_algo; (void)cipher_algo;
(void)s2k; (void)s2k;
(void)create; (void)create;
(void)nocache; (void)nocache;
(void)tmp; (void)tmp;
(void)flags;
if (canceled) if (canceled)
*canceled = 0; *canceled = 0;

View File

@ -657,7 +657,7 @@ pwri_decrypt (ctrl_t ctrl, gcry_sexp_t enc_val,
err = gpgsm_agent_ask_passphrase err = gpgsm_agent_ask_passphrase
(ctrl, (ctrl,
i18n_utf8 (N_("Please enter the password for decryption.")), i18n_utf8 (N_("Please enter the passphrase for decryption.")),
0, &passphrase); 0, &passphrase);
if (err) if (err)
goto leave; goto leave;