From b84b151e7899d629cd8d1c6994a098a944d80916 Mon Sep 17 00:00:00 2001 From: kYc0o Date: Tue, 10 Jan 2017 17:18:26 +0100 Subject: [PATCH] tests/unittests: add tweetnacl unittest --- tests/unittests/tests-tweetnacl/Makefile | 1 + .../tests-tweetnacl/Makefile.include | 2 + .../tests-tweetnacl/tests-tweetnacl.c | 96 +++++++++++++++++++ .../tests-tweetnacl/tests-tweetnacl.h | 51 ++++++++++ 4 files changed, 150 insertions(+) create mode 100644 tests/unittests/tests-tweetnacl/Makefile create mode 100644 tests/unittests/tests-tweetnacl/Makefile.include create mode 100644 tests/unittests/tests-tweetnacl/tests-tweetnacl.c create mode 100644 tests/unittests/tests-tweetnacl/tests-tweetnacl.h diff --git a/tests/unittests/tests-tweetnacl/Makefile b/tests/unittests/tests-tweetnacl/Makefile new file mode 100644 index 0000000000..9c9ae9884a --- /dev/null +++ b/tests/unittests/tests-tweetnacl/Makefile @@ -0,0 +1 @@ +include $(RIOTBASE)/Makefile.base \ No newline at end of file diff --git a/tests/unittests/tests-tweetnacl/Makefile.include b/tests/unittests/tests-tweetnacl/Makefile.include new file mode 100644 index 0000000000..0cfb96f9fa --- /dev/null +++ b/tests/unittests/tests-tweetnacl/Makefile.include @@ -0,0 +1,2 @@ +USEMODULE += random +USEPKG += tweetnacl diff --git a/tests/unittests/tests-tweetnacl/tests-tweetnacl.c b/tests/unittests/tests-tweetnacl/tests-tweetnacl.c new file mode 100644 index 0000000000..086bc0154a --- /dev/null +++ b/tests/unittests/tests-tweetnacl/tests-tweetnacl.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2016 Kaspar Schleiser + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup unittests + * @{ + * + * @file + * @brief tweetnacl NaCl crypto library tests + * + * @author Kaspar Schleiser + * @author Martin Landsmann + * + * @} + */ + +#include +#include + +#include +#include "embUnit.h" +#include "tests-tweetnacl.h" + +static const char message[] = "0123456789abcdef"; +static char r[sizeof(message)]; + +#define MLEN (sizeof(message) + crypto_box_ZEROBYTES) + +static unsigned char alice_pk[crypto_box_PUBLICKEYBYTES]; +static unsigned char alice_sk[crypto_box_SECRETKEYBYTES]; +static unsigned char bob_pk[crypto_box_PUBLICKEYBYTES]; +static unsigned char bob_sk[crypto_box_SECRETKEYBYTES]; +static unsigned char m[MLEN]; +static unsigned char c[MLEN]; +static const unsigned char n[crypto_box_NONCEBYTES]; +static unsigned char result[MLEN]; + +static void setUp(void) +{ + /* Initialize */ + random_init(0); +} + +static void tearDown(void) +{ + /* Finalize */ +} + +static void test_tweetnacl_01(void) +{ + int res; + + /* Creating keypair ALICE... */ + crypto_box_keypair(alice_pk, alice_sk); + + /* Creating keypair BOB... */ + crypto_box_keypair(bob_pk, bob_sk); + + memset(m, 0, crypto_box_ZEROBYTES); + memcpy(m + crypto_box_ZEROBYTES, message, MLEN - crypto_box_ZEROBYTES); + + /* Encrypting using pk_bob... */ + crypto_box(c, m, MLEN, n, bob_pk, alice_sk); + + memset(result, '\0', sizeof(result)); + + /* Decrypting... */ + res = crypto_box_open(result, c, MLEN, n, alice_pk, bob_sk); + + TEST_ASSERT_EQUAL_INT(0, res); + + memset(r, 0, sizeof(r)); + memcpy(r, result + crypto_box_ZEROBYTES, MLEN - crypto_box_ZEROBYTES); + + TEST_ASSERT_EQUAL_STRING("0123456789abcdef", (const char*)r); +} + +Test *tests_tweetnacl_all(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_tweetnacl_01) + }; + + EMB_UNIT_TESTCALLER(tweetnacl_tests, setUp, tearDown, fixtures); + return (Test*)&tweetnacl_tests; +} + +void tests_tweetnacl(void) +{ + TESTS_RUN(tests_tweetnacl_all()); +} diff --git a/tests/unittests/tests-tweetnacl/tests-tweetnacl.h b/tests/unittests/tests-tweetnacl/tests-tweetnacl.h new file mode 100644 index 0000000000..2ae24c9c65 --- /dev/null +++ b/tests/unittests/tests-tweetnacl/tests-tweetnacl.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2016 Martin Landsmann + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @addtogroup unittests + * @{ + * + * @file + * @brief Unittests for the ``tweetnacl`` package + * + * @author Martin Landsmann + */ +#ifndef TESTS_TWEETNACL_H +#define TESTS_TWEETNACL_H + +#include "embUnit/embUnit.h" +#include "random.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief MANDATORY function for collecting random Bytes + * required by the tweetnacl package + */ +extern void randombytes(uint8_t *target, uint64_t n); + +/** +* @brief The entry point of this test suite. +*/ +void tests_tweetnacl(void); + +/** + * @brief Generates tests for tweetnacl + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_tweetnacl_tests(void); + +#ifdef __cplusplus +} +#endif + +#endif /* TESTS_TWEETNACL_H */ +/** @} */