Module Name: src
Committed By: khorben
Date: Mon Mar 27 21:19:12 UTC 2017
Modified Files:
src/crypto/external/bsd/netpgp/dist/src/lib: keyring.c
Log Message:
Do not ask for a passphrase when empty
Submitted on tech-pkg@ as:
[PATCH 06/11] Do not ask for a passphrase when empty
Only modified for consistency with the coding style.
To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.55 \
src/crypto/external/bsd/netpgp/dist/src/lib/keyring.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/src/lib/keyring.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.54 src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.55
--- src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.54 Mon Mar 27 21:06:50 2017
+++ src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c Mon Mar 27 21:19:12 2017
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: keyring.c,v 1.54 2017/03/27 21:06:50 khorben Exp $");
+__RCSID("$NetBSD: keyring.c,v 1.55 2017/03/27 21:19:12 khorben Exp $");
#endif
#ifdef HAVE_FCNTL_H
@@ -226,7 +226,7 @@ typedef struct {
pgp_seckey_t *seckey;
} decrypt_t;
-static pgp_cb_ret_t
+static pgp_cb_ret_t
decrypt_cb(const pgp_packet_t *pkt, pgp_cbdata_t *cbinfo)
{
const pgp_contents_t *content = &pkt->u;
@@ -294,6 +294,20 @@ decrypt_cb(const pgp_packet_t *pkt, pgp_
return PGP_RELEASE_MEMORY;
}
+static pgp_cb_ret_t
+decrypt_cb_empty(const pgp_packet_t *pkt, pgp_cbdata_t *cbinfo)
+{
+ const pgp_contents_t *content = &pkt->u;
+
+ switch (pkt->tag) {
+ case PGP_GET_PASSPHRASE:
+ *content->skey_passphrase.passphrase = netpgp_strdup("");
+ return PGP_KEEP_MEMORY;
+ default:
+ return decrypt_cb(pkt, cbinfo);
+ }
+}
+
/**
\ingroup Core_Keys
\brief Decrypts secret key from given keydata with given passphrase
@@ -308,8 +322,18 @@ pgp_decrypt_seckey(const pgp_key_t *key,
const int printerrors = 1;
decrypt_t decrypt;
+ /* XXX first try with an empty passphrase */
(void) memset(&decrypt, 0x0, sizeof(decrypt));
decrypt.key = key;
+ stream = pgp_new(sizeof(*stream));
+ pgp_keydata_reader_set(stream, key);
+ pgp_set_callback(stream, decrypt_cb_empty, &decrypt);
+ stream->readinfo.accumulate = 1;
+ pgp_parse(stream, !printerrors);
+ if (decrypt.seckey != NULL) {
+ return decrypt.seckey;
+ }
+ /* ask for a passphrase */
decrypt.passfp = passfp;
stream = pgp_new(sizeof(*stream));
pgp_keydata_reader_set(stream, key);