Fix bug in randpool_getN.
[bertos.git] / algos / randpool.c
index 63a2716a6fa8a9b89145e1aef5b34eed1f1c0984..6881bc4896fb5943f59604ab416e138655e90330 100755 (executable)
 
 /*#*
  *#* $Log$
- *#* Revision 1.11  2007/02/12 09:40:43  asterix
- *#* Remove randpool_load function. Add *data in randpool_init prototype.
+ *#* Revision 1.13  2007/02/12 18:25:34  asterix
+ *#* Fix bug in randpool_getN.
+ *#*
+ *#* Revision 1.12  2007/02/12 09:47:39  asterix
+ *#* Remove randpool_save. Add randpool_pool.
  *#*
  *#* Revision 1.10  2007/02/12 09:03:32  asterix
  *#* Add CONFIG_RANDPOOL_TIMER macro to swich on or off timer support
@@ -207,20 +210,24 @@ void randpool_get(EntropyPool *pool, void *data, size_t n_byte)
  * to generate pseudocasual value from previous state of
  * pool.
  */
-void randpool_getN(EntropyPool *pool, void *data, size_t n_byte)
+void randpool_getN(EntropyPool *pool, void *_data, size_t n_byte)
 {
        Md2Context context;
        size_t i = pool->pos_get;
        int n = n_byte;
        size_t len = MIN((size_t)CONFIG_MD2_BLOCK_LEN, n_byte);
+       uint8_t *data;
+
+       data = (uint8_t *)_data;
 
        /* Test if i + CONFIG_MD2_BLOCK_LEN  is inside of entropy pool.*/
        ASSERT((CONFIG_MD2_BLOCK_LEN + i) < CONFIG_SIZE_ENTROPY_POOL);
 
        md2_init(&context); 
 
-       while(n < 0)
+       while(n > 0)
        {
+
                /*Hash previous state of pool*/
                md2_update(&context, &pool->pool_entropy[i], CONFIG_MD2_BLOCK_LEN);
 
@@ -247,9 +254,14 @@ void randpool_getN(EntropyPool *pool, void *data, size_t n_byte)
        /*If we get all entropy entropy is 0*/
        if(pool->entropy < 0) 
                pool->entropy = 0;
+
 }
 
-bool randpool_save(void *data)
+/**
+ * Return a pointer to entropy pool.
+ */
+uint8_t *randpool_pool(EntropyPool *pool)
 {
+       return pool->pool_entropy;
 }