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