diff options
author | Werner Koch <[email protected]> | 2009-05-15 19:26:46 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2009-05-15 19:26:46 +0000 |
commit | c4e92c334418ebd538ef298f904149c31ac29137 (patch) | |
tree | a0658abe75583049b86e44fce9ffc9b7bd9d664c /g10/passphrase.c | |
parent | 2009-05-15 Marcus Brinkmann <[email protected]> (diff) | |
download | gnupg-c4e92c334418ebd538ef298f904149c31ac29137.tar.gz gnupg-c4e92c334418ebd538ef298f904149c31ac29137.zip |
Made card key generate with backup key work for 2048 bit.
Improved card key generation prompts.
Diffstat (limited to 'g10/passphrase.c')
-rw-r--r-- | g10/passphrase.c | 75 |
1 files changed, 21 insertions, 54 deletions
diff --git a/g10/passphrase.c b/g10/passphrase.c index 8b952f72a..f5d301398 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -236,7 +236,8 @@ read_passphrase_from_fd( int fd ) /* * Ask the GPG Agent for the passphrase. * Mode 0: Allow cached passphrase - * 1: No cached passphrase FIXME: Not really implemented + * 1: No cached passphrase; that is we are asking for a new passphrase + * FIXME: Only partially implemented * * Note that TRYAGAIN_TEXT must not be translated. If CANCELED is not * NULL, the function does set it to 1 if the user canceled the @@ -260,6 +261,7 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid, int repeat, char *my_prompt; char hexfprbuf[20*2+1]; const char *my_cacheid; + int check = (mode == 1); if (canceled) *canceled = 0; @@ -347,7 +349,7 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid, int repeat, my_prompt = custom_prompt ? native_to_utf8 (custom_prompt): NULL; rc = agent_get_passphrase (my_cacheid, tryagain_text, my_prompt, atext, - repeat, &pw); + repeat, check, &pw); xfree (my_prompt); xfree (atext); atext = NULL; @@ -432,54 +434,6 @@ passphrase_clear_cache ( u32 *keyid, const char *cacheid, int algo ) } -/**************** - * Ask for a passphrase and return that string. - */ -char * -ask_passphrase (const char *description, - const char *tryagain_text, - const char *promptid, - const char *prompt, - const char *cacheid, int *canceled) -{ - char *pw = NULL; - - (void)promptid; - - if (canceled) - *canceled = 0; - - if (!opt.batch && description) - { - if (strchr (description, '%')) - { - char *tmp = percent_plus_unescape (description, 0xff); - if (!tmp) - log_fatal(_("out of core\n")); - tty_printf ("\n%s\n", tmp); - xfree (tmp); - } - else - tty_printf ("\n%s\n",description); - } - - if (have_static_passphrase ()) - { - pw = xmalloc_secure (strlen(fd_passwd)+1); - strcpy (pw, fd_passwd); - } - else - pw = passphrase_get (NULL, 0, cacheid, 0, - tryagain_text, description, prompt, - canceled ); - - if (!pw || !*pw) - write_status( STATUS_MISSING_PASSPHRASE ); - - return pw; -} - - /* Return a new DEK object Using the string-to-key sepcifier S2K. Use KEYID and PUBKEY_ALGO to prompt the user. Returns NULL is the user selected to cancel the passphrase entry and if CANCELED is not @@ -490,9 +444,11 @@ ask_passphrase (const char *description, 2: Ditto, but change the text to "repeat entry" */ DEK * -passphrase_to_dek (u32 *keyid, int pubkey_algo, - int cipher_algo, STRING2KEY *s2k, int mode, - const char *tryagain_text, int *canceled) +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) { char *pw = NULL; DEK *dek; @@ -612,7 +568,7 @@ passphrase_to_dek (u32 *keyid, int pubkey_algo, /* Divert to the gpg-agent. */ pw = passphrase_get ( keyid, mode == 2, NULL, mode == 2? opt.passwd_repeat: 0, - tryagain_text, NULL, NULL, canceled ); + tryagain_text, custdesc, custprompt, canceled); if (*canceled) { xfree (pw); @@ -637,3 +593,14 @@ passphrase_to_dek (u32 *keyid, int pubkey_algo, last_pw = pw; return dek; } + + +DEK * +passphrase_to_dek (u32 *keyid, int pubkey_algo, + int cipher_algo, STRING2KEY *s2k, int mode, + const char *tryagain_text, int *canceled) +{ + return passphrase_to_dek_ext (keyid, pubkey_algo, cipher_algo, + s2k, mode, tryagain_text, NULL, NULL, + canceled); +} |