1 /* Copyright 2014, Kenneth MacKay. Licensed under the BSD 2-clause license. */ 2 3 #include "uECC.h" 4 5 #include <stdio.h> 6 #include <string.h> 7 8 void vli_print(uint8_t *vli, unsigned int size) { 9 while (size) { 10 printf("%02X ", (unsigned)vli[size - 1]); 11 --size; 12 } 13 } 14 15 int main() { 16 int i; 17 int success; 18 uint8_t private[uECC_BYTES]; 19 uint8_t public[uECC_BYTES * 2]; 20 uint8_t public_computed[uECC_BYTES * 2]; 21 22 printf("Testing 256 random private key pairs\n"); 23 for (i = 0; i < 256; ++i) { 24 printf("."); 25 #if !LPC11XX 26 fflush(stdout); 27 #endif 28 29 success = uECC_make_key(public, private); 30 if (!success) { 31 printf("uECC_make_key() failed\n"); 32 return 1; 33 } 34 35 success = uECC_compute_public_key(private, public_computed); 36 if (!success) { 37 printf("uECC_compute_public_key() failed\n"); 38 } 39 40 if (memcmp(public, public_computed, sizeof(public)) != 0) { 41 printf("Computed and provided public keys are not identical!\n"); 42 printf("Computed public key = "); 43 vli_print(public_computed, uECC_BYTES); 44 printf("\n"); 45 printf("Provided public key = "); 46 vli_print(public, uECC_BYTES); 47 printf("\n"); 48 printf("Private key = "); 49 vli_print(private, uECC_BYTES); 50 printf("\n"); 51 } 52 } 53 54 printf("\n"); 55 printf("Testing private key = 0\n"); 56 57 memset(private, 0, uECC_BYTES); 58 success = uECC_compute_public_key(private, public_computed); 59 if (success) { 60 printf("uECC_compute_public_key() should have failed\n"); 61 } 62 63 return 0; 64 } 65