Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 38 additions & 15 deletions TESTS/psa/entropy_inject/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#include "psa/lifecycle.h"
#include "entropy.h"
#include "entropy_poll.h"
#include "crypto.h"
#include "psa/crypto.h"

/* MAX value support macro */
#if !defined(MAX)
Expand All @@ -51,31 +51,43 @@ void validate_entropy_seed_injection(int seed_length_a,
psa_status_t status;
uint8_t output[32] = { 0 };
uint8_t zeros[32] = { 0 };
int memcmp_res = 0;
status = mbedtls_psa_inject_entropy(seed, seed_length_a);
TEST_ASSERT(status == expected_status_a);
TEST_ASSERT_EQUAL_INT(expected_status_a, status);

status = mbedtls_psa_inject_entropy(seed, seed_length_b);
TEST_ASSERT(status == expected_status_b);
TEST_ASSERT(psa_crypto_init() == PSA_SUCCESS);
TEST_ASSERT(psa_generate_random(output, sizeof(output)) == PSA_SUCCESS);
TEST_ASSERT(memcmp(output, zeros, sizeof(output)) != 0);
TEST_ASSERT_EQUAL_INT(expected_status_b, status);

status = psa_crypto_init();
TEST_ASSERT_EQUAL_INT(PSA_SUCCESS, status);

status = psa_generate_random(output, sizeof(output));
TEST_ASSERT_EQUAL_INT(PSA_SUCCESS, status);

memcmp_res = memcmp(output, zeros, sizeof(output));
TEST_ASSERT_NOT_EQUAL(0, memcmp_res);
}

void run_entropy_inject_with_crypto_init()
{
psa_its_status_t its_status;
psa_status_t status;
status = psa_crypto_init();
TEST_ASSERT(status == PSA_ERROR_INSUFFICIENT_ENTROPY);
TEST_ASSERT_EQUAL_INT(PSA_ERROR_INSUFFICIENT_ENTROPY, status);

status = mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
TEST_ASSERT(status == PSA_SUCCESS);
TEST_ASSERT_EQUAL_INT(PSA_SUCCESS, status);

status = psa_crypto_init();
TEST_ASSERT(status == PSA_SUCCESS);
TEST_ASSERT_EQUAL_INT(PSA_SUCCESS, status);

status = mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
TEST_ASSERT(status == PSA_ERROR_NOT_PERMITTED);
TEST_ASSERT_EQUAL_INT(PSA_ERROR_NOT_PERMITTED, status);

mbedtls_psa_crypto_free();
/* The seed is written by nv_seed callback functions therefore the injection will fail */
status = mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
TEST_ASSERT(status == PSA_ERROR_NOT_PERMITTED);
TEST_ASSERT_EQUAL_INT(PSA_ERROR_NOT_PERMITTED, status);
}


Expand All @@ -90,6 +102,9 @@ utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
seed[i] = i;
}

psa_status_t status = mbed_psa_reboot_and_request_new_security_state(PSA_LIFECYCLE_ASSEMBLY_AND_TEST);
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);

if (mbedtls_psa_inject_entropy(seed, MBEDTLS_ENTROPY_MAX_SEED_SIZE) == PSA_ERROR_NOT_SUPPORTED) {
skip_tests = true;
}
Expand All @@ -100,25 +115,33 @@ utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
static void injection_small_good()
{
TEST_SKIP_UNLESS(!skip_tests);
validate_entropy_seed_injection(MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_ERROR_NOT_PERMITTED);
validate_entropy_seed_injection(
MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS,
MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_ERROR_NOT_PERMITTED);
}

static void injection_big_good()
{
TEST_SKIP_UNLESS(!skip_tests);
validate_entropy_seed_injection(MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS, MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_ERROR_NOT_PERMITTED);
validate_entropy_seed_injection(
MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS,
MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_ERROR_NOT_PERMITTED);
}

static void injection_too_small()
{
TEST_SKIP_UNLESS(!skip_tests);
validate_entropy_seed_injection((MBEDTLS_ENTROPY_MIN_PLATFORM - 1), PSA_ERROR_INVALID_ARGUMENT, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS);
validate_entropy_seed_injection(
(MBEDTLS_ENTROPY_MIN_PLATFORM - 1), PSA_ERROR_INVALID_ARGUMENT,
MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS);
}

static void injection_too_big()
{
TEST_SKIP_UNLESS(!skip_tests);
validate_entropy_seed_injection((MBEDTLS_ENTROPY_MAX_SEED_SIZE + 1), PSA_ERROR_INVALID_ARGUMENT, MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS);
validate_entropy_seed_injection(
(MBEDTLS_ENTROPY_MAX_SEED_SIZE + 1), PSA_ERROR_INVALID_ARGUMENT,
MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS);
}

static void injection_and_init_deinit()
Expand Down