xref: /freebsd/crypto/openssl/engines/e_afalg.h (revision ec0ea6efa1ad229d75c394c1a9b9cac33af2b1d3)
1 /*
2  * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (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_ENGINES_E_AFALG_H
11 # define OSSL_ENGINES_E_AFALG_H
12 
13 # if defined(__GNUC__) && __GNUC__ >= 4 && \
14      (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)
15 #  pragma GCC diagnostic ignored "-Wvariadic-macros"
16 # endif
17 
18 # ifdef ALG_DEBUG
19 #  define ALG_DGB(x, ...) fprintf(stderr, "ALG_DBG: " x, __VA_ARGS__)
20 #  define ALG_INFO(x, ...) fprintf(stderr, "ALG_INFO: " x, __VA_ARGS__)
21 #  define ALG_WARN(x, ...) fprintf(stderr, "ALG_WARN: " x, __VA_ARGS__)
22 # else
23 #  define ALG_DGB(x, ...)
24 #  define ALG_INFO(x, ...)
25 #  define ALG_WARN(x, ...)
26 # endif
27 
28 # define ALG_ERR(x, ...) fprintf(stderr, "ALG_ERR: " x, __VA_ARGS__)
29 # define ALG_PERR(x, ...) \
30                 do { \
31                     fprintf(stderr, "ALG_PERR: " x, __VA_ARGS__); \
32                     perror(NULL); \
33                 } while(0)
34 # define ALG_PWARN(x, ...) \
35                 do { \
36                     fprintf(stderr, "ALG_PERR: " x, __VA_ARGS__); \
37                     perror(NULL); \
38                 } while(0)
39 
40 # ifndef AES_BLOCK_SIZE
41 #  define AES_BLOCK_SIZE   16
42 # endif
43 # define AES_KEY_SIZE_128 16
44 # define AES_KEY_SIZE_192 24
45 # define AES_KEY_SIZE_256 32
46 # define AES_IV_LEN       16
47 
48 # define MAX_INFLIGHTS 1
49 
50 typedef enum {
51     MODE_UNINIT = 0,
52     MODE_SYNC,
53     MODE_ASYNC
54 } op_mode;
55 
56 enum {
57     AES_CBC_128 = 0,
58     AES_CBC_192,
59     AES_CBC_256
60 };
61 
62 struct cbc_cipher_handles {
63     int key_size;
64     EVP_CIPHER *_hidden;
65 };
66 
67 typedef struct cbc_cipher_handles cbc_handles;
68 
69 struct afalg_aio_st {
70     int efd;
71     op_mode mode;
72     aio_context_t aio_ctx;
73     struct io_event events[MAX_INFLIGHTS];
74     struct iocb cbt[MAX_INFLIGHTS];
75 };
76 typedef struct afalg_aio_st afalg_aio;
77 
78 /*
79  * MAGIC Number to identify correct initialisation
80  * of afalg_ctx.
81  */
82 # define MAGIC_INIT_NUM 0x1890671
83 
84 struct afalg_ctx_st {
85     int init_done;
86     int sfd;
87     int bfd;
88 # ifdef ALG_ZERO_COPY
89     int zc_pipe[2];
90 # endif
91     afalg_aio aio;
92 };
93 
94 typedef struct afalg_ctx_st afalg_ctx;
95 #endif
96