diff --git a/tests/unittests/tests-tweetnacl/tests-tweetnacl.c b/tests/unittests/tests-tweetnacl/tests-tweetnacl.c index 086bc0154ae049c046a5acb5ced72ffbeda118e5..b10ddd899cbb043f1caab8a6e1a6e78b25860fed 100644 --- a/tests/unittests/tests-tweetnacl/tests-tweetnacl.c +++ b/tests/unittests/tests-tweetnacl/tests-tweetnacl.c @@ -30,6 +30,7 @@ static const char message[] = "0123456789abcdef"; static char r[sizeof(message)]; #define MLEN (sizeof(message) + crypto_box_ZEROBYTES) +#define SMLEN (sizeof(message) + crypto_sign_BYTES) static unsigned char alice_pk[crypto_box_PUBLICKEYBYTES]; static unsigned char alice_sk[crypto_box_SECRETKEYBYTES]; @@ -40,6 +41,11 @@ static unsigned char c[MLEN]; static const unsigned char n[crypto_box_NONCEBYTES]; static unsigned char result[MLEN]; +static unsigned char sign_sk[crypto_sign_SECRETKEYBYTES]; +static unsigned char sign_pk[crypto_sign_PUBLICKEYBYTES]; +static unsigned char verify_result[SMLEN]; +static unsigned char sm[SMLEN]; + static void setUp(void) { /* Initialize */ @@ -80,10 +86,54 @@ static void test_tweetnacl_01(void) TEST_ASSERT_EQUAL_STRING("0123456789abcdef", (const char*)r); } +static void test_tweetnacl_02(void) +{ + int res; + + unsigned long long int smlen; + unsigned long long int verify_result_len; + + memset(sm, '\0', SMLEN); + + /* Creating keypair ... */ + crypto_sign_keypair(sign_pk, sign_sk); + + /* Sign */ + crypto_sign(sm, &smlen, (const unsigned char *)message, sizeof(message), sign_sk); + + /* Verifying... */ + res = crypto_sign_open(verify_result, &verify_result_len, sm, smlen, sign_pk); + + TEST_ASSERT_EQUAL_INT(SMLEN, smlen); + TEST_ASSERT_EQUAL_INT(0, res); + + memset(r, 0, sizeof(r)); + memcpy(r, verify_result + crypto_sign_BYTES, SMLEN - crypto_sign_BYTES); + + TEST_ASSERT_EQUAL_STRING("0123456789abcdef", (const char*)r); +} + +static void test_tweetnacl_03(void) +{ + int res; + + unsigned long long int verify_result_len; + + /* changing message at random position (10) */ + sm[crypto_sign_BYTES + 10] = 'A'; + + /* Verifying... */ + res = crypto_sign_open(verify_result, &verify_result_len, sm, SMLEN, sign_pk); + + TEST_ASSERT_EQUAL_INT(-1, res); +} + Test *tests_tweetnacl_all(void) { EMB_UNIT_TESTFIXTURES(fixtures) { - new_TestFixture(test_tweetnacl_01) + new_TestFixture(test_tweetnacl_01), + new_TestFixture(test_tweetnacl_02), + new_TestFixture(test_tweetnacl_03) }; EMB_UNIT_TESTCALLER(tweetnacl_tests, setUp, tearDown, fixtures);