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