22 static int RNG(uint8_t *p_dest, unsigned p_size)
24 // Use the least-significant bits from the ADC for an unconnected pin (or connected to a source of random noise)
25 // This can take a long time to generate random data if the result of analogRead(0) doesn't change very frequently.
28 for(unsigned i=0; i<8; ++i)
30 int l_init = analogRead(0);
32 while(analogRead(0) == l_init)
39 l_val = (l_val << 1) | (l_init & 0x01);
43 l_val = (l_val << 1) | (l_count & 0x01);
51 // NOTE: it would be a good idea to hash the resulting random data using SHA-256 or similar.
61 Serial.print("Testing ecc\n");
67 uint8_t l_private1[uECC_BYTES];
68 uint8_t l_private2[uECC_BYTES];
70 uint8_t l_public1[uECC_BYTES * 2];
71 uint8_t l_public2[uECC_BYTES * 2];
73 uint8_t l_secret1[uECC_BYTES];
74 uint8_t l_secret2[uECC_BYTES];
76 unsigned long a = millis();
77 uECC_make_key(l_public1, l_private1);
78 unsigned long b = millis();
80 Serial.print("Made key 1 in "); Serial.println(b-a);
82 uECC_make_key(l_public2, l_private2);
84 Serial.print("Made key 2 in "); Serial.println(b-a);
87 int r = uECC_shared_secret(l_public2, l_private1, l_secret1);
89 Serial.print("Shared secret 1 in "); Serial.println(b-a);
92 Serial.print("shared_secret() failed (1)\n");
97 r = uECC_shared_secret(l_public1, l_private2, l_secret2);
99 Serial.print("Shared secret 2 in "); Serial.println(b-a);
102 Serial.print("shared_secret() failed (2)\n");
106 if(memcmp(l_secret1, l_secret2, sizeof(l_secret1)) != 0)
108 Serial.print("Shared secrets are not identical!\n");
112 Serial.print("Shared secrets are identical\n");