From 74258278efacd7069e8c1df8ff6fc3f4675d713e Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 13 Apr 2017 12:54:52 +0900 Subject: [PATCH] common, g10: Fix enumeration types. * common/openpgpdefs.h (CIPHER_ALGO_PRIVATE10, PUBKEY_ALGO_PRIVATE10) (DIGEST_ALGO_PRIVATE10, COMPRESS_ALGO_PRIVATE10): New. * g10/misc.c (map_pk_gcry_to_openpgp): Add type conversion. (map_cipher_openpgp_to_gcry, openpgp_cipher_algo_name) (openpgp_pk_test_algo2, map_md_openpgp_to_gcry) (pubkey_get_npkey): Add default handling. -- Compilers may emit code assuming the maximum value of enum type. According to OpenPGP specification, there are cases for private uses. Signed-off-by: NIIBE Yutaka --- common/openpgpdefs.h | 12 ++++++++---- g10/misc.c | 23 +++++++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/common/openpgpdefs.h b/common/openpgpdefs.h index 3d5d306c2..85a4251de 100644 --- a/common/openpgpdefs.h +++ b/common/openpgpdefs.h @@ -136,7 +136,8 @@ typedef enum CIPHER_ALGO_TWOFISH = 10, /* 256 bit */ CIPHER_ALGO_CAMELLIA128 = 11, CIPHER_ALGO_CAMELLIA192 = 12, - CIPHER_ALGO_CAMELLIA256 = 13 + CIPHER_ALGO_CAMELLIA256 = 13, + CIPHER_ALGO_PRIVATE10 = 110 } cipher_algo_t; @@ -152,7 +153,8 @@ typedef enum PUBKEY_ALGO_ECDSA = 19, /* RFC-6637 */ PUBKEY_ALGO_ELGAMAL = 20, /* Elgamal encrypt+sign (legacy). */ /* 21 reserved by OpenPGP. */ - PUBKEY_ALGO_EDDSA = 22 /* EdDSA (not yet assigned). */ + PUBKEY_ALGO_EDDSA = 22, /* EdDSA (not yet assigned). */ + PUBKEY_ALGO_PRIVATE10 = 110 } pubkey_algo_t; @@ -166,7 +168,8 @@ typedef enum DIGEST_ALGO_SHA256 = 8, DIGEST_ALGO_SHA384 = 9, DIGEST_ALGO_SHA512 = 10, - DIGEST_ALGO_SHA224 = 11 + DIGEST_ALGO_SHA224 = 11, + DIGEST_ALGO_PRIVATE10 = 110 } digest_algo_t; @@ -176,7 +179,8 @@ typedef enum COMPRESS_ALGO_NONE = 0, COMPRESS_ALGO_ZIP = 1, COMPRESS_ALGO_ZLIB = 2, - COMPRESS_ALGO_BZIP2 = 3 + COMPRESS_ALGO_BZIP2 = 3, + COMPRESS_ALGO_PRIVATE10 = 110 } compress_algo_t; diff --git a/g10/misc.c b/g10/misc.c index 0ecdb0478..abae6c960 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -473,8 +473,8 @@ map_cipher_openpgp_to_gcry (cipher_algo_t algo) #else case CIPHER_ALGO_CAMELLIA256: return 0; #endif + default: return 0; } - return 0; } /* The inverse function of above. */ @@ -509,7 +509,7 @@ map_pk_gcry_to_openpgp (enum gcry_pk_algos algo) { case GCRY_PK_ECDSA: return PUBKEY_ALGO_ECDSA; case GCRY_PK_ECDH: return PUBKEY_ALGO_ECDH; - default: return algo < 110 ? algo : 0; + default: return algo < 110 ? (pubkey_algo_t)algo : 0; } } @@ -565,7 +565,6 @@ openpgp_cipher_algo_name (cipher_algo_t algo) { switch (algo) { - case CIPHER_ALGO_NONE: break; case CIPHER_ALGO_IDEA: return "IDEA"; case CIPHER_ALGO_3DES: return "3DES"; case CIPHER_ALGO_CAST5: return "CAST5"; @@ -577,8 +576,9 @@ openpgp_cipher_algo_name (cipher_algo_t algo) case CIPHER_ALGO_CAMELLIA128: return "CAMELLIA128"; case CIPHER_ALGO_CAMELLIA192: return "CAMELLIA192"; case CIPHER_ALGO_CAMELLIA256: return "CAMELLIA256"; + case CIPHER_ALGO_NONE: + default: return "?"; } - return "?"; } @@ -636,6 +636,9 @@ openpgp_pk_test_algo2 (pubkey_algo_t algo, unsigned int use) if (RFC2440) ga = GCRY_PK_ELG; break; + + default: + break; } if (!ga) return gpg_error (GPG_ERR_PUBKEY_ALGO); @@ -699,8 +702,8 @@ openpgp_pk_algo_name (pubkey_algo_t algo) case PUBKEY_ALGO_ECDH: return "ECDH"; case PUBKEY_ALGO_ECDSA: return "ECDSA"; case PUBKEY_ALGO_EDDSA: return "EDDSA"; + default: return "?"; } - return "?"; } @@ -832,8 +835,8 @@ map_md_openpgp_to_gcry (digest_algo_t algo) #else case DIGEST_ALGO_SHA512: return 0; #endif + default: return 0; } - return 0; } @@ -1652,8 +1655,8 @@ pubkey_get_npkey (pubkey_algo_t algo) case PUBKEY_ALGO_ECDSA: return 2; case PUBKEY_ALGO_ELGAMAL: return 3; case PUBKEY_ALGO_EDDSA: return 2; + default: return 0; } - return 0; } @@ -1672,8 +1675,8 @@ pubkey_get_nskey (pubkey_algo_t algo) case PUBKEY_ALGO_ECDSA: return 3; case PUBKEY_ALGO_ELGAMAL: return 4; case PUBKEY_ALGO_EDDSA: return 3; + default: return 0; } - return 0; } /* Temporary helper. */ @@ -1691,8 +1694,8 @@ pubkey_get_nsig (pubkey_algo_t algo) case PUBKEY_ALGO_ECDSA: return 2; case PUBKEY_ALGO_ELGAMAL: return 2; case PUBKEY_ALGO_EDDSA: return 2; + default: return 0; } - return 0; } @@ -1711,8 +1714,8 @@ pubkey_get_nenc (pubkey_algo_t algo) case PUBKEY_ALGO_ECDSA: return 0; case PUBKEY_ALGO_ELGAMAL: return 2; case PUBKEY_ALGO_EDDSA: return 0; + default: return 0; } - return 0; }