From e8261a010004b6ab86a7180b7ca69bf11c1baf58 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 26 Mar 2015 01:19:49 -0400 Subject: [PATCH] Convert base64_test to C++. Not actually much of a change, but consistency. Change-Id: If2ef7a8b698a229f5c494822d870767e1a61476e Reviewed-on: https://boringssl-review.googlesource.com/4127 Reviewed-by: Adam Langley --- crypto/base64/CMakeLists.txt | 2 +- .../base64/{base64_test.c => base64_test.cc} | 71 +++++++++---------- 2 files changed, 34 insertions(+), 39 deletions(-) rename crypto/base64/{base64_test.c => base64_test.cc} (72%) diff --git a/crypto/base64/CMakeLists.txt b/crypto/base64/CMakeLists.txt index 2b4f081c..8bc531a5 100644 --- a/crypto/base64/CMakeLists.txt +++ b/crypto/base64/CMakeLists.txt @@ -11,7 +11,7 @@ add_library( add_executable( base64_test - base64_test.c + base64_test.cc ) target_link_libraries(base64_test crypto) diff --git a/crypto/base64/base64_test.c b/crypto/base64/base64_test.cc similarity index 72% rename from crypto/base64/base64_test.c rename to crypto/base64/base64_test.cc index 411323f7..fde0b469 100644 --- a/crypto/base64/base64_test.c +++ b/crypto/base64/base64_test.cc @@ -20,13 +20,13 @@ #include -typedef struct { +struct TestVector { const char *decoded; const char *encoded; -} TEST_VECTOR; +}; -/* Test vectors from RFC 4648. */ -static const TEST_VECTOR test_vectors[] = { +// Test vectors from RFC 4648. +static const TestVector kTestVectors[] = { { "", "" }, { "f" , "Zg==" }, { "fo", "Zm8=" }, @@ -36,95 +36,90 @@ static const TEST_VECTOR test_vectors[] = { { "foobar", "Zm9vYmFy" }, }; -static const size_t kNumTests = sizeof(test_vectors) / sizeof(test_vectors[0]); - -static int test_encode(void) { - uint8_t out[9]; - size_t i, len; +static const size_t kNumTests = sizeof(kTestVectors) / sizeof(kTestVectors[0]); - for (i = 0; i < kNumTests; i++) { - const TEST_VECTOR *t = &test_vectors[i]; - len = EVP_EncodeBlock(out, (const uint8_t*)t->decoded, strlen(t->decoded)); +static bool TestEncode() { + for (size_t i = 0; i < kNumTests; i++) { + const TestVector *t = &kTestVectors[i]; + uint8_t out[9]; + size_t len = EVP_EncodeBlock(out, (const uint8_t*)t->decoded, + strlen(t->decoded)); if (len != strlen(t->encoded) || memcmp(out, t->encoded, len) != 0) { fprintf(stderr, "encode(\"%s\") = \"%.*s\", want \"%s\"\n", t->decoded, (int)len, (const char*)out, t->encoded); - return 0; + return false; } } - return 1; + return true; } -static int test_decode(void) { +static bool TestDecode() { uint8_t out[6]; - size_t i, len; - int ret; + size_t len; - for (i = 0; i < kNumTests; i++) { - /* Test the normal API. */ - const TEST_VECTOR *t = &test_vectors[i]; + for (size_t i = 0; i < kNumTests; i++) { + // Test the normal API. + const TestVector *t = &kTestVectors[i]; size_t expected_len = strlen(t->decoded); if (!EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)t->encoded, strlen(t->encoded))) { fprintf(stderr, "decode(\"%s\") failed\n", t->encoded); - return 0; + return false; } if (len != strlen(t->decoded) || memcmp(out, t->decoded, len) != 0) { fprintf(stderr, "decode(\"%s\") = \"%.*s\", want \"%s\"\n", t->encoded, (int)len, (const char*)out, t->decoded); - return 0; + return false; } - /* Test that the padding behavior of the deprecated API is - * preserved. */ - ret = EVP_DecodeBlock(out, (const uint8_t*)t->encoded, strlen(t->encoded)); + // Test that the padding behavior of the deprecated API is preserved. + int ret = EVP_DecodeBlock(out, (const uint8_t*)t->encoded, + strlen(t->encoded)); if (ret < 0) { fprintf(stderr, "decode(\"%s\") failed\n", t->encoded); - return 0; + return false; } if (ret % 3 != 0) { fprintf(stderr, "EVP_DecodeBlock did not ignore padding\n"); - return 0; + return false; } if (expected_len % 3 != 0) { ret -= 3 - (expected_len % 3); } - if (ret != strlen(t->decoded) || + if (static_cast(ret) != strlen(t->decoded) || memcmp(out, t->decoded, ret) != 0) { fprintf(stderr, "decode(\"%s\") = \"%.*s\", want \"%s\"\n", t->encoded, ret, (const char*)out, t->decoded); - return 0; + return false; } } if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"a!bc", 4)) { fprintf(stderr, "Failed to reject invalid characters in the middle.\n"); - return 0; + return false; } if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"a=bc", 4)) { fprintf(stderr, "Failed to reject invalid characters in the middle.\n"); - return 0; + return false; } if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"abc", 4)) { fprintf(stderr, "Failed to reject invalid input length.\n"); - return 0; + return false; } - return 1; + return true; } int main(void) { CRYPTO_library_init(); ERR_load_crypto_strings(); - if (!test_encode()) { - return 1; - } - - if (!test_decode()) { + if (!TestEncode() || + !TestDecode()) { return 1; }