Use your mbed and it\'s noisy analog inputs as a hardware random number generator!

Dependencies:   mbed SHA256

Committer:
Remco
Date:
Mon Jun 20 13:23:03 2011 +0000
Revision:
0:dda0a8c4ac0c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Remco 0:dda0a8c4ac0c 1 #include "mbed.h"
Remco 0:dda0a8c4ac0c 2 #include "EntropyPool.h"
Remco 0:dda0a8c4ac0c 3 #include "PowerControl.h"
Remco 0:dda0a8c4ac0c 4 #include "EthernetPowerControl.h"
Remco 0:dda0a8c4ac0c 5
Remco 0:dda0a8c4ac0c 6 DigitalOut led1(LED1);
Remco 0:dda0a8c4ac0c 7 DigitalOut led2(LED2);
Remco 0:dda0a8c4ac0c 8 DigitalOut led3(LED3);
Remco 0:dda0a8c4ac0c 9 DigitalOut led4(LED4);
Remco 0:dda0a8c4ac0c 10 Serial pc(USBTX, USBRX);
Remco 0:dda0a8c4ac0c 11
Remco 0:dda0a8c4ac0c 12 EntropyPool pool;
Remco 0:dda0a8c4ac0c 13 AnalogIn noise1(p15);
Remco 0:dda0a8c4ac0c 14 AnalogIn noise2(p16);
Remco 0:dda0a8c4ac0c 15 AnalogIn noise3(p17);
Remco 0:dda0a8c4ac0c 16 AnalogIn noise4(p18);
Remco 0:dda0a8c4ac0c 17 AnalogIn noise5(p19);
Remco 0:dda0a8c4ac0c 18 AnalogIn noise6(p20);
Remco 0:dda0a8c4ac0c 19
Remco 0:dda0a8c4ac0c 20 void gatherEntropy()
Remco 0:dda0a8c4ac0c 21 {
Remco 0:dda0a8c4ac0c 22 pool.gatherAnalogNoise(noise1);
Remco 0:dda0a8c4ac0c 23 pool.gatherAnalogNoise(noise2);
Remco 0:dda0a8c4ac0c 24 pool.gatherAnalogNoise(noise3);
Remco 0:dda0a8c4ac0c 25 pool.gatherAnalogNoise(noise4);
Remco 0:dda0a8c4ac0c 26 pool.gatherAnalogNoise(noise5);
Remco 0:dda0a8c4ac0c 27 pool.gatherAnalogNoise(noise6);
Remco 0:dda0a8c4ac0c 28 }
Remco 0:dda0a8c4ac0c 29
Remco 0:dda0a8c4ac0c 30 void write_block()
Remco 0:dda0a8c4ac0c 31 {
Remco 0:dda0a8c4ac0c 32 led1 = 0; led2 = 1;
Remco 0:dda0a8c4ac0c 33 while(pc.readable()) pc.getc();
Remco 0:dda0a8c4ac0c 34 led2 = 0; led3 = 1;
Remco 0:dda0a8c4ac0c 35 char* random = pool.produce(1024);
Remco 0:dda0a8c4ac0c 36 led3 = 0; led4 = 1;
Remco 0:dda0a8c4ac0c 37 for(int i = 0; i < 1024; ++i)
Remco 0:dda0a8c4ac0c 38 pc.putc(random[i]);
Remco 0:dda0a8c4ac0c 39 delete random;
Remco 0:dda0a8c4ac0c 40 led4 = 0; led1 = 1;
Remco 0:dda0a8c4ac0c 41 }
Remco 0:dda0a8c4ac0c 42
Remco 0:dda0a8c4ac0c 43 int main() {
Remco 0:dda0a8c4ac0c 44 pool.gatherer.attach(&gatherEntropy);
Remco 0:dda0a8c4ac0c 45
Remco 0:dda0a8c4ac0c 46 // Disable ethernet to save power
Remco 0:dda0a8c4ac0c 47 PHY_PowerDown();
Remco 0:dda0a8c4ac0c 48
Remco 0:dda0a8c4ac0c 49 // Write at maximum warp
Remco 0:dda0a8c4ac0c 50 pc.baud(115200);
Remco 0:dda0a8c4ac0c 51 pc.attach(&write_block, Serial::RxIrq);
Remco 0:dda0a8c4ac0c 52
Remco 0:dda0a8c4ac0c 53 // Sleep untill called
Remco 0:dda0a8c4ac0c 54 while(1) Sleep();
Remco 0:dda0a8c4ac0c 55 }