Changed to work with: http://redbearlab.com/blenano/
Fork of RNG by
Random.cpp@1:0536a4ca8d35, 2013-09-17 (annotated)
- Committer:
- feb11
- Date:
- Tue Sep 17 12:35:12 2013 +0000
- Revision:
- 1:0536a4ca8d35
- Parent:
- 0:299f3795114b
- Child:
- 2:2eb90943983b
improve randomness
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feb11 | 0:299f3795114b | 1 | #include "Random.h" |
feb11 | 0:299f3795114b | 2 | #include "Crypto.h" |
feb11 | 0:299f3795114b | 3 | |
feb11 | 0:299f3795114b | 4 | Random::Random(): |
feb11 | 1:0536a4ca8d35 | 5 | e(p19), |
feb11 | 0:299f3795114b | 6 | f(p20) |
feb11 | 0:299f3795114b | 7 | { |
feb11 | 0:299f3795114b | 8 | AnalogIn a(p15), b(p16), c(p17), d(p18); |
feb11 | 0:299f3795114b | 9 | |
feb11 | 0:299f3795114b | 10 | uint16_t tmp = a.read_u16(); |
feb11 | 0:299f3795114b | 11 | memcpy(pool, &tmp, 2); |
feb11 | 0:299f3795114b | 12 | tmp = b.read_u16(); |
feb11 | 0:299f3795114b | 13 | memcpy(&pool[2], &tmp, 2); |
feb11 | 0:299f3795114b | 14 | tmp = c.read_u16(); |
feb11 | 0:299f3795114b | 15 | memcpy(&pool[4], &tmp, 2); |
feb11 | 0:299f3795114b | 16 | tmp = d.read_u16(); |
feb11 | 0:299f3795114b | 17 | memcpy(&pool[6], &tmp, 2); |
feb11 | 0:299f3795114b | 18 | tmp = a.read_u16(); |
feb11 | 0:299f3795114b | 19 | memcpy(&pool[8], &tmp, 2); |
feb11 | 0:299f3795114b | 20 | tmp = b.read_u16(); |
feb11 | 0:299f3795114b | 21 | memcpy(&pool[10], &tmp, 2); |
feb11 | 0:299f3795114b | 22 | tmp = c.read_u16(); |
feb11 | 0:299f3795114b | 23 | memcpy(&pool[12], &tmp, 2); |
feb11 | 0:299f3795114b | 24 | tmp = d.read_u16(); |
feb11 | 0:299f3795114b | 25 | memcpy(&pool[14], &tmp, 2); |
feb11 | 0:299f3795114b | 26 | } |
feb11 | 0:299f3795114b | 27 | |
feb11 | 0:299f3795114b | 28 | uint8_t Random::getByte() |
feb11 | 0:299f3795114b | 29 | { |
feb11 | 0:299f3795114b | 30 | uint8_t hash[16]; |
feb11 | 0:299f3795114b | 31 | MD5::computeHash(hash, pool, 16); |
feb11 | 0:299f3795114b | 32 | uint8_t tmp = pool[hash[6]%16]; |
feb11 | 0:299f3795114b | 33 | memcpy(pool, hash, 16); |
feb11 | 1:0536a4ca8d35 | 34 | pool[0] ^= (e.read_u16() & 0xff); |
feb11 | 0:299f3795114b | 35 | return tmp ^ (f.read_u16() & 0xff); |
feb11 | 0:299f3795114b | 36 | } |
feb11 | 0:299f3795114b | 37 | |
feb11 | 0:299f3795114b | 38 | void Random::getBytes(uint8_t *out, uint32_t length) |
feb11 | 0:299f3795114b | 39 | { |
feb11 | 0:299f3795114b | 40 | for(int i = 0; i < length; ++i) |
feb11 | 0:299f3795114b | 41 | out[i] = getByte(); |
feb11 | 0:299f3795114b | 42 | } |