Remco Bloemen
/
EntropySource
Use your mbed and it\'s noisy analog inputs as a hardware random number generator!
main.cpp@0:dda0a8c4ac0c, 2011-06-20 (annotated)
- Committer:
- Remco
- Date:
- Mon Jun 20 13:23:03 2011 +0000
- Revision:
- 0:dda0a8c4ac0c
Who changed what in which revision?
User | Revision | Line number | New 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 | } |