diff -Naurp gnupg-1.4.12/g10/getkey.c gnupg-1.4.12.oden/g10/getkey.c --- gnupg-1.4.12/g10/getkey.c 2012-01-20 05:51:15.000000000 -0500 +++ gnupg-1.4.12.oden/g10/getkey.c 2013-10-09 11:15:12.000000000 -0400 @@ -1494,13 +1494,19 @@ parse_key_usage(PKT_signature *sig) if(flags) key_usage |= PUBKEY_USAGE_UNKNOWN; + + if (!key_usage) + key_usage |= PUBKEY_USAGE_NONE; } + else if (p) /* Key flags of length zero. */ + key_usage |= PUBKEY_USAGE_NONE; /* We set PUBKEY_USAGE_UNKNOWN to indicate that this key has a capability that we do not handle. This serves to distinguish between a zero key usage which we handle as the default capabilities for that algorithm, and a usage that we do not - handle. */ + handle. Likewise we use PUBKEY_USAGE_NONE to indicate that + key_flags have been given but they do not specify any usage. */ return key_usage; } diff -Naurp gnupg-1.4.12/g10/keygen.c gnupg-1.4.12.oden/g10/keygen.c --- gnupg-1.4.12/g10/keygen.c 2012-01-20 05:51:15.000000000 -0500 +++ gnupg-1.4.12.oden/g10/keygen.c 2013-10-09 11:15:12.000000000 -0400 @@ -210,9 +210,6 @@ do_add_key_flags (PKT_signature *sig, un if (use & PUBKEY_USAGE_AUTH) buf[0] |= 0x20; - if (!buf[0]) - return; - build_sig_subpkt (sig, SIGSUBPKT_KEY_FLAGS, buf, 1); } diff -Naurp gnupg-1.4.12/include/cipher.h gnupg-1.4.12.oden/include/cipher.h --- gnupg-1.4.12/include/cipher.h 2012-01-20 05:51:16.000000000 -0500 +++ gnupg-1.4.12.oden/include/cipher.h 2013-10-09 11:15:12.000000000 -0400 @@ -57,6 +57,7 @@ #define PUBKEY_USAGE_CERT 4 /* key is also good to certify other keys*/ #define PUBKEY_USAGE_AUTH 8 /* key is good for authentication */ #define PUBKEY_USAGE_UNKNOWN 128 /* key has an unknown usage bit */ +#define PUBKEY_USAGE_NONE 256 /* No usage given. */ #define DIGEST_ALGO_MD5 1 #define DIGEST_ALGO_SHA1 2