yarrow.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* -*- Mode: C; c-file-style: "bsd" -*- */
  2. #ifndef YARROW_H
  3. #define YARROW_H
  4. #if defined( YARROW_DETECT_FORK )
  5. #include <unistd.h>
  6. #endif
  7. #include "ytypes.h"
  8. #include "yhash.h"
  9. #include "ycipher.h"
  10. /* These error codes are returned by the functions below. */
  11. #define YARROW_OK                1  /* All is well */
  12. #define YARROW_FAIL              0  /* generic failure */
  13. #define YARROW_NOT_INIT         -1  /* YarrowInit hasn't been called */
  14. #define YARROW_ALREADY_INIT     -2  /* YarrowInit has already been called */
  15. #define YARROW_NO_DRIVER        -3  /* driver doesn't exist */
  16. #define YARROW_CANT_OPEN        -4  /* can't open driver */
  17. #define YARROW_BAD_SOURCE       -5  /* invalid source id */
  18. #define YARROW_TOO_MANY_SOURCES -6  /* can't create any more source ids */
  19. #define YARROW_BAD_ARG          -7  /* invalid argument */
  20. #define YARROW_ACCESS           -8  /* insufficient privileges */
  21. #define YARROW_NOMEM            -9  /* out of memory */
  22. #define YARROW_NORSRC          -10  /* a resource is exhausted */
  23. #define YARROW_NOT_SEEDED      -11  /* not enough entropy to generate output */
  24. #define YARROW_LOCKING         -12  /* locking error */
  25. #define YARROW_NO_STATE        -13  /* there is no state to load */
  26. #define YARROW_STATE_ERROR     -14  /* error with state load or save */
  27. #define YARROW_NOT_IMPL        -15  /* not implemented */
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. /* Yarrow implementation and configuration parameters */
  32. /* pool identification */
  33. #define YARROW_FAST_POOL 0
  34. #define YARROW_SLOW_POOL 1
  35. #define YARROW_MAX_SOURCES 20
  36. #define YARROW_ENTROPY_MULTIPLIER 0.5
  37. #define YARROW_POOL_SIZE (HASH_DIGEST_SIZE*8)
  38. #define YARROW_OUTPUTS_PER_GATE 10   /* Pg */
  39. #define YARROW_FAST_PT 10
  40. #define YARROW_SLOW_PT 100
  41. /* thresholds to use once seeded */
  42. #define YARROW_FAST_THRESH 100
  43. #define YARROW_SLOW_THRESH 160
  44. #define YARROW_K_OF_N_THRESH 2
  45. /* The Yarrow paper does not specify when the initial seed should be
  46.    considered complete. Use the same conditions as a slow reseed */
  47. #define YARROW_FAST_INIT_THRESH YARROW_FAST_THRESH
  48. #define YARROW_SLOW_INIT_THRESH YARROW_SLOW_THRESH
  49. #define YARROW_K_OF_N_INIT_THRESH YARROW_K_OF_N_THRESH
  50. /* sanity checks */
  51. #if YARROW_FAST_THRESH > YARROW_POOL_SIZE
  52. #undef YARROW_FAST_THRESH
  53. #define YARROW_FAST_THRESH YARROW_POOL_SIZE
  54. #endif
  55. #if YARROW_SLOW_THRESH > YARROW_POOL_SIZE
  56. #undef YARROW_SLOW_THRESH
  57. #define YARROW_SLOW_THRESH YARROW_POOL_SIZE
  58. #endif
  59. #if YARROW_FAST_INIT_THRESH > YARROW_POOL_SIZE
  60. #undef YARROW_FAST_INIT_THRESH
  61. #define YARROW_FAST_INIT_THRESH YARROW_POOL_SIZE
  62. #endif
  63. #if YARROW_SLOW_INIT_THRESH > YARROW_POOL_SIZE
  64. #undef YARROW_SLOW_INIT_THRESH
  65. #define YARROW_SLOW_INIT_THRESH YARROW_POOL_SIZE
  66. #endif
  67. typedef size_t estimator_fn(const void* sample, size_t size);
  68. typedef struct
  69. {
  70.     int pool;
  71.     int entropy[2];
  72.     int reached_slow_thresh;
  73.     estimator_fn* estimator;
  74. } Source;
  75. typedef struct
  76. {
  77.     /* state */
  78.     int seeded;
  79.     int saved;
  80. #if defined( YARROW_DETECT_FORK )
  81.     int pid;
  82. #endif
  83.     Source source[YARROW_MAX_SOURCES];
  84.     unsigned num_sources;
  85.     HASH_CTX pool[2];
  86.     byte out[CIPHER_BLOCK_SIZE];
  87.     unsigned out_left;
  88.     COUNTER out_count;
  89.     COUNTER gate_count;
  90.     COUNTER gates_limit;
  91.     byte C[CIPHER_BLOCK_SIZE];
  92.     CIPHER_CTX cipher;
  93.     byte K[CIPHER_KEY_SIZE];
  94.     const char *entropyfile;
  95.     /* parameters */
  96.     COUNTER Pt[2];
  97.     COUNTER Pg;
  98.     int slow_k_of_n;
  99.     /* current thresholds */
  100.     int slow_thresh;
  101.     int fast_thresh;
  102.     int slow_k_of_n_thresh;
  103. } Yarrow_CTX;
  104. #if defined(WIN32)
  105. #   if defined(YARROW_IMPL)
  106. #       define YARROW_DLL __declspec(dllexport) 
  107. #   else
  108. #       define YARROW_DLL __declspec(dllimport) 
  109. #   endif
  110. #else
  111. #   define YARROW_DLL
  112. #endif
  113. YARROW_DLL
  114. int Yarrow_Init( Yarrow_CTX* y, const char *filename );
  115. YARROW_DLL
  116. int Yarrow_Poll( Yarrow_CTX *y, unsigned source_id );
  117. YARROW_DLL
  118. int Yarrow_Input( Yarrow_CTX* y, unsigned source_id,
  119.   const void* sample, 
  120.   size_t size, size_t entropy_bits );
  121. YARROW_DLL
  122. int Yarrow_Status( Yarrow_CTX* y, int *num_sources, unsigned *source_id,
  123.    size_t *entropy_bits, size_t *entropy_max );
  124. YARROW_DLL
  125. int Yarrow_Output( Yarrow_CTX* y, void* out, size_t size );
  126. YARROW_DLL
  127. int Yarrow_New_Source( Yarrow_CTX* y, unsigned* source_id );
  128. YARROW_DLL
  129. int Yarrow_Register_Source_Estimator( Yarrow_CTX* y, unsigned source_id, 
  130.       estimator_fn* fptr );
  131. YARROW_DLL
  132. int Yarrow_Stretch( const byte* m, size_t size, byte* out, size_t out_size );
  133. YARROW_DLL
  134. int Yarrow_Reseed( Yarrow_CTX* y, int pool );
  135. YARROW_DLL
  136. int Yarrow_Gate( Yarrow_CTX* y );
  137. YARROW_DLL
  138. int Yarrow_Final( Yarrow_CTX* y );
  139. YARROW_DLL
  140. const char* Yarrow_Str_Error( int );
  141. /* portability stuff */
  142. #if defined(macintosh) && YARROW_DRIVER && TARGET_CPU_PPC
  143. #   define mem_zero(p, n)       BlockZero((p), (n))
  144. #   define mem_copy(d, s, n)    BlockMoveData((s), (d), (n))
  145. #else
  146. #   define mem_zero(p, n)       memset((p), 0, (n))
  147. #   define mem_copy(d, s, n)    memcpy((d), (s), (n))
  148. #endif
  149. #if !defined(WIN32)
  150. #   define min(x, y) ((x) < (y) ? (x) : (y))
  151. #   define max(x, y) ((x) > (y) ? (x) : (y))
  152. #endif
  153. /* end portability stuff */
  154. #ifdef __cplusplus
  155. }
  156. #endif
  157. #endif /* YARROW_H */