blob: 9e88cde098071fc5ca627f7a34ca8c05372cc0d7 [file] [log] [blame] [edit]
/* Copyright 2013, Kenneth MacKay. Licensed under the BSD 2-clause license. */
#if !TARGET_LPC11XX
#include "ecc.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
extern void EccPoint_mult(EccPoint *p_result, EccPoint *p_point, uint32_t *p_scalar);
void vli_print(uint32_t *p_vli)
{
unsigned i;
for(i=0; i<NUM_ECC_DIGITS-1; ++i)
{
printf("0x%08X, ", (unsigned)p_vli[i]);
}
printf("0x%08X", (unsigned)p_vli[i]);
}
int randfd;
void getRandomBytes(void *p_dest, unsigned p_size)
{
if(read(randfd, p_dest, p_size) != (int)p_size)
{
printf("Failed to get random bytes.\n");
}
}
int main(int argc, char **argv)
{
unsigned l_num = 1;
unsigned i, j;
if(argc > 1)
{
l_num = strtoul(argv[1], NULL, 10);
}
randfd = open("/dev/urandom", O_RDONLY);
if(randfd == -1)
{
printf("No access to urandom\n");
return -1;
}
uint32_t l_private[NUM_ECC_DIGITS];
EccPoint l_public;
for(i=0; i<l_num; ++i)
{
getRandomBytes((char *)l_private, NUM_ECC_DIGITS * sizeof(uint32_t));
ecc_make_key(&l_public, l_private, l_private);
printf("uint32_t private_%u[NUM_ECC_DIGITS] = {", i);
vli_print(l_private);
printf("};\n");
printf("EccPoint public_%u = {\n", i);
printf(" {");
vli_print(l_public.x);
printf("},\n");
printf(" {");
vli_print(l_public.y);
printf("}};\n\n");
}
return 0;
}
#endif /* !TARGET_LPC11XX */