Changeset 4447:330209bb6de3 in roaraudio
- Timestamp:
- 10/09/10 19:51:24 (14 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/random.h
r4446 r4447 39 39 #include "libroar.h" 40 40 41 #define ROAR_RANDOM_NONE 0 42 #define ROAR_RANDOM_VERY_WEAK 1 43 #define ROAR_RANDOM_WEAK 2 44 #define ROAR_RANDOM_NORMAL 3 45 #define ROAR_RANDOM_STRONG 4 46 #define ROAR_RANDOM_VERY_STRONG 5 47 48 int roar_random_gen(void * buffer, size_t len, int quality); 49 50 void * roar_random_genbuf(size_t len, int quality, int locked); 51 41 52 #endif 42 53 -
libroar/random.c
r4446 r4447 36 36 #include "libroar.h" 37 37 38 #ifdef ROAR_HAVE_LIBGCRYPT 39 #include <gcrypt.h> 40 #endif 41 42 static void roar_random_init (void) { 43 static int inited = 0; 44 45 if (inited) 46 return; 47 48 // add stuff here needed to bring up random source. 49 50 inited = 1; 51 } 52 53 int roar_random_gen(void * buffer, size_t len, int quality) { 54 if ( len == 0 ) 55 return 0; 56 57 if ( buffer == NULL ) 58 return -1; 59 60 roar_random_init(); 61 62 switch (quality) { 63 case ROAR_RANDOM_NONE: 64 // no entropy: 65 memset(buffer, 0, len); 66 break; 67 #ifdef ROAR_HAVE_LIBGCRYPT 68 case ROAR_RANDOM_VERY_WEAK: 69 case ROAR_RANDOM_WEAK: 70 gcry_create_nonce(buffer, len); 71 break; 72 case ROAR_RANDOM_NORMAL: 73 case ROAR_RANDOM_STRONG: 74 gcry_randomize(buffer, len, GCRY_STRONG_RANDOM); 75 break; 76 case ROAR_RANDOM_VERY_STRONG: 77 gcry_randomize(buffer, len, GCRY_VERY_STRONG_RANDOM); 78 break; 79 #endif 80 default: 81 return -1; 82 break; 83 } 84 85 return 0; 86 } 87 88 void * roar_random_genbuf(size_t len, int quality, int locked) { 89 void * ret = roar_mm_malloc(len); 90 91 if (ret == NULL) 92 return NULL; 93 94 if ( locked ) { 95 if ( roar_mm_mlock(ret, len) == -1 ) { 96 roar_mm_free(ret); 97 return NULL; 98 } 99 } 100 101 if ( roar_random_gen(ret, len, quality) == -1 ) { 102 roar_mm_free(ret); 103 return NULL; 104 } 105 106 return ret; 107 } 108 38 109 //ll
Note: See TracChangeset
for help on using the changeset viewer.