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;
 

Reply via email to