Files
mesh-network-project/relay/crypt_random.py

39 lines
765 B
Python

from machine import ADC
import utime
import uhashlib
adc = ADC(26)
def get_entropy(samples: int = 512):
entropy = bytearray()
for _ in range(samples):
value = adc.read_u16()
mixed = (
value ^
(value >> 2) ^
(value >> 5) ^
utime.ticks_cpu()
) & 0xFF
entropy.append(mixed)
utime.sleep_us(5)
return entropy
def secure_random(num_bytes: int = 32):
entropy = get_entropy()
digest = uhashlib.sha256(entropy).digest()
output = bytearray()
while len(output) < num_bytes:
digest = uhashlib.sha256(digest).digest()
output.extend(digest)
return bytes(output[:num_bytes])