Annotation of embedaddon/strongswan/src/libstrongswan/crypto/rngs/rng.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Tobias Brunner
3: * Copyright (C) 2008 Martin Willi
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: /**
18: * @defgroup rng rng
19: * @{ @ingroup crypto
20: */
21:
22: #ifndef RNG_H_
23: #define RNG_H_
24:
25: typedef enum rng_quality_t rng_quality_t;
26: typedef struct rng_t rng_t;
27:
28: #include <library.h>
29:
30: /**
31: * Quality of generated random bytes.
32: */
33: enum rng_quality_t {
34: /** weak randomness, usable for nonces, IVs */
35: RNG_WEAK,
36: /** stronger randomness, usable for session keys */
37: RNG_STRONG,
38: /** true random key material */
39: RNG_TRUE,
40: };
41:
42: /**
43: * enum name for rng_quality_t.
44: */
45: extern enum_name_t *rng_quality_names;
46:
47: /**
48: * Generic interface for random number generators.
49: */
50: struct rng_t {
51:
52: /**
53: * Generates random bytes and writes them in the buffer.
54: *
55: * @param len number of bytes to get
56: * @param buffer pointer where the generated bytes will be written
57: * @return TRUE if bytes successfully written
58: */
59: bool (*get_bytes)(rng_t *this, size_t len,
60: uint8_t *buffer) __attribute__((warn_unused_result));
61:
62: /**
63: * Generates random bytes and allocate space for them.
64: *
65: * @param len number of bytes to get
66: * @param chunk chunk which will hold generated bytes
67: * @return TRUE if allocation succeeded
68: */
69: bool (*allocate_bytes)(rng_t *this, size_t len,
70: chunk_t *chunk) __attribute__((warn_unused_result));
71:
72: /**
73: * Destroys a rng object.
74: */
75: void (*destroy)(rng_t *this);
76: };
77:
78: /**
79: * Wrapper around rng_t.get_bytes() ensuring that either all bytes or at least
80: * the first byte is not zero.
81: *
82: * @param rng rng_t object
83: * @param len number of bytes to get
84: * @param buffer pointer where the generated bytes will be written
85: * @param all TRUE if all bytes have to be non-zero, FALSE for first
86: * @return TRUE if bytes successfully written
87: */
88: bool rng_get_bytes_not_zero(rng_t *rng, size_t len, uint8_t *buffer,
89: bool all) __attribute__((warn_unused_result));
90:
91: /**
92: * Wrapper around rng_t.allocate_bytes() ensuring that either all bytes or at
93: * least the first byte is not zero.
94: *
95: * @param rng rng_t object
96: * @param len number of bytes to get
97: * @param chunk chunk that stores the generated bytes (allocated)
98: * @param all TRUE if all bytes have to be non-zero, FALSE for first
99: * @return TRUE if bytes successfully written
100: */
101: bool rng_allocate_bytes_not_zero(rng_t *rng, size_t len, chunk_t *chunk,
102: bool all) __attribute__((warn_unused_result));
103:
104:
105:
106: #endif /** RNG_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>