File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -66,8 +66,24 @@ bool common_hal_os_urandom(uint8_t *buffer, uint32_t length) {
6666 uint8_t sd_en = 0 ;
6767 (void ) sd_softdevice_is_enabled (& sd_en );
6868
69- if (sd_en )
70- return NRF_SUCCESS == sd_rand_application_vector_get (buffer , length );
69+ if (sd_en ) {
70+ while (length != 0 ) {
71+ uint8_t available = 0 ;
72+ sd_rand_application_bytes_available_get (& available );
73+ if (available ) {
74+ uint32_t request = MIN (length , available );
75+ uint32_t result = sd_rand_application_vector_get (buffer , request );
76+ if (result != NRF_SUCCESS ) {
77+ return false;
78+ }
79+ buffer += request ;
80+ length -= request ;
81+ } else {
82+ RUN_BACKGROUND_TASKS ;
83+ }
84+ }
85+ return true;
86+ }
7187#endif
7288
7389 nrf_rng_event_clear (NRF_RNG , NRF_RNG_EVENT_VALRDY );
Original file line number Diff line number Diff line change @@ -50,6 +50,9 @@ void vstr_init(vstr_t *vstr, size_t alloc) {
5050// Init the vstr so it allocs exactly enough ram to hold a null-terminated
5151// string of the given length, and set the length.
5252void vstr_init_len (vstr_t * vstr , size_t len ) {
53+ if (len == SIZE_MAX ) {
54+ m_malloc_fail (len );
55+ }
5356 vstr_init (vstr , len + 1 );
5457 vstr -> len = len ;
5558}
Original file line number Diff line number Diff line change 3333#include "lib/oofatfs/diskio.h"
3434#include "py/mpstate.h"
3535#include "py/obj.h"
36+ #include "py/objstr.h"
3637#include "py/runtime.h"
3738#include "shared-bindings/os/__init__.h"
3839
@@ -195,11 +196,11 @@ MP_DEFINE_CONST_FUN_OBJ_0(os_sync_obj, os_sync);
195196//|
196197STATIC mp_obj_t os_urandom (mp_obj_t size_in ) {
197198 mp_int_t size = mp_obj_get_int (size_in );
198- uint8_t tmp [ size ] ;
199- if (!common_hal_os_urandom (tmp , size )) {
199+ mp_obj_str_t * result = MP_OBJ_TO_PTR ( mp_obj_new_bytes_of_zeros ( size )) ;
200+ if (!common_hal_os_urandom (( uint8_t * ) result -> data , size )) {
200201 mp_raise_NotImplementedError (translate ("No hardware random available" ));
201202 }
202- return mp_obj_new_bytes ( tmp , size ) ;
203+ return result ;
203204}
204205MP_DEFINE_CONST_FUN_OBJ_1 (os_urandom_obj , os_urandom );
205206
You can’t perform that action at this time.
0 commit comments