diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2022-06-10 20:20:26 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-06-13 21:49:39 +0000 |
commit | b8544e962b698979bb81ef06f4a8e3dcdf654a35 (patch) | |
tree | 4cd83753209875ad3c2dab8d352da335ab5d61c0 /test | |
parent | 606ff61be661ec90e16110360790dd1abb13e205 (diff) | |
download | chrome-ec-b8544e962b698979bb81ef06f4a8e3dcdf654a35.tar.gz |
base64: add implementation for encoding binary into base64
In the Cr50 tree there is no really output devices other than console
where base64 encoding output could be sent, and there is no use for
decoding function yet.
Add the encoding function implementation, make it possible to send
output to console by default and optionally to a passed in function.
Add test to verify proper encoding.
BUG=b:234745585
TEST='make run-base64' succeeds.
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Change-Id: Ibc10681632bc649320d602e319e4f634b4b3a1d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3701141
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/base64.c | 57 | ||||
-rw-r--r-- | test/base64.tasklist | 9 | ||||
-rw-r--r-- | test/build.mk | 2 | ||||
-rw-r--r-- | test/test_config.h | 4 |
4 files changed, 72 insertions, 0 deletions
diff --git a/test/base64.c b/test/base64.c new file mode 100644 index 0000000000..9ded346c5d --- /dev/null +++ b/test/base64.c @@ -0,0 +1,57 @@ +/* Copyright 2022 The Chromium OS Authors. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test Base-64 encoding. + */ + +#include <stdio.h> +#include "base64.h" +#include "common.h" +#include "test_util.h" +#include "util.h" + +static char results[100]; +static size_t index; + +static void printer(char c) +{ + if (index < sizeof(results)) + results[index++] = c; +} + +static int test_encode(void) +{ + const char *data = "\x00\x01\x02\x80\xf0\ffabcdefghij " + "random text to wrap at 64 characters at most"; + const struct { + size_t len; /* Length of input. */ + const char *encoding; /* Expected encoding. */ + } cases[] = { + { 1, "AA==\n" }, + { 2, "AAE=\n" }, + { 3, "AAEC\n" }, + { 4, "AAECgA==\n" }, + { 60, "AAECgPAMZmFiY2RlZmdoaWogcmFuZG9tIHRleHQg" + "dG8gd3JhcCBhdCA2NCBjaGFy\nYWN0ZXJzIGF0IG1v\n" }, + }; + size_t i; + + for (i = 0; i < ARRAY_SIZE(cases); i++) { + index = 0; + base64_encode_to_console(data, cases[i].len, printer); + TEST_ASSERT(index == strlen(cases[i].encoding)); + TEST_ASSERT(memcmp(cases[i].encoding, results, index) == 0); + } + + return EC_SUCCESS; +} + +void run_test(void) +{ + test_reset(); + + RUN_TEST(test_encode); + + test_print_result(); +} diff --git a/test/base64.tasklist b/test/base64.tasklist new file mode 100644 index 0000000000..243a3b683f --- /dev/null +++ b/test/base64.tasklist @@ -0,0 +1,9 @@ +/* Copyright 2022 The Chromium OS Authors. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST /* No test task */ diff --git a/test/build.mk b/test/build.mk index 4072459707..16638acaae 100644 --- a/test/build.mk +++ b/test/build.mk @@ -13,6 +13,7 @@ test-list-host=$(TEST_LIST_HOST) else test-list-host = aes test-list-host += base32 +test-list-host += base64 test-list-host += button test-list-host += cec test-list-host += console_edit @@ -58,6 +59,7 @@ endif aes-y=aes.o base32-y=base32.o +base64-y=base64.o button-y=button.o cec-y=cec.o console_edit-y=console_edit.o diff --git a/test/test_config.h b/test/test_config.h index f7b222302f..493d255626 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -27,6 +27,10 @@ #define CONFIG_BASE32 #endif +#ifdef TEST_BASE64 +#define CONFIG_BASE64 +#endif + #ifdef TEST_FLASH_LOG #define CONFIG_CRC8 #define CONFIG_FLASH_ERASED_VALUE32 (-1U) |