1 /* $OpenBSD: modes.h,v 1.3 2018/07/24 10:47:19 bcook Exp $ */
2 /* ====================================================================
3  * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
4  *
5  * Rights for redistribution and usage in source and binary
6  * forms are granted according to the OpenSSL license.
7  */
8 
9 #include <stddef.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 typedef void (*block128_f)(const unsigned char in[16],
16 			unsigned char out[16],
17 			const void *key);
18 
19 typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out,
20 			size_t len, const void *key,
21 			unsigned char ivec[16], int enc);
22 
23 typedef void (*ctr128_f)(const unsigned char *in, unsigned char *out,
24 			size_t blocks, const void *key,
25 			const unsigned char ivec[16]);
26 
27 typedef void (*ccm128_f)(const unsigned char *in, unsigned char *out,
28 			size_t blocks, const void *key,
29 			const unsigned char ivec[16],unsigned char cmac[16]);
30 
31 void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
32 			size_t len, const void *key,
33 			unsigned char ivec[16], block128_f block);
34 void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
35 			size_t len, const void *key,
36 			unsigned char ivec[16], block128_f block);
37 
38 void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
39 			size_t len, const void *key,
40 			unsigned char ivec[16], unsigned char ecount_buf[16],
41 			unsigned int *num, block128_f block);
42 
43 void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
44 			size_t len, const void *key,
45 			unsigned char ivec[16], unsigned char ecount_buf[16],
46 			unsigned int *num, ctr128_f ctr);
47 
48 void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
49 			size_t len, const void *key,
50 			unsigned char ivec[16], int *num,
51 			block128_f block);
52 
53 void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
54 			size_t len, const void *key,
55 			unsigned char ivec[16], int *num,
56 			int enc, block128_f block);
57 void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
58 			size_t length, const void *key,
59 			unsigned char ivec[16], int *num,
60 			int enc, block128_f block);
61 void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
62 			size_t bits, const void *key,
63 			unsigned char ivec[16], int *num,
64 			int enc, block128_f block);
65 
66 size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, unsigned char *out,
67 			size_t len, const void *key,
68 			unsigned char ivec[16], block128_f block);
69 size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
70 			size_t len, const void *key,
71 			unsigned char ivec[16], cbc128_f cbc);
72 size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out,
73 			size_t len, const void *key,
74 			unsigned char ivec[16], block128_f block);
75 size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
76 			size_t len, const void *key,
77 			unsigned char ivec[16], cbc128_f cbc);
78 
79 size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, unsigned char *out,
80 			size_t len, const void *key,
81 			unsigned char ivec[16], block128_f block);
82 size_t CRYPTO_nistcts128_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_nistcts128_decrypt_block(const unsigned char *in, unsigned char *out,
86 			size_t len, const void *key,
87 			unsigned char ivec[16], block128_f block);
88 size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,
89 			size_t len, const void *key,
90 			unsigned char ivec[16], cbc128_f cbc);
91 
92 typedef struct gcm128_context GCM128_CONTEXT;
93 
94 GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
95 void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx,void *key,block128_f block);
96 void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
97 			size_t len);
98 int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
99 			size_t len);
100 int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
101 			const unsigned char *in, unsigned char *out,
102 			size_t len);
103 int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
104 			const unsigned char *in, unsigned char *out,
105 			size_t len);
106 int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
107 			const unsigned char *in, unsigned char *out,
108 			size_t len, ctr128_f stream);
109 int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
110 			const unsigned char *in, unsigned char *out,
111 			size_t len, ctr128_f stream);
112 int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag,
113 			size_t len);
114 void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
115 void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
116 
117 typedef struct ccm128_context CCM128_CONTEXT;
118 
119 void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
120 	unsigned int M, unsigned int L, void *key,block128_f block);
121 int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx,
122 	const unsigned char *nonce, size_t nlen, size_t mlen);
123 void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx,
124 	const unsigned char *aad, size_t alen);
125 int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
126 	const unsigned char *inp, unsigned char *out, size_t len);
127 int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
128 	const unsigned char *inp, unsigned char *out, size_t len);
129 int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx,
130 	const unsigned char *inp, unsigned char *out, size_t len,
131 	ccm128_f stream);
132 int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx,
133 	const unsigned char *inp, unsigned char *out, size_t len,
134 	ccm128_f stream);
135 size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
136 
137 typedef struct xts128_context XTS128_CONTEXT;
138 
139 int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
140 	const unsigned char *inp, unsigned char *out, size_t len, int enc);
141 
142 #ifdef __cplusplus
143 }
144 #endif
145