1*c84eee63SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause 2*c84eee63SJerome Forissier /* 3*c84eee63SJerome Forissier * Copyright (c) 2021 Huawei Technologies Co., Ltd 4*c84eee63SJerome Forissier */ 5*c84eee63SJerome Forissier 6*c84eee63SJerome Forissier #include <compiler.h> 7*c84eee63SJerome Forissier #include <crypto/crypto.h> 8*c84eee63SJerome Forissier #include <mbedtls/bignum.h> 9*c84eee63SJerome Forissier #include <stddef.h> 10*c84eee63SJerome Forissier #include <tee_api_defines.h> 11*c84eee63SJerome Forissier #include <tee_api_types.h> 12*c84eee63SJerome Forissier 13*c84eee63SJerome Forissier #include "mbed_helpers.h" 14*c84eee63SJerome Forissier 15*c84eee63SJerome Forissier /* Generate random number 1 <= n < max */ mbed_gen_random_upto(mbedtls_mpi * n,mbedtls_mpi * max)16*c84eee63SJerome ForissierTEE_Result mbed_gen_random_upto(mbedtls_mpi *n, mbedtls_mpi *max) 17*c84eee63SJerome Forissier { 18*c84eee63SJerome Forissier size_t sz = mbedtls_mpi_size(max); 19*c84eee63SJerome Forissier bool found = false; 20*c84eee63SJerome Forissier int mres = 0; 21*c84eee63SJerome Forissier 22*c84eee63SJerome Forissier do { 23*c84eee63SJerome Forissier mres = mbedtls_mpi_fill_random(n, sz, mbd_rand, NULL); 24*c84eee63SJerome Forissier if (mres) 25*c84eee63SJerome Forissier return TEE_ERROR_BAD_STATE; 26*c84eee63SJerome Forissier if (mbedtls_mpi_bitlen(n) != 0 && 27*c84eee63SJerome Forissier mbedtls_mpi_cmp_mpi(n, max) == -1) 28*c84eee63SJerome Forissier found = true; 29*c84eee63SJerome Forissier } while (!found); 30*c84eee63SJerome Forissier 31*c84eee63SJerome Forissier return TEE_SUCCESS; 32*c84eee63SJerome Forissier } 33*c84eee63SJerome Forissier 34