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