iPXE
|
00001 /* 00002 * Copyright (C) 2012 Michael Brown <mbrown@fensystems.co.uk>. 00003 * 00004 * This program is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU General Public License as 00006 * published by the Free Software Foundation; either version 2 of the 00007 * License, or any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, but 00010 * WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 00017 * 02110-1301, USA. 00018 * 00019 * You can also choose to distribute this program under the terms of 00020 * the Unmodified Binary Distribution Licence (as given in the file 00021 * COPYING.UBDL), provided that you have satisfied its requirements. 00022 */ 00023 00024 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); 00025 00026 /** @file 00027 * 00028 * Entropy sampling 00029 * 00030 */ 00031 00032 #include <stdio.h> 00033 #include <ipxe/entropy.h> 00034 #include <ipxe/test.h> 00035 00036 /** Total number of test samples */ 00037 #define SAMPLE_COUNT 65536 00038 00039 /** Number of samples per block */ 00040 #define SAMPLE_BLOCKSIZE 256 00041 00042 /** 00043 * Generate entropy samples for external testing 00044 * 00045 */ 00046 static void entropy_sample_test_exec ( void ) { 00047 static noise_sample_t samples[SAMPLE_BLOCKSIZE]; 00048 unsigned int i; 00049 unsigned int j; 00050 int rc; 00051 00052 /* Collect and print blocks of samples */ 00053 for ( i = 0 ; i < ( SAMPLE_COUNT / SAMPLE_BLOCKSIZE ) ; i++ ) { 00054 00055 /* Collect one block of samples */ 00056 rc = entropy_enable(); 00057 ok ( rc == 0 ); 00058 for ( j = 0 ; j < SAMPLE_BLOCKSIZE ; j++ ) { 00059 rc = get_noise ( &samples[j] ); 00060 ok ( rc == 0 ); 00061 } 00062 entropy_disable(); 00063 00064 /* Print out sample values */ 00065 for ( j = 0 ; j < SAMPLE_BLOCKSIZE ; j++ ) { 00066 printf ( "SAMPLE %d %d\n", ( i * SAMPLE_BLOCKSIZE + j ), 00067 samples[j] ); 00068 } 00069 } 00070 } 00071 00072 /** Entropy sampling self-test */ 00073 struct self_test entropy_sample_test __self_test = { 00074 .name = "entropy_sample", 00075 .exec = entropy_sample_test_exec, 00076 };