diff --git a/g10/encrypt.c b/g10/encrypt.c index 01f32afdf..94e233bcd 100644 --- a/g10/encrypt.c +++ b/g10/encrypt.c @@ -404,7 +404,7 @@ setup_symkey (STRING2KEY **symkey_s2k, DEK **symkey_dek) (*symkey_s2k)->hash_algo = s2kdigest; *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) { xfree(*symkey_dek); diff --git a/g10/gpgv.c b/g10/gpgv.c index c17870c66..71adb0488 100644 --- a/g10/gpgv.c +++ b/g10/gpgv.c @@ -584,13 +584,14 @@ check_secret_key (PKT_public_key *pk, int n) */ DEK * 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)s2k; (void)create; (void)nocache; (void)tmp; + (void)flags; if (canceled) *canceled = 0; diff --git a/g10/keydb.h b/g10/keydb.h index 3ffd7691a..0f8d711a9 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -277,20 +277,21 @@ gpg_error_t build_sk_list (ctrl_t ctrl, strlist_t locusr, SK_LIST *ret_sk_list, unsigned use); /*-- passphrase.h --*/ + +/* Flags for passphrase_to_dek */ +#define GETPASSWORD_FLAG_SYMDECRYPT 1 + + unsigned char encode_s2k_iterations (int iterations); int have_static_passphrase(void); const char *get_static_passphrase (void); void set_passphrase_from_string(const char *pass); void read_passphrase_from_fd( int fd ); 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, 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 ); char *get_last_passphrase(void); void next_to_last_passphrase(void); diff --git a/g10/mainproc.c b/g10/mainproc.c index 830a24a51..b032afb8b 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -420,7 +420,8 @@ proc_symkey_enc (CTX c, PACKET *pkt) } 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) { c->dek->symmetric = 1; @@ -709,7 +710,8 @@ proc_encrypted (CTX c, PACKET *pkt) 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) c->dek->algo_info_printed = 1; else if (canceled) diff --git a/g10/passphrase.c b/g10/passphrase.c index e6837e369..f94b93c22 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -221,15 +221,18 @@ read_passphrase_from_fd( int fd ) * 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 * computed, this will be used as the cacheid. + * + * For FLAGS see passphrase_to_dek; */ static char * 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; char *pw = NULL; char *orig_codeset; const char *my_cacheid; + const char *desc; if (canceled) *canceled = 0; @@ -244,6 +247,11 @@ passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat, if (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: * 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). @@ -255,7 +263,7 @@ passphrase_get (int newsymkey, int nocache, const char *cacheid, int repeat, * for a full state analysis and thus this new parameter. */ rc = agent_get_passphrase (my_cacheid, tryagain_text, NULL, - _("Enter passphrase\n"), + desc, newsymkey, repeat, nocache, &pw); i18n_switchback (orig_codeset); @@ -314,11 +322,16 @@ passphrase_clear_cache (const char *cacheid) * CANCELED is not NULL, sets it to true. * * If CREATE is true a new passphrase sll 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 * passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, int create, int nocache, - const char *tryagain_text, int *canceled) + const char *tryagain_text, unsigned int flags, + int *canceled) { char *pw = NULL; DEK *dek; @@ -405,7 +418,7 @@ passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, /* Divert to the gpg-agent. */ pw = passphrase_get (create, create && nocache, s2k_cacheid, create? opt.passphrase_repeat : 0, - tryagain_text, canceled); + tryagain_text, flags, canceled); if (*canceled) { xfree (pw); diff --git a/g10/sign.c b/g10/sign.c index b88731c0c..2f48a7078 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -1463,7 +1463,7 @@ sign_symencrypt_file (ctrl_t ctrl, const char *fname, strlist_t locusr) if (!opt.quiet || !opt.batch) log_info (_("%s encryption will be used\n"), openpgp_cipher_algo_name (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) { rc = gpg_error (canceled?GPG_ERR_CANCELED:GPG_ERR_BAD_PASSPHRASE); diff --git a/g10/test-stubs.c b/g10/test-stubs.c index 09737c4af..f0ce10b38 100644 --- a/g10/test-stubs.c +++ b/g10/test-stubs.c @@ -341,13 +341,14 @@ check_secret_key (PKT_public_key *pk, int n) */ DEK * 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)s2k; (void)create; (void)nocache; (void)tmp; + (void)flags; if (canceled) *canceled = 0;