Changeset 4672:c4e84aa74620 in roaraudio
- Timestamp:
- 12/20/10 18:23:56 (13 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/random.h
r4447 r4672 46 46 #define ROAR_RANDOM_VERY_STRONG 5 47 47 48 int roar_random_gen_nonce(void * buffer, size_t len); 49 48 50 int roar_random_gen(void * buffer, size_t len, int quality); 49 51 -
libroar/random.c
r4454 r4672 50 50 51 51 inited = 1; 52 } 53 54 #define TIGER_BLOCKLEN 55 55 #define TIGER_DIGESTLEN (3*8) 56 57 int roar_random_gen_nonce(void * buffer, size_t len) { 58 static uint32_t buf[14]; 59 static int inited = 0; 60 static int idx = 0; 61 volatile pid_t pid = getpid(); 62 size_t i, writelen; 63 void * off = buf; 64 65 roar_random_init(); 66 67 if ( !inited ) { 68 for (i = 0; i < (sizeof(buf)/sizeof(*buf)); i++) { 69 #ifdef ROAR_HAVE_RAND 70 buf[i] = rand() + pid; 71 #else 72 buf[i] = pid; 73 #endif 74 } 75 76 roar_hash_buffer(off, buf, TIGER_BLOCKLEN, ROAR_HT_TIGER); 77 roar_hash_buffer(off+TIGER_DIGESTLEN, buf, TIGER_BLOCKLEN, ROAR_HT_TIGER); 78 79 inited = 1; 80 } 81 82 while (len) { 83 84 #ifdef ROAR_HAVE_TIME 85 buf[12] += time(NULL); 86 #endif 87 88 #ifdef ROAR_HAVE_RAND 89 buf[12] += rand(); 90 #endif 91 92 buf[12] += pid; 93 buf[13] += pid; 94 95 off = buf; 96 if ( idx ) { 97 off += TIGER_DIGESTLEN; 98 idx = 0; 99 } else { 100 idx = 1; 101 } 102 103 roar_hash_buffer(off, buf, TIGER_BLOCKLEN, ROAR_HT_TIGER); 104 105 writelen = len >= TIGER_DIGESTLEN ? TIGER_DIGESTLEN : len; 106 memcpy(buffer, off, writelen); 107 108 buffer += writelen; 109 len -= writelen; 110 } 111 112 return 0; 52 113 } 53 114
Note: See TracChangeset
for help on using the changeset viewer.