1 /*
2  *  SPDX-License-Identifier: BSD-3-Clause
3  *  SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors
4  *
5  */
6 
7 #include "psa/crypto.h"
8 #include "pico/rand.h"
9 #include <string.h>
10 
11 #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
mbedtls_psa_external_get_random(mbedtls_psa_external_random_context_t * context,uint8_t * output,size_t output_size,size_t * output_length)12 psa_status_t mbedtls_psa_external_get_random(mbedtls_psa_external_random_context_t *context,
13                                              uint8_t *output,
14                                              size_t output_size,
15                                              size_t *output_length)
16 {
17     size_t i = 0;
18     size_t copy_size = 0;
19     size_t remaining_size = 0;
20 
21     uint64_t tmp_trn;
22 
23     (void) context;
24 
25     while (i < output_size) {
26         remaining_size = output_size - i;
27         copy_size = (remaining_size > 8) ? 8 : remaining_size;
28 
29         tmp_trn = get_rand_64();
30         memcpy(output + i, (uint8_t *)(&tmp_trn), copy_size);
31         i += copy_size;
32     }
33 
34     *output_length = output_size;
35 
36     return PSA_SUCCESS;
37 }
38 #endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */
39