jpayne@69
|
1 /*
|
jpayne@69
|
2 * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
|
jpayne@69
|
3 *
|
jpayne@69
|
4 * Licensed under the OpenSSL license (the "License"). You may not use
|
jpayne@69
|
5 * this file except in compliance with the License. You can obtain a copy
|
jpayne@69
|
6 * in the file LICENSE in the source distribution or at
|
jpayne@69
|
7 * https://www.openssl.org/source/license.html
|
jpayne@69
|
8 */
|
jpayne@69
|
9
|
jpayne@69
|
10 #ifndef HEADER_MODES_H
|
jpayne@69
|
11 # define HEADER_MODES_H
|
jpayne@69
|
12
|
jpayne@69
|
13 # include <stddef.h>
|
jpayne@69
|
14
|
jpayne@69
|
15 # ifdef __cplusplus
|
jpayne@69
|
16 extern "C" {
|
jpayne@69
|
17 # endif
|
jpayne@69
|
18 typedef void (*block128_f) (const unsigned char in[16],
|
jpayne@69
|
19 unsigned char out[16], const void *key);
|
jpayne@69
|
20
|
jpayne@69
|
21 typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,
|
jpayne@69
|
22 size_t len, const void *key,
|
jpayne@69
|
23 unsigned char ivec[16], int enc);
|
jpayne@69
|
24
|
jpayne@69
|
25 typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,
|
jpayne@69
|
26 size_t blocks, const void *key,
|
jpayne@69
|
27 const unsigned char ivec[16]);
|
jpayne@69
|
28
|
jpayne@69
|
29 typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,
|
jpayne@69
|
30 size_t blocks, const void *key,
|
jpayne@69
|
31 const unsigned char ivec[16],
|
jpayne@69
|
32 unsigned char cmac[16]);
|
jpayne@69
|
33
|
jpayne@69
|
34 void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
35 size_t len, const void *key,
|
jpayne@69
|
36 unsigned char ivec[16], block128_f block);
|
jpayne@69
|
37 void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
38 size_t len, const void *key,
|
jpayne@69
|
39 unsigned char ivec[16], block128_f block);
|
jpayne@69
|
40
|
jpayne@69
|
41 void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
42 size_t len, const void *key,
|
jpayne@69
|
43 unsigned char ivec[16],
|
jpayne@69
|
44 unsigned char ecount_buf[16], unsigned int *num,
|
jpayne@69
|
45 block128_f block);
|
jpayne@69
|
46
|
jpayne@69
|
47 void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
48 size_t len, const void *key,
|
jpayne@69
|
49 unsigned char ivec[16],
|
jpayne@69
|
50 unsigned char ecount_buf[16],
|
jpayne@69
|
51 unsigned int *num, ctr128_f ctr);
|
jpayne@69
|
52
|
jpayne@69
|
53 void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
54 size_t len, const void *key,
|
jpayne@69
|
55 unsigned char ivec[16], int *num,
|
jpayne@69
|
56 block128_f block);
|
jpayne@69
|
57
|
jpayne@69
|
58 void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
59 size_t len, const void *key,
|
jpayne@69
|
60 unsigned char ivec[16], int *num,
|
jpayne@69
|
61 int enc, block128_f block);
|
jpayne@69
|
62 void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
63 size_t length, const void *key,
|
jpayne@69
|
64 unsigned char ivec[16], int *num,
|
jpayne@69
|
65 int enc, block128_f block);
|
jpayne@69
|
66 void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
67 size_t bits, const void *key,
|
jpayne@69
|
68 unsigned char ivec[16], int *num,
|
jpayne@69
|
69 int enc, block128_f block);
|
jpayne@69
|
70
|
jpayne@69
|
71 size_t CRYPTO_cts128_encrypt_block(const unsigned char *in,
|
jpayne@69
|
72 unsigned char *out, size_t len,
|
jpayne@69
|
73 const void *key, unsigned char ivec[16],
|
jpayne@69
|
74 block128_f block);
|
jpayne@69
|
75 size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
76 size_t len, const void *key,
|
jpayne@69
|
77 unsigned char ivec[16], cbc128_f cbc);
|
jpayne@69
|
78 size_t CRYPTO_cts128_decrypt_block(const unsigned char *in,
|
jpayne@69
|
79 unsigned char *out, size_t len,
|
jpayne@69
|
80 const void *key, unsigned char ivec[16],
|
jpayne@69
|
81 block128_f block);
|
jpayne@69
|
82 size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
83 size_t len, const void *key,
|
jpayne@69
|
84 unsigned char ivec[16], cbc128_f cbc);
|
jpayne@69
|
85
|
jpayne@69
|
86 size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in,
|
jpayne@69
|
87 unsigned char *out, size_t len,
|
jpayne@69
|
88 const void *key,
|
jpayne@69
|
89 unsigned char ivec[16],
|
jpayne@69
|
90 block128_f block);
|
jpayne@69
|
91 size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
92 size_t len, const void *key,
|
jpayne@69
|
93 unsigned char ivec[16], cbc128_f cbc);
|
jpayne@69
|
94 size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in,
|
jpayne@69
|
95 unsigned char *out, size_t len,
|
jpayne@69
|
96 const void *key,
|
jpayne@69
|
97 unsigned char ivec[16],
|
jpayne@69
|
98 block128_f block);
|
jpayne@69
|
99 size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,
|
jpayne@69
|
100 size_t len, const void *key,
|
jpayne@69
|
101 unsigned char ivec[16], cbc128_f cbc);
|
jpayne@69
|
102
|
jpayne@69
|
103 typedef struct gcm128_context GCM128_CONTEXT;
|
jpayne@69
|
104
|
jpayne@69
|
105 GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
|
jpayne@69
|
106 void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);
|
jpayne@69
|
107 void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
|
jpayne@69
|
108 size_t len);
|
jpayne@69
|
109 int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
|
jpayne@69
|
110 size_t len);
|
jpayne@69
|
111 int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
jpayne@69
|
112 const unsigned char *in, unsigned char *out,
|
jpayne@69
|
113 size_t len);
|
jpayne@69
|
114 int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
jpayne@69
|
115 const unsigned char *in, unsigned char *out,
|
jpayne@69
|
116 size_t len);
|
jpayne@69
|
117 int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
jpayne@69
|
118 const unsigned char *in, unsigned char *out,
|
jpayne@69
|
119 size_t len, ctr128_f stream);
|
jpayne@69
|
120 int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
jpayne@69
|
121 const unsigned char *in, unsigned char *out,
|
jpayne@69
|
122 size_t len, ctr128_f stream);
|
jpayne@69
|
123 int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
|
jpayne@69
|
124 size_t len);
|
jpayne@69
|
125 void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
|
jpayne@69
|
126 void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
|
jpayne@69
|
127
|
jpayne@69
|
128 typedef struct ccm128_context CCM128_CONTEXT;
|
jpayne@69
|
129
|
jpayne@69
|
130 void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
|
jpayne@69
|
131 unsigned int M, unsigned int L, void *key,
|
jpayne@69
|
132 block128_f block);
|
jpayne@69
|
133 int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce,
|
jpayne@69
|
134 size_t nlen, size_t mlen);
|
jpayne@69
|
135 void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad,
|
jpayne@69
|
136 size_t alen);
|
jpayne@69
|
137 int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
|
jpayne@69
|
138 unsigned char *out, size_t len);
|
jpayne@69
|
139 int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
|
jpayne@69
|
140 unsigned char *out, size_t len);
|
jpayne@69
|
141 int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
|
jpayne@69
|
142 unsigned char *out, size_t len,
|
jpayne@69
|
143 ccm128_f stream);
|
jpayne@69
|
144 int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
|
jpayne@69
|
145 unsigned char *out, size_t len,
|
jpayne@69
|
146 ccm128_f stream);
|
jpayne@69
|
147 size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
|
jpayne@69
|
148
|
jpayne@69
|
149 typedef struct xts128_context XTS128_CONTEXT;
|
jpayne@69
|
150
|
jpayne@69
|
151 int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
|
jpayne@69
|
152 const unsigned char iv[16],
|
jpayne@69
|
153 const unsigned char *inp, unsigned char *out,
|
jpayne@69
|
154 size_t len, int enc);
|
jpayne@69
|
155
|
jpayne@69
|
156 size_t CRYPTO_128_wrap(void *key, const unsigned char *iv,
|
jpayne@69
|
157 unsigned char *out,
|
jpayne@69
|
158 const unsigned char *in, size_t inlen,
|
jpayne@69
|
159 block128_f block);
|
jpayne@69
|
160
|
jpayne@69
|
161 size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,
|
jpayne@69
|
162 unsigned char *out,
|
jpayne@69
|
163 const unsigned char *in, size_t inlen,
|
jpayne@69
|
164 block128_f block);
|
jpayne@69
|
165 size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv,
|
jpayne@69
|
166 unsigned char *out, const unsigned char *in,
|
jpayne@69
|
167 size_t inlen, block128_f block);
|
jpayne@69
|
168 size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv,
|
jpayne@69
|
169 unsigned char *out, const unsigned char *in,
|
jpayne@69
|
170 size_t inlen, block128_f block);
|
jpayne@69
|
171
|
jpayne@69
|
172 # ifndef OPENSSL_NO_OCB
|
jpayne@69
|
173 typedef struct ocb128_context OCB128_CONTEXT;
|
jpayne@69
|
174
|
jpayne@69
|
175 typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out,
|
jpayne@69
|
176 size_t blocks, const void *key,
|
jpayne@69
|
177 size_t start_block_num,
|
jpayne@69
|
178 unsigned char offset_i[16],
|
jpayne@69
|
179 const unsigned char L_[][16],
|
jpayne@69
|
180 unsigned char checksum[16]);
|
jpayne@69
|
181
|
jpayne@69
|
182 OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec,
|
jpayne@69
|
183 block128_f encrypt, block128_f decrypt,
|
jpayne@69
|
184 ocb128_f stream);
|
jpayne@69
|
185 int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec,
|
jpayne@69
|
186 block128_f encrypt, block128_f decrypt,
|
jpayne@69
|
187 ocb128_f stream);
|
jpayne@69
|
188 int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src,
|
jpayne@69
|
189 void *keyenc, void *keydec);
|
jpayne@69
|
190 int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv,
|
jpayne@69
|
191 size_t len, size_t taglen);
|
jpayne@69
|
192 int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad,
|
jpayne@69
|
193 size_t len);
|
jpayne@69
|
194 int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in,
|
jpayne@69
|
195 unsigned char *out, size_t len);
|
jpayne@69
|
196 int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in,
|
jpayne@69
|
197 unsigned char *out, size_t len);
|
jpayne@69
|
198 int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag,
|
jpayne@69
|
199 size_t len);
|
jpayne@69
|
200 int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len);
|
jpayne@69
|
201 void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx);
|
jpayne@69
|
202 # endif /* OPENSSL_NO_OCB */
|
jpayne@69
|
203
|
jpayne@69
|
204 # ifdef __cplusplus
|
jpayne@69
|
205 }
|
jpayne@69
|
206 # endif
|
jpayne@69
|
207
|
jpayne@69
|
208 #endif
|