From 714f998dc2201fa5b24792891091c5b9851f83be Mon Sep 17 00:00:00 2001 From: asterix Date: Thu, 15 Feb 2007 18:17:51 +0000 Subject: [PATCH] Add randpool test program. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@788 38d2e660-2303-0410-9eaa-f027e97ec537 --- app/randpool/appconfig.h | 258 ++++++++++++++++++++++++++++++++++ app/randpool/randpool_demo.c | 226 +++++++++++++++++++++++++++++ app/randpool/randpool_demo.mk | 37 +++++ 3 files changed, 521 insertions(+) create mode 100755 app/randpool/appconfig.h create mode 100755 app/randpool/randpool_demo.c create mode 100755 app/randpool/randpool_demo.mk diff --git a/app/randpool/appconfig.h b/app/randpool/appconfig.h new file mode 100755 index 00000000..6534836d --- /dev/null +++ b/app/randpool/appconfig.h @@ -0,0 +1,258 @@ +/** + * \file + * + * + * \brief DevLib configuration options + * + * You should copy this header in your project and rename it to + * "config.h" and delete the CONFIG_ macros for the modules + * you're not using. + * + *

Working with multiple applications

+ * + * If your project is made of multiple DevLib-based applications, + * create a custom "config.h" file in each application subdirectory + * and play with the compiler include path to get the desired result. + * You can share common options by creationg a "config_common.h" header + * and including it from all your "config.h" copies. + * + *

Configuration style

+ * + * For improved compile-time checking of configuration options, + * the preferred way to use a \c CONFIG_ symbol is keeping it + * always defined with a value of either 0 or 1. This lets + * you write tests like this: + * + * \code + * #if CONFIG_FOO + * void foo(void) + * { + * if (CONFIG_BAR) + * bar(); + * } + * #endif // CONFIG_FOO + * \endcode + * + * In most cases, we rely on the optimizer to discard checks + * on constant values and performing dead-code elimination. + * + * \version $Id$ + * \author Bernardo Innocenti + * \author Stefano Fedrigo + */ + +/*#* + *#* $Log$ + *#* Revision 1.1 2007/02/15 18:17:51 asterix + *#* Add randpool test program. + *#* + *#* Revision 1.16 2007/02/12 15:29:41 asterix + *#* Add CONFIG_RANDPOOL_TIMER macro to swich on or off timer support in randpool. + *#* + *#* Revision 1.15 2007/02/08 14:20:35 asterix + *#* Add CONFIG_SIZE_ENTROPY_POOL. + *#* + *#* Revision 1.14 2007/02/06 11:37:26 asterix + *#* Add CONFIG_MD2_STD_PERM for use standard permutation in MD2. + *#* + *#* Revision 1.13 2007/01/31 13:49:40 asterix + *#* Add config size block for MD2 + *#* + *#* Revision 1.3 2006/09/13 18:29:22 bernie + *#* Add a few missing CONFIG_ definitions. + *#* + *#* Revision 1.2 2006/07/19 12:56:24 bernie + *#* Convert to new Doxygen style. + *#* + *#* Revision 1.1 2006/05/18 00:40:43 bernie + *#* Rename appconfig.h to appconfig_common.h. + *#* + *#* Revision 1.11 2006/04/11 00:08:53 bernie + *#* Add smooth scrolling for menus. + *#* + *#* Revision 1.10 2006/03/22 09:48:51 bernie + *#* Add a few more config options. + *#* + *#* Revision 1.9 2006/02/24 00:27:35 bernie + *#* Enable kernel and fix Doxygen markup. + *#* + *#* Revision 1.8 2006/02/21 16:06:05 bernie + *#* Update copyright info. + *#* + *#* Revision 1.7 2006/02/17 22:28:19 bernie + *#* Add missing UART definitions. + *#* + *#* Revision 1.6 2006/02/15 09:12:56 bernie + *#* Switch to BITMAP_FMT_PLANAR_V_LSB. + *#* + *#* Revision 1.5 2006/02/10 12:34:33 bernie + *#* Add missing config options for gfx and kbd. + *#* + *#* Revision 1.4 2006/01/23 23:12:27 bernie + *#* Enable CONFIG_GFX_VCOORDS. + *#* + *#* Revision 1.3 2006/01/17 02:30:06 bernie + *#* Add new config vars. + *#* + *#* Revision 1.2 2005/11/27 03:04:57 bernie + *#* CONFIG_WATCHDOG: New config option. + *#* + *#* Revision 1.1 2005/11/04 17:42:12 bernie + *#* Move cfg/config.h to appconfig.h. + *#*/ + +#ifndef APPCONFIG_H +#define APPCONFIG_H + +/** Baud-rate for the kdebug console */ +#define CONFIG_KDEBUG_BAUDRATE 19200 + +/** + * printf()-style formatter configuration. + * + * \sa PRINTF_DISABLED + * \sa PRINTF_NOMODIFIERS + * \sa PRINTF_REDUCED + * \sa PRINTF_NOFLOAT + * \sa PRINTF_FULL + */ +#define CONFIG_PRINTF PRINTF_FULL + +/** + * Multithreading kernel. + * + * \sa config_kern.h + */ +#define CONFIG_KERNEL 0 + +/** + * \name Serial driver parameters + * \{ + */ + /** [bytes] Size of the outbound FIFO buffer for port 0. */ + #define CONFIG_UART0_TXBUFSIZE 32 + + /** [bytes] Size of the inbound FIFO buffer for port 0. */ + #define CONFIG_UART0_RXBUFSIZE 64 + + /** [bytes] Size of the outbound FIFO buffer for port 1. */ + #define CONFIG_UART1_TXBUFSIZE 32 + + /** [bytes] Size of the inbound FIFO buffer for port 1. */ + #define CONFIG_UART1_RXBUFSIZE 64 + + /** [bytes] Size of the outbound FIFO buffer for SPI port (AVR only). */ + #define CONFIG_SPI_TXBUFSIZE 16 + + /** [bytes] Size of the inbound FIFO buffer for SPI port (AVR only). */ + #define CONFIG_SPI_RXBUFSIZE 32 + + /** SPI data order (AVR only). */ + #define CONFIG_SPI_DATA_ORDER SER_MSB_FIRST + + /** SPI clock division factor (AVR only). */ + #define CONFIG_SPI_CLOCK_DIV 16 + + /** SPI clock polarity: 0 = normal low, 1 = normal high (AVR only). */ + #define CONFIG_SPI_CLOCK_POL 0 + + /** SPI clock phase: 0 = sample on first edge, 1 = sample on second clock edge (AVR only). */ + #define CONFIG_SPI_CLOCK_PHASE 0 + + /** Default transmit timeout (ms). Set to -1 to disable timeout support */ + #define CONFIG_SER_TXTIMEOUT -1 + + /** Default receive timeout (ms). Set to -1 to disable timeout support */ + #define CONFIG_SER_RXTIMEOUT -1 + + /** Use RTS/CTS handshake */ + #define CONFIG_SER_HWHANDSHAKE 0 + + /** Default baud rate (set to 0 to disable) */ + #define CONFIG_SER_DEFBAUDRATE 0 + + /** Enable ser_gets() and ser_gets_echo() */ + #define CONFIG_SER_GETS 0 + + /** Enable second serial port in emulator. */ + #define CONFIG_EMUL_UART1 0 + + /** + * Transmit always something on serial port 0 TX + * to avoid interference when sending burst of data, + * using AVR multiprocessor serial mode + */ + #define CONFIG_SER_TXFILL 0 + + #define CONFIG_SER_STROBE 0 +/*\}*/ + +/// Hardware timer selection for drv/timer.c +#define CONFIG_TIMER TIMER_ON_OUTPUT_COMPARE2 + +/// Debug timer interrupt using a strobe pin. +#define CONFIG_TIMER_STROBE 0 + +/// Enable ADS strobe. +#define CONFIG_ADC_STROBE 0 + +/// Enable watchdog timer. +#define CONFIG_WATCHDOG 0 + +/// EEPROM type for drv/eeprom.c +#define CONFIG_EEPROM_TYPE EEPROM_24XX256 + +/// Select bitmap pixel format. +#define CONFIG_BITMAP_FMT BITMAP_FMT_PLANAR_V_LSB + +/// Enable line clipping algorithm. +#define CONFIG_GFX_CLIPPING 1 + +/// Enable text rendering in bitmaps. +#define CONFIG_GFX_TEXT 1 + +/// Enable virtual coordinate system. +#define CONFIG_GFX_VCOORDS 1 + +/// Keyboard polling method +#define CONFIG_KBD_POLL KBD_POLL_SOFTINT + +/// Enable keyboard event delivery to observers +#define CONFIG_KBD_OBSERVER 0 + +/// Enable key beeps +#define CONFIG_KBD_BEEP 1 + +/// Enable long pression handler for keys +#define CONFIG_KBD_LONGPRESS 1 + +/** + * \name Type for the chart dataset + * \{ + */ +#define CONFIG_CHART_TYPE_X uint8_t +#define CONFIG_CHART_TYPE_Y uint8_t +/*\}*/ + +/// Enable button bar behind menus +#define CONFIG_MENU_MENUBAR 0 + +/// Enable smooth scrolling in menus +#define CONFIG_MENU_SMOOTH 1 + +/// Size of block for MD2 algorithm. +#define CONFIG_MD2_BLOCK_LEN 16 + +/// Use standard permutation in MD2 algorithm. +#define CONFIG_MD2_STD_PERM 0 + +/// Define a size, in byte, of entropy pool. +#define CONFIG_SIZE_ENTROPY_POOL 256 + +/// Turn on or off timer support in Randpool. +#define CONFIG_RANDPOOL_TIMER 1 + +#endif /* APPCONFIG_H */ diff --git a/app/randpool/randpool_demo.c b/app/randpool/randpool_demo.c new file mode 100755 index 00000000..17041c48 --- /dev/null +++ b/app/randpool/randpool_demo.c @@ -0,0 +1,226 @@ +/** + * \file + * + * + * \brief Test function for randpool API. + * + * This program return a rand number generate from randpool function. + * For use randpool function you need a souce of entropy. In this + * program you can choose from: + * - /dev/random + * - /dev/urandom + * - /dev/input/mouse0 + * + * There are 3 mode of output: + * - binmode: program generate a sequenze of random byte. + * - Matrix of random number for octave program. + * - Vector of random number for octave program. + * + * \version $Id$ + * \author Daniele Basile + */ + +/*#* + *#* $Log$ + *#* Revision 1.1 2007/02/15 18:17:51 asterix + *#* Add randpool test program. + *#* + *#*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define LEN 256 //Size of buffer containing a random number. +#define SAMPLE 1000 //Defoult number of byte that put in entropy pool. + +int main (int argc, char *argv[]) +{ + EntropyPool pool; + uint8_t ch; + uint8_t buff[LEN]; + FILE *pdev; + int opt = getopt (argc, argv, "murh"); + int samp = SAMPLE; + int round = 10; + int mode = 0; + int pass = 0; + + timer_init(); + + randpool_init(&pool, NULL, 0); //Init a entropy pool. + + /* + * Chose a source of entropy. + */ + switch(opt) + { + case 'm': + { + pdev = fopen("/dev/input/mouse0", "r"); + break; + } + case 'u': + { + pdev = fopen("/dev/urandom", "r"); + break; + } + case 'r': + { + pdev = fopen("/dev/random", "r"); + break; + } + case 'h': + { + } + default: + { + printf("\n"); + printf("\n"); + printf("randpool_demo [OPTION] [SAMPLE] [ROUND] [MODE]\n"); + printf("\n"); + printf("OPTION:\n"); + printf(" -r /dev/random\n"); + printf(" -u /dev/urandom\n"); + printf(" -m /dev/input/mouse0\n"); + printf("\n"); + printf("SAMPLE:\n"); + printf(" num number of entropy byte to put in etropy pool.\n"); + printf("\n"); + printf("ROUND:\n"); + printf(" num number call of randpool_get function.\n"); + printf("\n"); + printf("MODE:\n"); + printf(" 0 binmode\n"); + printf(" 1 vector mode\n"); + printf(" 2 matrix mode\n"); + printf("\n"); + printf("Test program of randpool API.\n"); + printf("This program create an entropy pool of 256byte, and fill it\n"); + printf("with entropy from a exsternal source. This source can be:\n"); + printf(" - /dev/random (option: -r)\n"); + printf(" - /dev/urandom (option: -u)\n"); + printf(" - /dev/input/mouse0 (option: -m)\n"); + printf("\n"); + printf("Once the pool is full, program call a randpool_get ROUND time,\n"); + printf("printing on STDOUT random value, in accord with a select mode.\n"); + printf("The mode are:\n"); + printf(" - binmode: program print on STDOUT random byte. (option: 0 (defaul mode)\n"); + printf(" - vector mode: program print on STDOUT a ROUND vector of random value.\n"); + printf(" The output is format for octave program. (option: 1)\n"); + printf(" - matrix mode: program print on STDOUT a matrix of random value.\n"); + printf(" The output is format for octave program. (option: 2)\n"); + printf("\n"); + exit(1); + } + + } + + /* + * + */ + if(argc > 2) + { + if(argv[2]) + samp = atoi(argv[2]); //Number of byte take from entropy source + if(argv[3]) + round = atoi(argv[3]); //Number of time we call randpool_get. + if(argv[4]) + { + switch(atoi(argv[4])) + { + case 1: + { + mode = 1; + printf("# Created by Asterix.\n"); + printf("# name: __nargin__\n"); + printf("# type: scalar\n"); + printf("0\n"); + break; + } + case 2: + { + mode = 2; + printf("# Created by Asterix.\n"); + printf("# name: __nargin__\n"); + printf("# type: scalar\n"); + printf("0\n"); + break; + } + default: + { + break; + } + + } + + } + + } + + /* + * Add byte to entropy pool from a source of entropy. + */ + for(int i = 0; i < samp; i++) + { + + ch = fgetc(pdev); + randpool_add(&pool, &ch, sizeof(ch)); + + } + + fclose(pdev); + + + for(int k = 0; k < round; k++) + { + switch(mode) + { + case 1: + { + printf("\n"); + printf("\n# name: vet%d",k); + printf("\n# type: matrix"); + printf("\n# rows: 1"); + printf("\n# columns: %d\n", LEN); + pass = 1; + break; + } + case 2: + { + printf("\n"); + printf("\n# name: randMatrix"); + printf("\n# type: matrix"); + printf("\n# rows: %d",round); + printf("\n# columns: %d\n", LEN); + pass = 1; + mode = 0; + break; + } + } + + randpool_get(&pool, buff, LEN); + + if(pass) + { + for(int j = 0; j < LEN; j++) + { + printf("%d ", buff[j]); + } + printf("\n"); + } + else + fwrite(buff, sizeof(uint8_t), LEN, stdout); + } + + +} + diff --git a/app/randpool/randpool_demo.mk b/app/randpool/randpool_demo.mk new file mode 100755 index 00000000..11d947e6 --- /dev/null +++ b/app/randpool/randpool_demo.mk @@ -0,0 +1,37 @@ +# +# $Id$ +# Copyright 2006 Develer S.r.l. (http://www.develer.com/) +# All rights reserved. +# +# Makefile fragment for DevLib randpool_demo application. +# +# Author: Daniele Basile +# +# $Log$ +# Revision 1.1 2007/02/15 18:17:51 asterix +# Add randpool test program. +# +# + + +# Set to 1 for debug builds +randpool_demo_DEBUG = 0 + +# Our target application +TRG += randpool_demo + +randpool_demo_CSRC = \ + app/randpool/randpool_demo.c \ + algos/randpool.c \ + algos/md2.c \ + drv/timer.c \ + os/hptime.c + +randpool_demo_CFLAGS = -O0 -D'ARCH=0' -Iapp/randpool/ -Iapp/randpool/hw + +# Debug stuff +ifeq ($(randpool_demo_DEBUG),1) + randpool_demo_CFLAGS += -D_DEBUG + randpool_demo_PCSRC += drv/kdebug.c +endif + -- 2.25.1