Changeset 4672:c4e84aa74620 in roaraudio


Ignore:
Timestamp:
12/20/10 18:23:56 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added function to generate nonce

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/random.h

    r4447 r4672  
    4646#define ROAR_RANDOM_VERY_STRONG  5 
    4747 
     48int roar_random_gen_nonce(void * buffer, size_t len); 
     49 
    4850int roar_random_gen(void * buffer, size_t len, int quality); 
    4951 
  • libroar/random.c

    r4454 r4672  
    5050 
    5151 inited = 1; 
     52} 
     53 
     54#define TIGER_BLOCKLEN  55 
     55#define TIGER_DIGESTLEN (3*8) 
     56 
     57int 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; 
    52113} 
    53114 
Note: See TracChangeset for help on using the changeset viewer.