123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include <stdint.h>
- #include <string.h>
- #include <stdio.h>
- #include <openssl/hmac.h>
- #include "2sha.h"
- #include "2hmac.h"
- #include "test_common.h"
- const char short_key[] = "key";
- const char message[] = "The quick brown fox jumps over the lazy dog";
- /* This is supposed to be longer than the supported block sizes */
- const char long_key[] =
- "loooooooooooooooooooooooooooooooooooooooooooonooooooooooooooooooo"
- "ooooooooooooooooooooooooooooooooooooooooooooonooooooooooooog key";
- static void test_hmac_by_openssl(enum vb2_hash_algorithm alg,
- const void *key, uint32_t key_size,
- const void *msg, uint32_t msg_size)
- {
- uint8_t mac[VB2_MAX_DIGEST_SIZE];
- uint32_t mac_size = sizeof(mac);
- uint8_t md[VB2_MAX_DIGEST_SIZE];
- uint32_t md_size = sizeof(md);
- char test_name[256];
- switch (alg) {
- case VB2_HASH_SHA1:
- HMAC(EVP_sha1(), key, key_size, msg, msg_size, md, &md_size);
- break;
- case VB2_HASH_SHA256:
- HMAC(EVP_sha256(), key, key_size, msg, msg_size, md, &md_size);
- break;
- case VB2_HASH_SHA512:
- HMAC(EVP_sha512(), key, key_size, msg, msg_size, md, &md_size);
- break;
- default:
- TEST_SUCC(-1, "Unsupported hash algorithm");
- }
- sprintf(test_name, "%s: HMAC-%s (key_size=%d)",
- __func__, vb2_get_hash_algorithm_name(alg), key_size);
- TEST_SUCC(hmac(alg, key, key_size, msg, msg_size, mac, mac_size),
- test_name);
- TEST_SUCC(memcmp(mac, md, md_size), "HMAC digests match");
- }
- static void test_hmac_error(void)
- {
- uint8_t mac[VB2_MAX_DIGEST_SIZE];
- enum vb2_hash_algorithm alg;
- alg = VB2_HASH_SHA1;
- TEST_TRUE(hmac(alg, NULL, 0,
- message, strlen(message), mac, sizeof(mac)),
- "key = NULL");
- TEST_TRUE(hmac(alg, short_key, strlen(short_key),
- NULL, 0, mac, sizeof(mac)),
- "msg = NULL");
- TEST_TRUE(hmac(alg, short_key, strlen(short_key),
- message, strlen(message), NULL, 0),
- "mac = NULL");
- TEST_TRUE(hmac(alg, short_key, strlen(short_key),
- message, strlen(message), mac, 0),
- "Buffer too small");
- alg = -1;
- TEST_TRUE(hmac(alg, short_key, strlen(short_key),
- message, strlen(message), mac, sizeof(mac)),
- "Invalid algorithm");
- }
- static void test_hmac(void)
- {
- int alg;
- for (alg = 1; alg < VB2_HASH_ALG_COUNT; alg++) {
- /* Try short key */
- test_hmac_by_openssl(alg, short_key, strlen(short_key),
- message, strlen(message));
- /* Try key longer than a block size */
- test_hmac_by_openssl(alg, long_key, strlen(long_key),
- message, strlen(message));
- /* Try empty key and message */
- test_hmac_by_openssl(alg, "", 0, "", 0);
- }
- }
- int main(void)
- {
- test_hmac();
- test_hmac_error();
- return gTestSuccess ? 0 : 255;
- }
|