xref: /src/crypto/openssl/providers/implementations/include/prov/ciphercommon_aead.h (revision f25b8c9fb4f58cf61adb47d7570abe7caa6d385d)
1 /*
2  * Copyright 2019-2023 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 OSSL_PROV_CIPHERCOMMON_AEAD_H
11 #define OSSL_PROV_CIPHERCOMMON_AEAD_H
12 #pragma once
13 
14 #define UNINITIALISED_SIZET ((size_t)-1)
15 
16 #define AEAD_FLAGS (PROV_CIPHER_FLAG_AEAD | PROV_CIPHER_FLAG_CUSTOM_IV)
17 
18 #define IMPLEMENT_aead_cipher(alg, lc, UCMODE, flags, kbits, blkbits, ivbits)   \
19     static OSSL_FUNC_cipher_get_params_fn alg##_##kbits##_##lc##_get_params;    \
20     static int alg##_##kbits##_##lc##_get_params(OSSL_PARAM params[])           \
21     {                                                                           \
22         return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
23             flags, kbits, blkbits, ivbits);                                     \
24     }                                                                           \
25     static OSSL_FUNC_cipher_newctx_fn alg##kbits##lc##_newctx;                  \
26     static void *alg##kbits##lc##_newctx(void *provctx)                         \
27     {                                                                           \
28         return alg##_##lc##_newctx(provctx, kbits);                             \
29     }                                                                           \
30     static void *alg##kbits##lc##_dupctx(void *src)                             \
31     {                                                                           \
32         return alg##_##lc##_dupctx(src);                                        \
33     }                                                                           \
34     const OSSL_DISPATCH ossl_##alg##kbits##lc##_functions[] = {                 \
35         { OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))alg##kbits##lc##_newctx },   \
36         { OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))alg##_##lc##_freectx },     \
37         { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))alg##kbits##lc##_dupctx },   \
38         { OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))ossl_##lc##_einit },   \
39         { OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))ossl_##lc##_dinit },   \
40         { OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))ossl_##lc##_stream_update }, \
41         { OSSL_FUNC_CIPHER_FINAL, (void (*)(void))ossl_##lc##_stream_final },   \
42         { OSSL_FUNC_CIPHER_CIPHER, (void (*)(void))ossl_##lc##_cipher },        \
43         { OSSL_FUNC_CIPHER_GET_PARAMS,                                          \
44             (void (*)(void))alg##_##kbits##_##lc##_get_params },                \
45         { OSSL_FUNC_CIPHER_GET_CTX_PARAMS,                                      \
46             (void (*)(void))ossl_##lc##_get_ctx_params },                       \
47         { OSSL_FUNC_CIPHER_SET_CTX_PARAMS,                                      \
48             (void (*)(void))ossl_##lc##_set_ctx_params },                       \
49         { OSSL_FUNC_CIPHER_GETTABLE_PARAMS,                                     \
50             (void (*)(void))ossl_cipher_generic_gettable_params },              \
51         { OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS,                                 \
52             (void (*)(void))ossl_cipher_aead_gettable_ctx_params },             \
53         { OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS,                                 \
54             (void (*)(void))ossl_cipher_aead_settable_ctx_params },             \
55         OSSL_DISPATCH_END                                                       \
56     }
57 
58 #endif
59