xref: /openbsd/lib/libcrypto/modes/modes.h (revision 0451f6ce)
1*0451f6ceSbeck /* $OpenBSD: modes.h,v 1.6 2023/07/08 14:55:36 beck 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 
11981266b4Sbcook #ifdef __cplusplus
12981266b4Sbcook extern "C" {
13981266b4Sbcook #endif
14981266b4Sbcook 
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 
66ec07fdf1Sdjm typedef struct gcm128_context GCM128_CONTEXT;
67ec07fdf1Sdjm 
68ec07fdf1Sdjm GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
69ec07fdf1Sdjm void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);
70ec07fdf1Sdjm void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
71ec07fdf1Sdjm     size_t len);
72ec07fdf1Sdjm int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
73ec07fdf1Sdjm     size_t len);
74ec07fdf1Sdjm int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
75ec07fdf1Sdjm     const unsigned char *in, unsigned char *out,
76ec07fdf1Sdjm     size_t len);
77ec07fdf1Sdjm int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
78ec07fdf1Sdjm     const unsigned char *in, unsigned char *out,
79ec07fdf1Sdjm     size_t len);
80ec07fdf1Sdjm int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
81ec07fdf1Sdjm     const unsigned char *in, unsigned char *out,
82ec07fdf1Sdjm     size_t len, ctr128_f stream);
83ec07fdf1Sdjm int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
84ec07fdf1Sdjm     const unsigned char *in, unsigned char *out,
85ec07fdf1Sdjm     size_t len, ctr128_f stream);
86ec07fdf1Sdjm int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
87ec07fdf1Sdjm     size_t len);
88ec07fdf1Sdjm void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
89ec07fdf1Sdjm void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
90ec07fdf1Sdjm 
91ec07fdf1Sdjm typedef struct ccm128_context CCM128_CONTEXT;
92ec07fdf1Sdjm 
93ec07fdf1Sdjm void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
94ec07fdf1Sdjm     unsigned int M, unsigned int L, void *key, block128_f block);
95ec07fdf1Sdjm int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx,
96ec07fdf1Sdjm     const unsigned char *nonce, size_t nlen, size_t mlen);
97ec07fdf1Sdjm void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx,
98ec07fdf1Sdjm     const unsigned char *aad, size_t alen);
99ec07fdf1Sdjm int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
100ec07fdf1Sdjm     const unsigned char *inp, unsigned char *out, size_t len);
101ec07fdf1Sdjm int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
102ec07fdf1Sdjm     const unsigned char *inp, unsigned char *out, size_t len);
103ec07fdf1Sdjm int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx,
104ec07fdf1Sdjm     const unsigned char *inp, unsigned char *out, size_t len,
105ec07fdf1Sdjm     ccm128_f stream);
106ec07fdf1Sdjm int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx,
107ec07fdf1Sdjm     const unsigned char *inp, unsigned char *out, size_t len,
108ec07fdf1Sdjm     ccm128_f stream);
109ec07fdf1Sdjm size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
110ec07fdf1Sdjm 
111ec07fdf1Sdjm typedef struct xts128_context XTS128_CONTEXT;
112ec07fdf1Sdjm 
113ec07fdf1Sdjm int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16],
114ec07fdf1Sdjm     const unsigned char *inp, unsigned char *out, size_t len, int enc);
115981266b4Sbcook 
116981266b4Sbcook #ifdef __cplusplus
117981266b4Sbcook }
118981266b4Sbcook #endif
119