diff options
author | Robert Sloan <varomodt@google.com> | 2017-05-01 07:46:28 -0700 |
---|---|---|
committer | Robert Sloan <varomodt@google.com> | 2017-05-01 07:46:37 -0700 |
commit | 2424d84dd6dbdc0d32a4c80e6810d168f722ce0b (patch) | |
tree | 8727f96cb5c16125aa208b34cea46fe26473dcb1 /src/crypto/cmac | |
parent | 9254e681d446a8105bd66f08bae1252d4d89a139 (diff) | |
download | boringssl-2424d84dd6dbdc0d32a4c80e6810d168f722ce0b.tar.gz |
external/boringssl: Sync to 58e449904e248f34bdfc2be7a609c58bcb0257b7.android-wear-o-preview-4android-wear-o-preview-3android-o-preview-2
This includes the following changes:
https://boringssl.googlesource.com/boringssl/+log/2c1523733a71166943e52da11ac2eae82b0227b8..58e449904e248f34bdfc2be7a609c58bcb0257b7
Test: BoringSSL CTS Presubmits
Change-Id: I1a825139c8c7076d09b8a3acc5f09a547a7cbe0d
Diffstat (limited to 'src/crypto/cmac')
-rw-r--r-- | src/crypto/cmac/CMakeLists.txt | 11 | ||||
-rw-r--r-- | src/crypto/cmac/cmac_test.cc | 88 |
2 files changed, 21 insertions, 78 deletions
diff --git a/src/crypto/cmac/CMakeLists.txt b/src/crypto/cmac/CMakeLists.txt index a346b248..44299033 100644 --- a/src/crypto/cmac/CMakeLists.txt +++ b/src/crypto/cmac/CMakeLists.txt @@ -7,14 +7,3 @@ add_library( cmac.c ) - -add_executable( - cmac_test - - cmac_test.cc - - $<TARGET_OBJECTS:test_support> -) - -target_link_libraries(cmac_test crypto) -add_dependencies(all_tests cmac_test) diff --git a/src/crypto/cmac/cmac_test.cc b/src/crypto/cmac/cmac_test.cc index 7cb1df50..dbd63ead 100644 --- a/src/crypto/cmac/cmac_test.cc +++ b/src/crypto/cmac/cmac_test.cc @@ -16,6 +16,8 @@ #include <algorithm> +#include <gtest/gtest.h> + #include <openssl/cipher.h> #include <openssl/cmac.h> #include <openssl/mem.h> @@ -23,73 +25,38 @@ #include "../test/test_util.h" -static void dump(const uint8_t *got, const uint8_t *want, size_t len) { - hexdump(stderr, "got :", got, len); - hexdump(stderr, "want:", want, len); - fflush(stderr); -} +static void test(const char *name, const uint8_t *key, size_t key_len, + const uint8_t *msg, size_t msg_len, const uint8_t *expected) { + SCOPED_TRACE(name); -static int test(const char *name, const uint8_t *key, size_t key_len, - const uint8_t *msg, size_t msg_len, const uint8_t *expected) { + // Test the single-shot API. uint8_t out[16]; - - if (!AES_CMAC(out, key, key_len, msg, msg_len)) { - fprintf(stderr, "%s: AES_CMAC failed\n", name); - return 0; - } - - if (CRYPTO_memcmp(out, expected, sizeof(out)) != 0) { - fprintf(stderr, "%s: CMAC result differs:\n", name); - dump(out, expected, sizeof(out)); - return 0; - } + ASSERT_TRUE(AES_CMAC(out, key, key_len, msg, msg_len)); + EXPECT_EQ(Bytes(expected, sizeof(out)), Bytes(out)); bssl::UniquePtr<CMAC_CTX> ctx(CMAC_CTX_new()); - if (!ctx || !CMAC_Init(ctx.get(), key, key_len, EVP_aes_128_cbc(), NULL)) { - fprintf(stderr, "%s: CMAC_Init failed.\n", name); - return 0; - } + ASSERT_TRUE(ctx); + ASSERT_TRUE(CMAC_Init(ctx.get(), key, key_len, EVP_aes_128_cbc(), NULL)); for (unsigned chunk_size = 1; chunk_size <= msg_len; chunk_size++) { - if (!CMAC_Reset(ctx.get())) { - fprintf(stderr, "%s/%u: CMAC_Reset failed.\n", name, chunk_size); - return 0; - } + SCOPED_TRACE(chunk_size); + + ASSERT_TRUE(CMAC_Reset(ctx.get())); size_t done = 0; while (done < msg_len) { size_t todo = std::min(msg_len - done, static_cast<size_t>(chunk_size)); - if (!CMAC_Update(ctx.get(), msg + done, todo)) { - fprintf(stderr, "%s/%u: CMAC_Update failed.\n", name, chunk_size); - return 0; - } - + ASSERT_TRUE(CMAC_Update(ctx.get(), msg + done, todo)); done += todo; } size_t out_len; - if (!CMAC_Final(ctx.get(), out, &out_len)) { - fprintf(stderr, "%s/%u: CMAC_Final failed.\n", name, chunk_size); - return 0; - } - - if (out_len != sizeof(out)) { - fprintf(stderr, "%s/%u: incorrect out_len: %u.\n", name, chunk_size, - static_cast<unsigned>(out_len)); - return 0; - } - - if (CRYPTO_memcmp(out, expected, sizeof(out)) != 0) { - fprintf(stderr, "%s/%u: CMAC result differs:\n", name, chunk_size); - dump(out, expected, sizeof(out)); - return 0; - } + ASSERT_TRUE(CMAC_Final(ctx.get(), out, &out_len)); + EXPECT_EQ(Bytes(expected, sizeof(out)), Bytes(out, out_len)); } - - return 1; } -static int rfc_4493_test_vectors(void) { +TEST(CMACTest, RFC4493TestVectors) { static const uint8_t kKey[16] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c, @@ -132,21 +99,8 @@ static int rfc_4493_test_vectors(void) { 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe, }; - if (!test("RFC 4493 #1", kKey, sizeof(kKey), NULL, 0, kOut1) || - !test("RFC 4493 #2", kKey, sizeof(kKey), kMsg2, sizeof(kMsg2), kOut2) || - !test("RFC 4493 #3", kKey, sizeof(kKey), kMsg3, sizeof(kMsg3), kOut3) || - !test("RFC 4493 #4", kKey, sizeof(kKey), kMsg4, sizeof(kMsg4), kOut4)) { - return 0; - } - - return 1; -} - -int main(int argc, char **argv) { - if (!rfc_4493_test_vectors()) { - return 1; - } - - printf("PASS\n"); - return 0; + test("RFC 4493 #1", kKey, sizeof(kKey), NULL, 0, kOut1); + test("RFC 4493 #2", kKey, sizeof(kKey), kMsg2, sizeof(kMsg2), kOut2); + test("RFC 4493 #3", kKey, sizeof(kKey), kMsg3, sizeof(kMsg3), kOut3); + test("RFC 4493 #4", kKey, sizeof(kKey), kMsg4, sizeof(kMsg4), kOut4); } |