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