1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/tests/pkg_cifra/main.c

119 lines
2.6 KiB
C

/*
* Copyright (C) 2019 Koen Zandberg
*
* 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 tests
* @{
*
* @file
* @brief Tests cifra package
*
* @author Koen Zandberg <koen@bergzand.net>
*
* @}
*/
#include <string.h>
#include "embUnit.h"
#include "random.h"
#include "aes.h"
#include "modes.h"
#define SECRET_KEY_LEN 32
static uint8_t message[] = "0123456789abcdef";
static uint8_t nonce[] = "0123456789abcdef";
static uint8_t cipher[sizeof(message)];
static uint8_t tag[16];
static uint8_t decrypted[sizeof(message)];
static uint8_t key[SECRET_KEY_LEN];
static void setUp(void)
{
/* Initialize */
random_init(0);
random_bytes(key, SECRET_KEY_LEN);
}
static void test_cifra_gcm(void)
{
cf_aes_context aes;
cf_aes_init(&aes, key, SECRET_KEY_LEN);
cf_gcm_encrypt(&cf_aes, &aes,
message, sizeof(message),
NULL, 0,
nonce, sizeof(nonce),
cipher,
tag, 16);
int res = cf_gcm_decrypt(&cf_aes, &aes,
cipher, sizeof(message),
NULL, 0,
nonce, sizeof(nonce),
tag, 16,
decrypted);
TEST_ASSERT(res == 0);
TEST_ASSERT_EQUAL_STRING((char *)message, (char *)decrypted);
/* Flip bit in the ciphertext */
cipher[0] ^= 0x01;
res = cf_gcm_decrypt(&cf_aes, &aes,
cipher, sizeof(message),
NULL, 0,
nonce, sizeof(nonce),
tag, 16,
decrypted);
TEST_ASSERT(res == 1);
/* Flip bit in the ciphertext back */
cipher[0] ^= 0x01;
/* Flip bit in the key */
key[0] ^= 0x01;
/* Reimport the key */
cf_aes_init(&aes, key, SECRET_KEY_LEN);
res = cf_gcm_decrypt(&cf_aes, &aes,
cipher, sizeof(message),
NULL, 0,
nonce, sizeof(nonce),
tag, 16,
decrypted);
TEST_ASSERT(res == 1);
}
Test *tests_cifra(void)
{
EMB_UNIT_TESTFIXTURES(fixtures) {
new_TestFixture(test_cifra_gcm),
};
EMB_UNIT_TESTCALLER(cifra_tests, setUp, NULL, fixtures);
return (Test*)&cifra_tests;
}
int main(void)
{
TESTS_START();
TESTS_RUN(tests_cifra());
TESTS_END();
return 0;
}