Rearrange the file tree.
[u/mdw/catacomb] / rand / sslprf.h
1 /* -*-c-*-
2 *
3 * The SSL pseudo-random function
4 *
5 * (c) 2001 Straylight/Edgeware
6 */
7
8 /*----- Licensing notice --------------------------------------------------*
9 *
10 * This file is part of Catacomb.
11 *
12 * Catacomb is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU Library General Public License as
14 * published by the Free Software Foundation; either version 2 of the
15 * License, or (at your option) any later version.
16 *
17 * Catacomb is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU Library General Public License for more details.
21 *
22 * You should have received a copy of the GNU Library General Public
23 * License along with Catacomb; if not, write to the Free
24 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25 * MA 02111-1307, USA.
26 */
27
28 #ifndef CATACOMB_SSLPRF_H
29 #define CATACOMB_SSLPRF_H
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 /*----- Header files ------------------------------------------------------*/
36
37 #ifndef CATACOMB_GMAC_H
38 # include "gmac.h"
39 #endif
40
41 #ifndef CATACOMB_GRAND_H
42 # include "grand.h"
43 #endif
44
45 /*----- Data structures ---------------------------------------------------*/
46
47 typedef struct sslprf_ctx {
48 const gchash *co, *ci; /* Outer and inner hash functions */
49 size_t ohashsz, ihashsz; /* Size of the hash outputs */
50 ghash *h; /* Hash context from last time */
51 const octet *k; /* Pointer to the secret */
52 size_t ksz; /* Size of the secret buffer */
53 const octet *sd; /* Pointer to the seed */
54 size_t sdsz; /* Size of the seed buffer */
55 unsigned i; /* Which iteration this is */
56 octet *p; /* Pointer to output buffer */
57 size_t sz; /* How many bytes are left */
58 } sslprf_ctx;
59
60 /*----- Functions provided ------------------------------------------------*/
61
62 /* --- @sslprf_init@ --- *
63 *
64 * Arguments: @sslprf_ctx *c@ = pointer to a context structure
65 * @const gchash *hco, *hci@ = outer and inner hash functions
66 * @const void *k@ = pointer to secret buffer
67 * @size_t ksz@ = size of the secret
68 * @const void *sd@ = pointer to seed buffer
69 * @size_t sdsz@ = size of the seed
70 *
71 * Returns: ---
72 *
73 * Use: Initializes an SSL generator context.
74 */
75
76 extern void sslprf_init(sslprf_ctx */*c*/,
77 const gchash */*hco*/, const gchash */*hci*/,
78 const void */*k*/, size_t /*ksz*/,
79 const void */*sd*/, size_t /*sdsz*/);
80
81 /* --- @sslprf_encrypt@ --- *
82 *
83 * Arguments: @sslprf_ctx *c@ = pointer to a context structure
84 * @const void *src@ = pointer to source buffer
85 * @void *dest@ = pointer to destination buffer
86 * @size_t sz@ = size of the buffers
87 *
88 * Returns: ---
89 *
90 * Use: Encrypts data using the SSL pseudo-random function. If the
91 * destination pointer is null, the generator is spun and no
92 * output is produced; if the source pointer is null, raw output
93 * from the generator is written; otherwise, the source data is
94 * XORed with the generator output.
95 */
96
97 extern void sslprf_encrypt(sslprf_ctx */*c*/,
98 const void */*src*/, void */*dest*/,
99 size_t /*sz*/);
100
101 /* --- @sslprf_free@ --- *
102 *
103 * Arguments: @sslprf_ctx@ = pointer to a context
104 *
105 * Returns: ---
106 *
107 * Use: Frees resources held in an SSL generator context.
108 */
109
110 extern void sslprf_free(sslprf_ctx */*c*/);
111
112 /* ---@sslprf_rand@ --- *
113 *
114 * Arguments: @const gchash *hco, const gchash *hci@ = hash functions
115 * @const void *k@ = pointer to the key material
116 * @size_t ksz@ = size of the key material
117 * @const void *sd@ = pointer to the seed material
118 * @size_t sdsz@ = size of the seed material
119 *
120 * Returns: Pointer to generic random number generator interface.
121 *
122 * Use: Creates a generic generator which does TLS data expansion.
123 */
124
125 extern grand *sslprf_rand(const gchash */*hco*/, const gchash */*hci*/,
126 const void */*k*/, size_t /*ksz*/,
127 const void */*sd*/, size_t /*sdsz*/);
128
129 /*----- That's all, folks -------------------------------------------------*/
130
131 #ifdef __cplusplus
132 }
133 #endif
134
135 #endif