Module Name:    src
Committed By:   agc
Date:           Sat Oct 27 02:27:50 UTC 2012

Modified Files:
        src/crypto/external/bsd/netpgp/dist/src/libverify 
[agc-netpgp-standalone]:
            libverify.c verify.h

Log Message:
minor changes to libnetpgpverify(3)

+ allow more signature types in subkey signatures when parsing
signatures in the pubring trust entries, which allows more existing,
valid pubring.gpg files (constructed by gpg) to be recognised. with
thanks to jakallsch for the data.

+ provide a nonnull_getenv() function and use it in the one place
getenv(3) was previously used, following a nudge from dsl.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.8 -r1.1.2.9 \
    src/crypto/external/bsd/netpgp/dist/src/libverify/libverify.c
cvs rdiff -u -r1.1.2.7 -r1.1.2.8 \
    src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h

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/libverify/libverify.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libverify/libverify.c:1.1.2.8 src/crypto/external/bsd/netpgp/dist/src/libverify/libverify.c:1.1.2.9
--- src/crypto/external/bsd/netpgp/dist/src/libverify/libverify.c:1.1.2.8	Thu Oct 25 04:03:16 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libverify/libverify.c	Sat Oct 27 02:27:50 2012
@@ -51,23 +51,16 @@
 #define BITS_TO_BYTES(b)		(((b) + (CHAR_BIT - 1)) / CHAR_BIT)
 
 /* packet types */
-#define PUBKEY_ENC_SESSKEY_PKT		1
-#define SIGNATURE_PKT			2	/* done */
-#define SYMMKEY_ENC_SESSKEY_PKT		3
-#define ONEPASS_SIGNATURE_PKT		4	/* done */
-#define SECKEY_PKT			5
-#define PUBKEY_PKT			6	/* done */
-#define SEC_SUBKEY_PKT			7
-#define COMPRESSED_DATA_PKT		8	/* done */
-#define SYMMKEY_ENC_DATA_PKT		9
+#define SIGNATURE_PKT			2
+#define ONEPASS_SIGNATURE_PKT		4
+#define PUBKEY_PKT			6
+#define COMPRESSED_DATA_PKT		8
 #define MARKER_PKT			10
-#define LITDATA_PKT			11	/* done */
-#define TRUST_PKT			12	/* done */
-#define USERID_PKT			13	/* done */
-#define PUB_SUBKEY_PKT			14	/* done */
-#define USER_ATTRIBUTE_PKT		17	/* done */
-#define SYMM_ENC_INTEG_PROT_PKT		18
-#define MODIFY_DETECTION_PKT		19
+#define LITDATA_PKT			11
+#define TRUST_PKT			12
+#define USERID_PKT			13
+#define PUB_SUBKEY_PKT			14
+#define USER_ATTRIBUTE_PKT		17
 
 /* only allow certain packets at certain times */
 #define PUBRING_ALLOWED			"\002\006\014\015\016\021"
@@ -759,6 +752,11 @@ read_sig_subpackets(pgpv_sigpkt_t *sigpk
 		case SUBPKT_PREF_SYMMETRIC_ALG:
 			sigpkt->sig.pref_symm_alg = *p;
 			break;
+		case SUBPKT_REVOCATION_KEY:
+			sigpkt->sig.revoke_sensitive = (*p & 0x40);
+			sigpkt->sig.revoke_alg = p[1];
+			sigpkt->sig.revoke_fingerprint = &p[2];
+			break;
 		case SUBPKT_NOTATION:
 			sigpkt->sig.notation = *p;
 			break;
@@ -768,8 +766,11 @@ read_sig_subpackets(pgpv_sigpkt_t *sigpk
 		case SUBPKT_PREF_COMPRESS_ALG:
 			sigpkt->sig.pref_compress_alg = *p;
 			break;
+		case SUBPKT_PREF_KEY_SERVER:
+			sigpkt->sig.pref_key_server = (char *)(void *)p;
+			break;
 		case SUBPKT_KEY_SERVER_PREFS:
-			sigpkt->sig.key_server_prefs = (char *)(void *)p;
+			sigpkt->sig.key_server_modify = *p;
 			break;
 		case SUBPKT_KEY_FLAGS:
 			sigpkt->sig.type_key = *p;
@@ -788,7 +789,7 @@ read_sig_subpackets(pgpv_sigpkt_t *sigpk
 			sigpkt->sig.why_revoked = (char *)(void *)p;
 			break;
 		default:
-			printf("hi, need to implement sigpkt %d\n", subpkt.tag);
+			printf("Ignoring unusual/reserved signature subpacket %d\n", subpkt.tag);
 			break;
 		}
 		subpkt.s.data = p;
@@ -1274,9 +1275,8 @@ recog_subkey(pgpv_t *pgp, pgpv_signed_su
 		subkey->revoc_self_sig = signature;
 	}
 	do {
-		if (!pkt_sigtype_is(pgp, SIGTYPE_SUBKEY_BINDING) &&
-		    !pkt_sigtype_is(pgp, SIGTYPE_SUBKEY_REVOCATION)) {
-			printf("recog_subkey: not SIGNATURE_PKT/SUBKEY_BINDING at %zu\n", pgp->pkt);
+		if (!pkt_is(pgp, SIGNATURE_PKT)) {
+			printf("recog_subkey: not signature packet at %zu\n", pgp->pkt);
 			return 0;
 		}
 		if (!recog_signature(pgp, &signature)) {
@@ -1995,6 +1995,15 @@ match_sig(pgpv_cursor_t *cursor, pgpv_si
 	return 1;
 }
 
+/* check return value from getenv */
+static const char *
+nonnull_getenv(const char *key)
+{
+	char	*value;
+
+	return ((value = getenv(key)) == NULL) ? "" : value;
+}
+
 /************************************************************************/
 /* start of exported functions */
 /************************************************************************/
@@ -2141,7 +2150,7 @@ pgpv_read_pubring(pgpv_t *pgp, const voi
 			read_binary_memory(pgp, "pubring", keyring, (size_t)size) :
 			read_binary_file(pgp, "pubring", "%s", keyring);
 	}
-	return read_binary_file(pgp, "pubring", "%s/%s", getenv("HOME"), ".gnupg/pubring.gpg");
+	return read_binary_file(pgp, "pubring", "%s/%s", nonnull_getenv("HOME"), ".gnupg/pubring.gpg");
 }
 
 /* get verified data as a string, return its size */

Index: src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h
diff -u src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h:1.1.2.7 src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h:1.1.2.8
--- src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h:1.1.2.7	Thu Oct 25 04:03:16 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libverify/verify.h	Sat Oct 27 02:27:50 2012
@@ -122,15 +122,19 @@ typedef struct pgpv_signature_t {
 	uint8_t		 trustamount;
 	pgpv_bignum_t	 bn[PGPV_MAX_SIG_BN];
 	char		*regexp;
-	char		*key_server_prefs;
+	char		*pref_key_server;
 	char		*policy;
 	char		*features;
 	char		*why_revoked;
+	uint8_t		*revoke_fingerprint;
+	uint8_t		 revoke_alg;
+	uint8_t		 revoke_sensitive;
 	uint8_t		 trustsig;
 	uint8_t		 revocable;
 	uint8_t		 pref_symm_alg;
 	uint8_t		 pref_hash_alg;
 	uint8_t		 pref_compress_alg;
+	uint8_t		 key_server_modify;
 	uint8_t		 notation;
 	uint8_t		 type_key;
 	uint8_t		 revoked;		/* subtract 1 to get real reason, 0 == not revoked */

Reply via email to