diff --git a/tests/sys/psa_crypto/Makefile b/tests/sys/psa_crypto/Makefile new file mode 100644 index 0000000000..4d3a999a0c --- /dev/null +++ b/tests/sys/psa_crypto/Makefile @@ -0,0 +1,14 @@ +include ../Makefile.sys_common + +USEMODULE += embunit + +USEMODULE += psa_crypto + +# FIXME: currently only needed for build to succeed +USEMODULE += psa_cipher +USEMODULE += psa_cipher_aes_128_cbc + +USEMODULE += psa_asymmetric +USEMODULE += psa_asymmetric_ecc_ed25519 + +include $(RIOTBASE)/Makefile.include diff --git a/tests/sys/psa_crypto/main.c b/tests/sys/psa_crypto/main.c new file mode 100644 index 0000000000..dfbe20237d --- /dev/null +++ b/tests/sys/psa_crypto/main.c @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2023 TU Dresden + * + * 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 Test application for the PSA Cryptography API + * + * @author Mikolai Gütschow + * + * @} + */ + +#include +#include "embUnit.h" +#include "psa/crypto.h" + +#define TEST_ASSERT_PSA(func_) TEST_ASSERT_MESSAGE(func_ == PSA_SUCCESS, #func_ " failed"); + +/* + * A second call to psa_crypto_init() should not reset key data. + */ +static void test_init_twice(void) +{ + TEST_ASSERT_PSA(psa_crypto_init()); + + + psa_key_id_t key_id = PSA_KEY_ID_NULL; + psa_key_attributes_t key_attr = psa_key_attributes_init(); + psa_set_key_algorithm(&key_attr, PSA_ALG_PURE_EDDSA); + psa_set_key_usage_flags(&key_attr, PSA_KEY_USAGE_EXPORT); + psa_set_key_bits(&key_attr, 255); + psa_set_key_type(&key_attr, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_TWISTED_EDWARDS)); + TEST_ASSERT_PSA(psa_generate_key(&key_attr, &key_id)); + + uint8_t key_data[PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(psa_get_key_type(&key_attr), psa_get_key_bits(&key_attr))]; + size_t key_data_len; + + TEST_ASSERT_PSA(psa_export_public_key(key_id, key_data, sizeof(key_data), &key_data_len)); + TEST_ASSERT_PSA(psa_crypto_init()); + TEST_ASSERT_PSA(psa_export_public_key(key_id, key_data, sizeof(key_data), &key_data_len)); + +} + +static Test *tests_psa_crypto(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_init_twice), + }; + + EMB_UNIT_TESTCALLER(tests, NULL, NULL, fixtures); + return (Test *)&tests; +} + +int main(void) +{ + puts("psa_crypto test"); + TESTS_START(); + TESTS_RUN(tests_psa_crypto()); + TESTS_END(); + + return 0; +} diff --git a/tests/sys/psa_crypto/tests/01-run.py b/tests/sys/psa_crypto/tests/01-run.py new file mode 100755 index 0000000000..dc56107fc3 --- /dev/null +++ b/tests/sys/psa_crypto/tests/01-run.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2023 TU Dresden +# +# 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. + +import sys +from testrunner import run_check_unittests + + +if __name__ == "__main__": + sys.exit(run_check_unittests())