Use Dropbear's random source rather than libtommath's platform

This commit is contained in:
Matt Johnston 2020-10-19 22:49:19 +08:00
parent d5cc5eb25c
commit 4c5b8fb6d6
3 changed files with 15 additions and 2 deletions

View File

@ -3,11 +3,18 @@
#include "crypto_desc.h" #include "crypto_desc.h"
#include "ltc_prng.h" #include "ltc_prng.h"
#include "ecc.h" #include "ecc.h"
#include "dbrandom.h"
#if DROPBEAR_LTC_PRNG #if DROPBEAR_LTC_PRNG
int dropbear_ltc_prng = -1; int dropbear_ltc_prng = -1;
#endif #endif
/* Wrapper for libtommath */
static mp_err dropbear_rand_source(void* out, size_t size) {
genrandom((unsigned char*)out, (unsigned int)size);
return MP_OKAY;
}
/* Register the compiled in ciphers. /* Register the compiled in ciphers.
* This should be run before using any of the ciphers/hashes */ * This should be run before using any of the ciphers/hashes */
@ -67,6 +74,8 @@ void crypto_init() {
} }
#endif #endif
mp_rand_source(dropbear_rand_source);
#if DROPBEAR_ECC #if DROPBEAR_ECC
ltc_mp = ltm_desc; ltc_mp = ltm_desc;
dropbear_ecc_fill_dp(); dropbear_ecc_fill_dp();

View File

@ -3,11 +3,13 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */ /* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */ /* SPDX-License-Identifier: Unlicense */
mp_err(*s_mp_rand_source)(void *out, size_t size) = s_mp_rand_platform; /* Dropbear sets this separately, avoid platform code */
mp_err(*s_mp_rand_source)(void *out, size_t size) = NULL;
void mp_rand_source(mp_err(*source)(void *out, size_t size)) void mp_rand_source(mp_err(*source)(void *out, size_t size))
{ {
s_mp_rand_source = (source == NULL) ? s_mp_rand_platform : source; /* Dropbear, don't reset to platform if source==NULL */
s_mp_rand_source = source;
} }
mp_err mp_rand(mp_int *a, int digits) mp_err mp_rand(mp_int *a, int digits)

View File

@ -1316,6 +1316,8 @@
#undef BN_S_MP_KARATSUBA_SQR_C #undef BN_S_MP_KARATSUBA_SQR_C
#undef BN_S_MP_TOOM_MUL_C #undef BN_S_MP_TOOM_MUL_C
#undef BN_S_MP_TOOM_SQR_C #undef BN_S_MP_TOOM_SQR_C
/* Dropbear uses its own random source */
#undef BN_S_MP_RAND_PLATFORM_C
#include "dbmalloc.h" #include "dbmalloc.h"
#define MP_MALLOC m_malloc #define MP_MALLOC m_malloc