yarrow.h 2.57 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* yarrow.h
 *
 * The yarrow pseudo-randomness generator.
 */

/* nettle, low-level cryptographics library
 *
 * Copyright (C) 2001 Niels Mller
 *  
 * The nettle library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * The nettle library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 * License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with the nettle library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */
 
#ifndef NETTLE_YARROW_COMPAT_H_INCLUDED
#define NETTLE_YARROW_COMPAT_H_INCLUDED

29
#include "aes.h"
Niels Möller's avatar
Niels Möller committed
30
#include "des.h"
31
#include "sha.h"
Niels Möller's avatar
Niels Möller committed
32
33
34
35
36

enum yarrow_pool_id { YARROW_FAST = 0, YARROW_SLOW = 1 };

struct yarrow_source
{
37
38
  /* Indexed by yarrow_pool_id */
  uint32_t estimate[2];
Niels Möller's avatar
Niels Möller committed
39
40
41
42
43
  
  /* The pool next sample should go to. */
  enum yarrow_pool_id next;
};

44
/* Yarrow-160, based on SHA1 and DES3 */
Niels Möller's avatar
Niels Möller committed
45
46
struct yarrow160_ctx
{
Niels Möller's avatar
Niels Möller committed
47
48
49
50
51
52
53
54
55
  /* Indexed by yarrow_pool_id */
  struct sha1_ctx pools[2];

  int seeded;
  
  struct des3_ctx key;
  
  unsigned nsources;
  struct yarrow_source *sources;
Niels Möller's avatar
Niels Möller committed
56
57
58
};

void
Niels Möller's avatar
Niels Möller committed
59
60
61
yarrow160_init(struct yarrow160_ctx *ctx,
	       int nsources,
	       struct yarrow_source *sources);
Niels Möller's avatar
Niels Möller committed
62
63

void
Niels Möller's avatar
Niels Möller committed
64
65
yarrow160_update(struct yarrow160_ctx *ctx,
		 unsigned source, unsigned length, const uint8_t *data);
Niels Möller's avatar
Niels Möller committed
66
67

void
Niels Möller's avatar
Niels Möller committed
68
69
70
71
yarrow160_random(struct yarrow160_ctx *ctx, unsigned length, uint8_t dst);

int
yarrow160_seeded(struct yarrow160_ctx *ctx);
Niels Möller's avatar
Niels Möller committed
72

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* Yarrow-256, based on SHA-256 and AES-256 */
struct yarrow256_ctx
{
  /* Indexed by yarrow_pool_id */
  struct sha256_ctx pools[2];

  int seeded;

  /* The current key key and counter block */
  struct aes_ctx key;
  uint8_t counter[AES_BLOCK_SIZE];

  /* The entropy sources */
  unsigned nsources;
  struct yarrow_source *sources;
};

void
yarrow256_init(struct yarrow256_ctx *ctx,
	       int nsources,
	       struct yarrow_source *sources);

void
yarrow256_update(struct yarrow256_ctx *ctx,
		 unsigned source, unsigned entropy,
		 unsigned length, const uint8_t *data);

void
yarrow256_random(struct yarrow256_ctx *ctx, unsigned length, uint8_t *dst);

int
yarrow256_seeded(struct yarrow256_ctx *ctx);

Niels Möller's avatar
Niels Möller committed
106
107

#endif /* NETTLE_YARROW_COMPAT_H_INCLUDED */