Module Name: src
Committed By: agc
Date: Thu Jun 11 04:57:52 UTC 2009
Modified Files:
src/crypto/external/bsd/netpgp/dist: TODO
src/crypto/external/bsd/netpgp/dist/src/lib: keyring.c keyring.h
netpgp.c reader.c
Log Message:
+ only prompt for the passphrase for the secret key if the secret key is
protected by a passphrase
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/crypto/external/bsd/netpgp/dist/TODO
cvs rdiff -u -r1.19 -r1.20 \
src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c
cvs rdiff -u -r1.15 -r1.16 \
src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h
cvs rdiff -u -r1.24 -r1.25 \
src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
cvs rdiff -u -r1.20 -r1.21 \
src/crypto/external/bsd/netpgp/dist/src/lib/reader.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/crypto/external/bsd/netpgp/dist/TODO
diff -u src/crypto/external/bsd/netpgp/dist/TODO:1.19 src/crypto/external/bsd/netpgp/dist/TODO:1.20
--- src/crypto/external/bsd/netpgp/dist/TODO:1.19 Thu Jun 11 01:17:43 2009
+++ src/crypto/external/bsd/netpgp/dist/TODO Thu Jun 11 04:57:51 2009
@@ -7,7 +7,6 @@
64-bit offsets
default compression when signing?
Multiple recipients for encryption
-don't require passphrase for keys without one
convert tests from ./tst to the autotest ./tests/
Done
@@ -65,3 +64,4 @@
separate key management program
C++ guards in header file
modify sets lists for netpgpverify
+don't require passphrase for keys without one
Index: src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.19 src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.20
--- src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.19 Thu Jun 11 01:12:42 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c Thu Jun 11 04:57:52 2009
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: keyring.c,v 1.19 2009/06/11 01:12:42 agc Exp $");
+__RCSID("$NetBSD: keyring.c,v 1.20 2009/06/11 04:57:52 agc Exp $");
#endif
#ifdef HAVE_FCNTL_H
@@ -228,6 +228,7 @@
{
const __ops_contents_t *content = &pkt->u;
decrypt_t *decrypt;
+ char pass[MAX_PASSPHRASE_LENGTH];
decrypt = __ops_callback_arg(cbinfo);
switch (pkt->tag) {
@@ -240,7 +241,8 @@
break;
case OPS_GET_PASSPHRASE:
- *content->skey_passphrase.passphrase = decrypt->passphrase;
+ (void) __ops_getpassphrase(NULL, pass, sizeof(pass));
+ *content->skey_passphrase.passphrase = strdup(pass);
return OPS_KEEP_MEMORY;
case OPS_PARSER_ERRCODE:
@@ -291,7 +293,7 @@
\return secret key
*/
__ops_seckey_t *
-__ops_decrypt_seckey(const __ops_key_t *key, const char *passphrase)
+__ops_decrypt_seckey(const __ops_key_t *key)
{
__ops_stream_t *stream;
const int printerrors = 1;
@@ -299,14 +301,11 @@
(void) memset(&decrypt, 0x0, sizeof(decrypt));
decrypt.key = key;
- decrypt.passphrase = strdup(passphrase);
stream = __ops_new(sizeof(*stream));
__ops_keydata_reader_set(stream, key);
__ops_set_callback(stream, decrypt_cb, &decrypt);
stream->readinfo.accumulate = 1;
__ops_parse(stream, !printerrors);
- __ops_forget(decrypt.passphrase, strlen(decrypt.passphrase));
- (void) free(decrypt.passphrase);
return decrypt.seckey;
}
Index: src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.15 src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.16
--- src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.15 Wed Jun 10 16:36:23 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h Thu Jun 11 04:57:52 2009
@@ -56,6 +56,11 @@
#include "packet.h"
#include "packet-parse.h"
+enum {
+ MAX_ID_LENGTH = 128,
+ MAX_PASSPHRASE_LENGTH = 256
+};
+
typedef struct __ops_key_t __ops_key_t;
/** \struct __ops_keyring_t
@@ -78,7 +83,7 @@
unsigned __ops_is_key_secret(const __ops_key_t *);
const __ops_seckey_t *__ops_get_seckey(const __ops_key_t *);
__ops_seckey_t *__ops_get_writable_seckey(__ops_key_t *);
-__ops_seckey_t *__ops_decrypt_seckey(const __ops_key_t *, const char *);
+__ops_seckey_t *__ops_decrypt_seckey(const __ops_key_t *);
unsigned __ops_keyring_fileread(__ops_keyring_t *, const unsigned,
const char *);
Index: src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.24 src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.25
--- src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.24 Thu Jun 11 01:12:42 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c Thu Jun 11 04:57:52 2009
@@ -34,7 +34,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: netpgp.c,v 1.24 2009/06/11 01:12:42 agc Exp $");
+__RCSID("$NetBSD: netpgp.c,v 1.25 2009/06/11 04:57:52 agc Exp $");
#endif
#include <sys/types.h>
@@ -85,11 +85,6 @@
#include "netpgpdefs.h"
#include "crypto.h"
-enum {
- MAX_ID_LENGTH = 128,
- MAX_PASSPHRASE_LENGTH = 256
-};
-
/* read any gpg config file */
static int
conffile(netpgp_t *netpgp, char *homedir, char *userid, size_t length)
@@ -509,7 +504,6 @@
const unsigned overwrite = 1;
__ops_io_t *io;
char *hashalg;
- char pass[MAX_PASSPHRASE_LENGTH];
int ret;
io = netpgp->io;
@@ -527,17 +521,11 @@
do {
/* print out the user id */
__ops_print_pubkeydata(io, keypair);
- /* get the passphrase */
- if (!__ops_getpassphrase(netpgp->passfp, pass, sizeof(pass))) {
- (void) fprintf(io->errs, "Can't get passphrase\n");
- return 0;
- }
/* now decrypt key */
- seckey = __ops_decrypt_seckey(keypair, pass);
+ seckey = __ops_decrypt_seckey(keypair);
if (seckey == NULL) {
(void) fprintf(io->errs, "Bad passphrase\n");
}
- __ops_forget(pass, sizeof(pass));
} while (seckey == NULL);
/* sign file */
hashalg = netpgp_getvar(netpgp, "hash");
Index: src/crypto/external/bsd/netpgp/dist/src/lib/reader.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.20 src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.21
--- src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.20 Thu Jun 11 01:12:42 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/reader.c Thu Jun 11 04:57:52 2009
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: reader.c,v 1.20 2009/06/11 01:12:42 agc Exp $");
+__RCSID("$NetBSD: reader.c,v 1.21 2009/06/11 04:57:52 agc Exp $");
#endif
#include <sys/types.h>
@@ -2154,7 +2154,7 @@
{
const __ops_contents_t *content = &pkt->u;
const __ops_seckey_t *secret;
- __ops_packet_t seckey;
+ const __ops_key_t *keypair;
__ops_io_t *io;
io = cbinfo->io;
@@ -2171,27 +2171,16 @@
return 0;
}
- /* now get the key from the data */
- secret = __ops_get_seckey(cbinfo->cryptinfo.keydata);
- while (!secret) {
- if (!cbinfo->cryptinfo.passphrase) {
- (void) memset(&seckey, 0x0, sizeof(seckey));
- seckey.u.skey_passphrase.passphrase =
- &cbinfo->cryptinfo.passphrase;
- CALLBACK(OPS_GET_PASSPHRASE, cbinfo, &seckey);
- }
- /* then it must be encrypted */
- secret = __ops_decrypt_seckey(
- cbinfo->cryptinfo.keydata,
- cbinfo->cryptinfo.passphrase);
- if (!secret) {
- (void) __ops_forget(
- cbinfo->cryptinfo.passphrase,
- strlen(cbinfo->cryptinfo.passphrase));
- cbinfo->cryptinfo.passphrase = NULL;
- (void) fprintf(stderr, "Bad passphrase\n");
+ keypair = cbinfo->cryptinfo.keydata;
+ do {
+ /* print out the user id */
+ __ops_print_pubkeydata(io, keypair);
+ /* now decrypt key */
+ secret = __ops_decrypt_seckey(keypair);
+ if (secret == NULL) {
+ (void) fprintf(io->errs, "Bad passphrase\n");
}
- }
+ } while (secret == NULL);
*content->get_seckey.seckey = secret;
break;