/* -----------------------------------------------------------------------
 *
 * Copyright (c) 2008 EURL Cryptographie Ingénierie et Conseil <ecctk@cryptograph-ic.com>, AIX-NOULETTE, FRANCE
 *
 * Termes :
 *
 * L'utilisation et/ou la redistribution de ce code (avec ou sans modification),
 * ainsi que de tous les composants du produit (librairies, documentation, exemples, ...)
 * est soumise aux termes de la licence qui vous est attribuée par son auteur.
 *
 * -----------------------------------------------------------------------
 */

#include <stdlib.h>
#include <stdio.h>

#include <include/ecctk-prototype.h>
#include <include/ecctk-ecc.h>

#define MT_RAND			1
#define FIPS186_RAND	2
#define ANSIX9_RAND		3

void gen_random()
{
	/* set random size (in bits)
	 */
	s4byte	random_size	= 1024;

	/* buffer to get random value
	 */
	u1byte	*random_val;

	/* choice of algorithm
	 */
	u1byte	algo = ANSIX9_RAND;
	
	switch (algo)
	{
		case MT_RAND:
			random_val = GenerateRandom(random_size);
			break;
		case FIPS186_RAND:
			random_val = GenerateRandomFips186(random_size);
			break;
		case ANSIX9_RAND:
			random_val = GenerateRandomAnsiX9_17(random_size);
			break;
	}
	
	if (random_val == NULL)
		fprintf(stderr, "Generate random value failed\n");
	else
	{
		s4byte i, nb_byte;

		/* compute the number of byte to print
		 */
		nb_byte = (random_size >> 3);
		if (random_size & 7)
			nb_byte++;
		
		/* print random value on stdout
		 */
		fprintf(stdout, "Random value = ");
		for (i = 0; i < nb_byte; i++)
			fprintf(stdout, "%02x", random_val[i]);
		fprintf(stdout, "\n");

		/* free buffer
		 */
		free(random_val);
	}
}
