Merge pull request #78 from libtom/idea/ltc_rng
add ltc_rng function pointer
This commit is contained in:
		
						commit
						fd1e351316
					
				| @ -1097,6 +1097,10 @@ | ||||
| 					RelativePath="src\misc\crypt\crypt_prng_is_valid.c" | ||||
| 					> | ||||
| 				</File> | ||||
| 				<File | ||||
| 					RelativePath="src\misc\crypt\crypt_prng_rng_descriptor.c" | ||||
| 					> | ||||
| 				</File> | ||||
| 				<File | ||||
| 					RelativePath="src\misc\crypt\crypt_register_cipher.c" | ||||
| 					> | ||||
|  | ||||
| @ -1099,6 +1099,10 @@ | ||||
| 					RelativePath="src\misc\crypt\crypt_prng_is_valid.c" | ||||
| 					> | ||||
| 				</File> | ||||
| 				<File | ||||
| 					RelativePath="src\misc\crypt\crypt_prng_rng_descriptor.c" | ||||
| 					> | ||||
| 				</File> | ||||
| 				<File | ||||
| 					RelativePath="src\misc\crypt\crypt_register_cipher.c" | ||||
| 					> | ||||
|  | ||||
							
								
								
									
										4
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								makefile
									
									
									
									
									
								
							| @ -95,8 +95,8 @@ src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/c | ||||
| src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ | ||||
| src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ | ||||
| src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ | ||||
| src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ | ||||
| src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_cipher.o \ | ||||
| src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ | ||||
| src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/hkdf/hkdf.o \ | ||||
| src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/pk_get_oid.o src/misc/pkcs5/pkcs_5_1.o \ | ||||
|  | ||||
| @ -152,8 +152,8 @@ src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/c | ||||
| src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ | ||||
| src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ | ||||
| src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ | ||||
| src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ | ||||
| src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_cipher.o \ | ||||
| src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ | ||||
| src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/hkdf/hkdf.o \ | ||||
| src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/pk_get_oid.o src/misc/pkcs5/pkcs_5_1.o \ | ||||
|  | ||||
| @ -99,8 +99,8 @@ src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/c | ||||
| src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ | ||||
| src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ | ||||
| src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ | ||||
| src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ | ||||
| src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_cipher.o \ | ||||
| src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ | ||||
| src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/hkdf/hkdf.o \ | ||||
| src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/pk_get_oid.o src/misc/pkcs5/pkcs_5_1.o \ | ||||
|  | ||||
| @ -57,8 +57,8 @@ src/misc/crypt/crypt_find_hash_oid.obj src/misc/crypt/crypt_find_prng.obj src/mi | ||||
| src/misc/crypt/crypt_hash_descriptor.obj src/misc/crypt/crypt_hash_is_valid.obj \ | ||||
| src/misc/crypt/crypt_inits.obj src/misc/crypt/crypt_ltc_mp_descriptor.obj \ | ||||
| src/misc/crypt/crypt_prng_descriptor.obj src/misc/crypt/crypt_prng_is_valid.obj \ | ||||
| src/misc/crypt/crypt_register_cipher.obj src/misc/crypt/crypt_register_hash.obj \ | ||||
| src/misc/crypt/crypt_register_prng.obj src/misc/crypt/crypt_sizes.obj \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.obj src/misc/crypt/crypt_register_cipher.obj \ | ||||
| src/misc/crypt/crypt_register_hash.obj src/misc/crypt/crypt_register_prng.obj src/misc/crypt/crypt_sizes.obj \ | ||||
| src/misc/crypt/crypt_unregister_cipher.obj src/misc/crypt/crypt_unregister_hash.obj \ | ||||
| src/misc/crypt/crypt_unregister_prng.obj src/misc/error_to_string.obj src/misc/hkdf/hkdf.obj \ | ||||
| src/misc/hkdf/hkdf_test.obj src/misc/mem_neq.obj src/misc/pk_get_oid.obj src/misc/pkcs5/pkcs_5_1.obj \ | ||||
|  | ||||
| @ -85,8 +85,8 @@ src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/c | ||||
| src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ | ||||
| src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ | ||||
| src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ | ||||
| src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ | ||||
| src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_cipher.o \ | ||||
| src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ | ||||
| src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/hkdf/hkdf.o \ | ||||
| src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/pk_get_oid.o src/misc/pkcs5/pkcs_5_1.o \ | ||||
|  | ||||
| @ -93,8 +93,8 @@ src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/c | ||||
| src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ | ||||
| src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ | ||||
| src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ | ||||
| src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ | ||||
| src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_cipher.o \ | ||||
| src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ | ||||
| src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ | ||||
| src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/hkdf/hkdf.o \ | ||||
| src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/pk_get_oid.o src/misc/pkcs5/pkcs_5_1.o \ | ||||
|  | ||||
| @ -304,6 +304,9 @@ | ||||
| /* rng_make_prng() */ | ||||
| #define LTC_RNG_MAKE_PRNG | ||||
| 
 | ||||
| /* enable the ltc_rng hook to integrate e.g. embedded hardware RNG's easily */ | ||||
| /* #define LTC_PRNG_ENABLE_LTC_RNG */ | ||||
| 
 | ||||
| #endif /* LTC_NO_PRNGS */ | ||||
| 
 | ||||
| #ifdef LTC_YARROW | ||||
|  | ||||
| @ -193,6 +193,11 @@ unsigned long rng_get_bytes(unsigned char *out, | ||||
| 
 | ||||
| int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); | ||||
| 
 | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
| extern unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen, | ||||
|       void (*callback)(void)); | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /* $Source$ */ | ||||
| /* $Revision$ */ | ||||
|  | ||||
| @ -371,6 +371,9 @@ const char *crypt_build_settings = | ||||
| #if defined(LTC_RNG_MAKE_PRNG) | ||||
|     " LTC_RNG_MAKE_PRNG " | ||||
| #endif | ||||
| #if defined(LTC_PRNG_ENABLE_LTC_RNG) | ||||
|     " LTC_PRNG_ENABLE_LTC_RNG " | ||||
| #endif | ||||
| #if defined(LTC_HASH_HELPERS) | ||||
|     " LTC_HASH_HELPERS " | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										15
									
								
								src/misc/crypt/crypt_prng_rng_descriptor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/misc/crypt/crypt_prng_rng_descriptor.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| /* LibTomCrypt, modular cryptographic library -- Tom St Denis
 | ||||
|  * | ||||
|  * LibTomCrypt is a library that provides various cryptographic | ||||
|  * algorithms in a highly modular and flexible manner. | ||||
|  * | ||||
|  * The library is free for all purposes without any express | ||||
|  * guarantee it works. | ||||
|  * | ||||
|  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | ||||
|  */ | ||||
| #include "tomcrypt.h" | ||||
| 
 | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
| unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen, void (*callback)(void)); | ||||
| #endif | ||||
| @ -135,6 +135,15 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, | ||||
| 
 | ||||
|    LTC_ARGCHK(out != NULL); | ||||
| 
 | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
|    if (ltc_rng) { | ||||
|       x = ltc_rng(out, outlen, callback); | ||||
|       if (x != 0) { | ||||
|          return x; | ||||
|       } | ||||
|    } | ||||
| #endif | ||||
| 
 | ||||
| #if defined(_WIN32) || defined(_WIN32_WCE) | ||||
|    x = rng_win32(out, outlen, callback); if (x != 0) { return x; } | ||||
| #elif defined(LTC_DEVRANDOM) | ||||
|  | ||||
| @ -302,8 +302,29 @@ static void _unregister_all(void) | ||||
| #endif | ||||
| } /* _cleanup() */ | ||||
| 
 | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
| 
 | ||||
| static unsigned long my_test_rng_read; | ||||
| 
 | ||||
| static unsigned long my_test_rng(unsigned char *buf, unsigned long len, | ||||
|                              void (*callback)(void)) | ||||
| { | ||||
|    unsigned long n; | ||||
|    LTC_UNUSED_PARAM(callback); | ||||
|    for (n = 0; n < len; ++n) { | ||||
|       buf[n] = 4; | ||||
|    } | ||||
|    my_test_rng_read += n; | ||||
|    return n; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| void reg_algs(void) | ||||
| { | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
|   unsigned long before; | ||||
| #endif | ||||
|   int err; | ||||
| 
 | ||||
|   atexit(_unregister_all); | ||||
| @ -441,6 +462,23 @@ register_prng(&rc4_desc); | ||||
| register_prng(&sober128_desc); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef LTC_PRNG_ENABLE_LTC_RNG | ||||
|    ltc_rng = my_test_rng; | ||||
| 
 | ||||
|    before = my_test_rng_read; | ||||
|    if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) { | ||||
|       fprintf(stderr, "rng_make_prng with 'my_test_rng' failed: %s\n", error_to_string(err)); | ||||
|       exit(EXIT_FAILURE); | ||||
|    } | ||||
| 
 | ||||
|    if (before == my_test_rng_read) { | ||||
|       fprintf(stderr, "somehow there was no read from the ltc_rng! %lu == %lu\n", before, my_test_rng_read); | ||||
|       exit(EXIT_FAILURE); | ||||
|    } | ||||
| 
 | ||||
|    ltc_rng = NULL; | ||||
| #endif | ||||
| 
 | ||||
|    if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) { | ||||
|       fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err)); | ||||
|       exit(EXIT_FAILURE); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user