aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2022-01-02 11:32:32 -0500
committerRob Austein <sra@hactrn.net>2022-01-02 11:32:32 -0500
commitf8c3655b7af461555b89f7394c396b7ed7a267ee (patch)
treebacfaa3cc995eb42751750f07a896e37020a3b69
parent12f20b6cc82c45943880e35e9ac2a3709271f189 (diff)
New release -> new compiler -> new error
gcc 10 whines about forward references to enums. gcc 10 correctly dings zero length array variables as illegal.
-rw-r--r--hal.h44
-rw-r--r--tests/test-rpc_hash.c26
2 files changed, 37 insertions, 33 deletions
diff --git a/hal.h b/hal.h
index 7adfd39..84d9c0c 100644
--- a/hal.h
+++ b/hal.h
@@ -704,6 +704,30 @@ extern hal_error_t hal_ecdsa_verify(hal_core_t *core,
const uint8_t * const signature, const size_t signature_len);
/*
+ * Enums for hash-based signatures, to avoid forward reference problem.
+ * Rest of hash-based signature declarations should be here too, but
+ * at the moment we're trying for minimal change needed to deal with
+ * a new pedantic warning.
+ */
+
+typedef enum hal_lmots_algorithm_type {
+ HAL_LMOTS_RESERVED = 0,
+ HAL_LMOTS_SHA256_N32_W1 = 1,
+ HAL_LMOTS_SHA256_N32_W2 = 2,
+ HAL_LMOTS_SHA256_N32_W4 = 3,
+ HAL_LMOTS_SHA256_N32_W8 = 4
+} hal_lmots_algorithm_t;
+
+typedef enum hal_lms_algorithm_type {
+ HAL_LMS_RESERVED = 0,
+ HAL_LMS_SHA256_N32_H5 = 5,
+ HAL_LMS_SHA256_N32_H10 = 6,
+ HAL_LMS_SHA256_N32_H15 = 7,
+ HAL_LMS_SHA256_N32_H20 = 8,
+ HAL_LMS_SHA256_N32_H25 = 9
+} hal_lms_algorithm_t;
+
+/*
* UUID stuff. All UUIDs we use (or are likely to use) are type 4 "random" UUIDs
*/
@@ -899,9 +923,6 @@ extern hal_error_t hal_rpc_pkey_generate_ec(const hal_client_handle_t client,
const hal_curve_name_t curve,
const hal_key_flags_t flags);
-typedef enum hal_lmots_algorithm_type hal_lmots_algorithm_t;
-typedef enum hal_lms_algorithm_type hal_lms_algorithm_t;
-
extern hal_error_t hal_rpc_pkey_generate_hashsig(const hal_client_handle_t client,
const hal_session_handle_t session,
hal_pkey_handle_t *pkey,
@@ -995,23 +1016,6 @@ extern hal_error_t hal_rpc_server_dispatch(const uint8_t * const ibuf, const siz
* references to hal_key_flags_t and hal_uuid_t.
*/
-enum hal_lmots_algorithm_type {
- HAL_LMOTS_RESERVED = 0,
- HAL_LMOTS_SHA256_N32_W1 = 1,
- HAL_LMOTS_SHA256_N32_W2 = 2,
- HAL_LMOTS_SHA256_N32_W4 = 3,
- HAL_LMOTS_SHA256_N32_W8 = 4
-};
-
-enum hal_lms_algorithm_type {
- HAL_LMS_RESERVED = 0,
- HAL_LMS_SHA256_N32_H5 = 5,
- HAL_LMS_SHA256_N32_H10 = 6,
- HAL_LMS_SHA256_N32_H15 = 7,
- HAL_LMS_SHA256_N32_H20 = 8,
- HAL_LMS_SHA256_N32_H25 = 9
-};
-
typedef struct hal_hashsig_key hal_hashsig_key_t;
extern const size_t hal_hashsig_key_t_size;
diff --git a/tests/test-rpc_hash.c b/tests/test-rpc_hash.c
index 51fa2be..047d8c3 100644
--- a/tests/test-rpc_hash.c
+++ b/tests/test-rpc_hash.c
@@ -45,7 +45,8 @@
/* Usual NIST sample messages. */
/* "" */
-static const uint8_t nist_512_empty[] = { /* 0 bytes */
+static const uint8_t nist_empty[] = { /* 0 bytes */
+ 0x00 /* except that's not allowed in ISO C */
};
static const uint8_t sha1_empty_digest[] = { /* 20 bytes */
@@ -95,10 +96,6 @@ static const uint8_t sha256_double_digest[] = { /* 32 bytes */
0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1
};
-/* "" */
-static const uint8_t nist_1024_empty[] = { /* 0 bytes */
-};
-
static const uint8_t sha384_empty_digest[] = { /* 48 bytes */
0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38, 0x4c, 0xd9, 0x32, 0x7e,
0xb1, 0xb1, 0xe3, 0x6a, 0x21, 0xfd, 0xb7, 0x11, 0x14, 0xbe, 0x07, 0x43,
@@ -770,17 +767,20 @@ static int _test_hmac(const hal_digest_algorithm_t alg,
#define test_hmac(_alg_, _key_, _data_, _result_, _label_) \
_test_hmac(_alg_, _key_, sizeof(_key_), _data_, sizeof(_data_), _result_, sizeof(_result_), _label_)
+#define test_hash_empty(_alg_, _result_, _label_) \
+ _test_hash(_alg_, nist_empty, 0, _result_, sizeof(_result_), _label_)
+
int main (int argc, char *argv[])
{
int ok = 1;
ok &= hal_rpc_client_init();
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA1, nist_512_empty, sha1_empty_digest, "SHA-1 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA1, sha1_empty_digest, "SHA-1 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA1, nist_512_single, sha1_single_digest, "SHA-1 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA1, nist_512_double, sha1_double_digest, "SHA-1 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA256, nist_512_empty, sha256_empty_digest, "SHA-256 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA256, sha256_empty_digest, "SHA-256 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA256, nist_512_single, sha256_single_digest, "SHA-256 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA256, nist_512_double, sha256_double_digest, "SHA-256 double block");
@@ -790,27 +790,27 @@ int main (int argc, char *argv[])
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA512_256, nist_1024_single, sha512_256_single_digest, "SHA-512/256 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA512_256, nist_1024_double, sha512_256_double_digest, "SHA-512/256 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA384, nist_1024_empty, sha384_empty_digest, "SHA-384 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA384, sha384_empty_digest, "SHA-384 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA384, nist_1024_single, sha384_single_digest, "SHA-384 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA384, nist_1024_double, sha384_double_digest, "SHA-384 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA512, nist_1024_empty, sha512_empty_digest, "SHA-512 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA512, sha512_empty_digest, "SHA-512 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA512, nist_1024_single, sha512_single_digest, "SHA-512 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA512, nist_1024_double, sha512_double_digest, "SHA-512 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_224, nist_1024_empty, sha3_224_empty_digest, "SHA3-224 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA3_224, sha3_224_empty_digest, "SHA3-224 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_224, nist_1024_single, sha3_224_single_digest, "SHA3-224 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_224, nist_1024_double, sha3_224_double_digest, "SHA3-224 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_256, nist_1024_empty, sha3_256_empty_digest, "SHA3-256 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA3_256, sha3_256_empty_digest, "SHA3-256 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_256, nist_1024_single, sha3_256_single_digest, "SHA3-256 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_256, nist_1024_double, sha3_256_double_digest, "SHA3-256 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_384, nist_1024_empty, sha3_384_empty_digest, "SHA3-384 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA3_384, sha3_384_empty_digest, "SHA3-384 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_384, nist_1024_single, sha3_384_single_digest, "SHA3-384 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_384, nist_1024_double, sha3_384_double_digest, "SHA3-384 double block");
- ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_512, nist_1024_empty, sha3_512_empty_digest, "SHA3-512 empty block");
+ ok &= test_hash_empty(HAL_DIGEST_ALGORITHM_SHA3_512, sha3_512_empty_digest, "SHA3-512 empty block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_512, nist_1024_single, sha3_512_single_digest, "SHA3-512 single block");
ok &= test_hash(HAL_DIGEST_ALGORITHM_SHA3_512, nist_1024_double, sha3_512_double_digest, "SHA3-512 double block");