111 lines
3.4 KiB
C
111 lines
3.4 KiB
C
|
/*
|
||
|
* Copyright (c) 2019-2020, Arm Limited. All rights reserved.
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*
|
||
|
* Change Logs:
|
||
|
* Date Author Notes
|
||
|
* 2020-01-10 Kevin/Karl Add PS demo
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <rtdevice.h>
|
||
|
#include <string.h>
|
||
|
#include "tfm_ns_lock.h"
|
||
|
#include "psa_protected_storage.h"
|
||
|
|
||
|
#define TEST_UID_A 2U
|
||
|
#define ASSET_A "THEQUICKBROWNFOXJUMPSOVERALAZYDOG"
|
||
|
#define ASSET_A_SIZE (sizeof( ASSET_A ) - 1)
|
||
|
#define RESETDATA "THISIS"
|
||
|
#define RESETDATA_SIZE (sizeof( RESETDATA ) - 1)
|
||
|
#define READ_LENGTH (ASSET_A_SIZE > RESETDATA_SIZE ? \
|
||
|
ASSET_A_SIZE : RESETDATA_SIZE)
|
||
|
|
||
|
void protected_storage_demo_thread(void * parameters)
|
||
|
{
|
||
|
psa_ps_status_t status;
|
||
|
const psa_ps_uid_t uid = TEST_UID_A;
|
||
|
const psa_ps_create_flags_t flags = PSA_PS_FLAG_NONE;
|
||
|
uint8_t write_data[] = ASSET_A;
|
||
|
const uint32_t data_length = ASSET_A_SIZE;
|
||
|
uint8_t rewrite_data[] = RESETDATA;
|
||
|
const uint32_t reset_data_length = RESETDATA_SIZE;
|
||
|
uint8_t get_data[READ_LENGTH];
|
||
|
uint32_t counter = 0;
|
||
|
|
||
|
tfm_ns_lock_init();
|
||
|
|
||
|
for ( ; ; )
|
||
|
{
|
||
|
/* Call TF-M protected storage service and set the asset. */
|
||
|
status = psa_ps_set(uid, data_length, write_data, flags);
|
||
|
if (status != PSA_PS_SUCCESS)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Set Round %ld] Fail\r\n", counter);
|
||
|
for( ; ; );
|
||
|
}
|
||
|
|
||
|
rt_kprintf("[Protected Storage Asset A Set Round %ld] Success\r\n", counter);
|
||
|
|
||
|
/* Read the asset. */
|
||
|
status = psa_ps_get(uid, 0, data_length, get_data);
|
||
|
if (status != PSA_PS_SUCCESS)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Fail\r\n", counter);
|
||
|
for ( ; ; );
|
||
|
}
|
||
|
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Success\r\n", counter);
|
||
|
|
||
|
/* Check the read data. */
|
||
|
if (memcmp(write_data, get_data, sizeof(write_data) - 1) != 0)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Get the wrong data\r\n", counter);
|
||
|
for ( ; ; );
|
||
|
}
|
||
|
|
||
|
/* Change the asset. */
|
||
|
status = psa_ps_set(uid, reset_data_length, rewrite_data, flags);
|
||
|
if (status != PSA_PS_SUCCESS)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Reset Round %ld] Fail\r\n", counter);
|
||
|
}
|
||
|
|
||
|
rt_kprintf("[Protected Storage Asset A Reset Round %ld] Success\r\n", counter);
|
||
|
|
||
|
/* Read the asset. */
|
||
|
status = psa_ps_get(uid, 0, reset_data_length, get_data);
|
||
|
if (status != PSA_PS_SUCCESS)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Fail\r\n", counter);
|
||
|
for ( ; ; );
|
||
|
}
|
||
|
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Success\r\n", counter);
|
||
|
|
||
|
/* Check the read data. */
|
||
|
if (memcmp(rewrite_data, get_data, sizeof(rewrite_data) - 1) != 0)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Get Round %ld] Get the wrong data\r\n", counter);
|
||
|
for ( ; ; );
|
||
|
}
|
||
|
|
||
|
/* Remove the asset. */
|
||
|
status = psa_ps_remove(uid);
|
||
|
if (status != PSA_PS_SUCCESS)
|
||
|
{
|
||
|
rt_kprintf("[Protected Storage Asset A Remove Round %ld] Fail\r\n", counter);
|
||
|
for ( ; ; );
|
||
|
}
|
||
|
|
||
|
rt_kprintf("[Protected Storage Asset A Remove Round %ld] Success\r\n\n", counter);
|
||
|
|
||
|
/* Wait for a second. */
|
||
|
rt_thread_mdelay(1000);
|
||
|
counter++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// end file
|