diff --git a/yarrow.h b/yarrow.h index 13be1950481c2a63ac22cf55e4b57e076e148b9c..f78cc1ba5f8db1a01b2810dbe6cc3e453e05fabe 100644 --- a/yarrow.h +++ b/yarrow.h @@ -27,7 +27,6 @@ #define NETTLE_YARROW_COMPAT_H_INCLUDED #include "aes.h" -#include "des.h" #include "sha.h" enum yarrow_pool_id { YARROW_FAST = 0, YARROW_SLOW = 1 }; @@ -41,34 +40,8 @@ struct yarrow_source enum yarrow_pool_id next; }; -/* Yarrow-160, based on SHA1 and DES3 */ -struct yarrow160_ctx -{ - /* Indexed by yarrow_pool_id */ - struct sha1_ctx pools[2]; - - int seeded; - - struct des3_ctx key; - - unsigned nsources; - struct yarrow_source *sources; -}; - -void -yarrow160_init(struct yarrow160_ctx *ctx, - unsigned nsources, - struct yarrow_source *sources); - -void -yarrow160_update(struct yarrow160_ctx *ctx, - unsigned source, unsigned length, const uint8_t *data); -void -yarrow160_random(struct yarrow160_ctx *ctx, unsigned length, uint8_t dst); - -int -yarrow160_seeded(struct yarrow160_ctx *ctx); +#define YARROW256_SEED_FILE_SIZE (2 * AES_BLOCK_SIZE) /* Yarrow-256, based on SHA-256 and AES-256 */ struct yarrow256_ctx @@ -76,9 +49,11 @@ struct yarrow256_ctx /* Indexed by yarrow_pool_id */ struct sha256_ctx pools[2]; + uint8_t seed_file[YARROW256_SEED_FILE_SIZE]; + int seeded; - /* The current key key and counter block */ + /* The current key and counter block */ struct aes_ctx key; uint8_t counter[AES_BLOCK_SIZE]; @@ -93,6 +68,12 @@ yarrow256_init(struct yarrow256_ctx *ctx, struct yarrow_source *sources); void +yarrow256_seed(struct yarrow256_ctx *ctx, + unsigned length, + uint8_t *seed_file); + +/* Returns 1 on reseed */ +int yarrow256_update(struct yarrow256_ctx *ctx, unsigned source, unsigned entropy, unsigned length, const uint8_t *data); @@ -103,6 +84,7 @@ yarrow256_random(struct yarrow256_ctx *ctx, unsigned length, uint8_t *dst); int yarrow256_seeded(struct yarrow256_ctx *ctx); + /* Key event estimator */ #define YARROW_KEY_EVENT_BUFFER 16