Home | History | Annotate | Line # | Download | only in engines
      1 /*
      2  * Copyright 2016 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_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