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])