From fc36d16e84086d42a2cdd55559a25fc35a9b8922 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Thu, 27 Jan 2011 16:50:02 +0000 Subject: [PATCH] - Added random generation example application --- programs/CMakeLists.txt | 1 + programs/Makefile | 11 ++++-- programs/random/CMakeLists.txt | 6 +++ programs/random/gen_random.c | 72 ++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 programs/random/CMakeLists.txt create mode 100644 programs/random/gen_random.c diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index f73b645b3d..fcd1e8b1f9 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -1,6 +1,7 @@ add_subdirectory(aes) add_subdirectory(hash) add_subdirectory(pkey) +add_subdirectory(random) add_subdirectory(ssl) add_subdirectory(test) add_subdirectory(x509) diff --git a/programs/Makefile b/programs/Makefile index 37c867a51d..025d8f5d24 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -15,9 +15,10 @@ APPS = aes/aescrypt2 aes/crypt_and_hash \ pkey/mpi_demo pkey/rsa_genkey \ pkey/rsa_sign pkey/rsa_verify \ ssl/ssl_client1 ssl/ssl_client2 \ - ssl/ssl_server test/ssl_cert_test \ - test/benchmark test/selftest \ - test/ssl_test x509/cert_app + ssl/ssl_server random/gen_random \ + test/ssl_cert_test test/benchmark \ + test/selftest test/ssl_test \ + x509/cert_app .SILENT: @@ -79,6 +80,10 @@ pkey/rsa_verify: pkey/rsa_verify.c ../library/libpolarssl.a echo " CC pkey/rsa_verify.c" $(CC) $(CFLAGS) $(OFLAGS) pkey/rsa_verify.c $(LDFLAGS) -o $@ +random/gen_random: random/gen_random.c ../library/libpolarssl.a + echo " CC random/gen_random.c" + $(CC) $(CFLAGS) $(OFLAGS) random/gen_random.c $(LDFLAGS) -o $@ + ssl/ssl_client1: ssl/ssl_client1.c ../library/libpolarssl.a echo " CC ssl/ssl_client1.c" $(CC) $(CFLAGS) $(OFLAGS) ssl/ssl_client1.c $(LDFLAGS) -o $@ diff --git a/programs/random/CMakeLists.txt b/programs/random/CMakeLists.txt new file mode 100644 index 0000000000..3196e467cb --- /dev/null +++ b/programs/random/CMakeLists.txt @@ -0,0 +1,6 @@ +add_executable(gen_random gen_random.c) +target_link_libraries(gen_random polarssl) + +INSTALL(TARGETS gen_random + DESTINATION "bin" + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) diff --git a/programs/random/gen_random.c b/programs/random/gen_random.c new file mode 100644 index 0000000000..a44e8a35ae --- /dev/null +++ b/programs/random/gen_random.c @@ -0,0 +1,72 @@ +/** + * \brief Generate random data into a file + * + * Copyright (C) 2006-2010, Brainspark B.V. + * + * This file is part of PolarSSL (http://www.polarssl.org) + * Lead Maintainer: Paul Bakker + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "polarssl/config.h" +#include "polarssl/havege.h" +#include +#include + +int main( int argc, char *argv[] ) +{ + FILE *f; + time_t t; + int i, j, k; + havege_state hs; + unsigned char buf[1024]; + + if( argc < 2 ) + { + fprintf( stderr, "usage: %s \n", argv[0] ); + return( 1 ); + } + + if( ( f = fopen( argv[1], "wb+" ) ) == NULL ) + { + printf( "failed to open '%s' for writing.\n", argv[0] ); + return( 1 ); + } + + havege_init( &hs ); + + t = time( NULL ); + + for( i = 0, k = 768; i < k; i++ ) + { + for( j = 0; j < (int) sizeof( buf ); j++ ) + buf[j] = havege_rand( &hs ); + + fwrite( buf, sizeof( buf ), 1, f ); + + printf( "Generating 32Mb of data in file '%s'... %04.1f" \ + "%% done\r", argv[1], (100 * (float) (i + 1)) / k ); + fflush( stdout ); + } + + if( t == time( NULL ) ) + t--; + + fclose( f ); + return( 0 ); +}