From 4bbbad3d793a2fd18e9a04c03ca720ef99faf2f1 Mon Sep 17 00:00:00 2001 From: Qinghao Shi Date: Fri, 27 Sep 2019 15:58:28 +0100 Subject: [PATCH] FASTMODEL: add simulated TRNG implementation to fastmodel --- .../TARGET_ARM_FM/TARGET_FVP_MPS2/objects.h | 4 ++ .../TARGET_ARM_FM/TARGET_FVP_MPS2/trng_api.c | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 targets/TARGET_ARM_FM/TARGET_FVP_MPS2/trng_api.c diff --git a/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/objects.h b/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/objects.h index c85d29317b..ef09fd7f0b 100644 --- a/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/objects.h +++ b/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/objects.h @@ -78,6 +78,10 @@ struct flash_s { uint8_t not_used; }; +struct trng_s { + uint8_t not_used; +}; + #include "gpio_object.h" #ifdef __cplusplus diff --git a/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/trng_api.c b/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/trng_api.c new file mode 100644 index 0000000000..b31a26d242 --- /dev/null +++ b/targets/TARGET_ARM_FM/TARGET_FVP_MPS2/trng_api.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017-2019 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing software + * distributed under the License is distributed on an "AS IS" BASIS + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "trng_api.h" +#include "device.h" +#include + + + +void trng_init(trng_t *obj) +{ + srand(0); + (void)obj; +} + + +void trng_free(trng_t *obj) +{ + (void)obj; +} + +/** Get random data from TRNG peripheral + * + * @param obj The TRNG object + * @param output The pointer to an output array + * @param length The size of output data, to avoid buffer overwrite + * @param output_length The length of generated data + * @return 0 success, -1 fail + */ +int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) +{ + (void)obj; + (void)output; + + for (int i = 0; i < length; ++i) { + output[i] = rand() % 256; + } + *output_length = length; + + return 0; + +}