Changeset 4447:330209bb6de3 in roaraudio


Ignore:
Timestamp:
10/09/10 19:51:24 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added general random functions and support for gcrypt backend

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/random.h

    r4446 r4447  
    3939#include "libroar.h" 
    4040 
     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 
     48int roar_random_gen(void * buffer, size_t len, int quality); 
     49 
     50void * roar_random_genbuf(size_t len, int quality, int locked); 
     51 
    4152#endif 
    4253 
  • libroar/random.c

    r4446 r4447  
    3636#include "libroar.h" 
    3737 
     38#ifdef ROAR_HAVE_LIBGCRYPT 
     39#include <gcrypt.h> 
     40#endif 
     41 
     42static 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 
     53int 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 
     88void * 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 
    38109//ll 
Note: See TracChangeset for help on using the changeset viewer.