The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/qat_api/common/crypto/sym/include/lac_sym_hash_precomputes.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: BSD-3-Clause */
    2 /* Copyright(c) 2007-2022 Intel Corporation */
    3 /* $FreeBSD$ */
    4 
    5 /**
    6  ***************************************************************************
    7  * @file lac_sym_hash_precomputes.h
    8  *
    9  * @defgroup LacHashDefs Hash Definitions
   10  *
   11  * @ingroup  LacHash
   12  *
   13  * Constants for hash algorithms
   14  *
   15  ***************************************************************************/
   16 #ifndef LAC_SYM_HASH_PRECOMPUTES_H
   17 #define LAC_SYM_HASH_PRECOMPUTES_H
   18 
   19 #include "lac_sym_hash.h"
   20 
   21 #define LAC_SYM_AES_CMAC_RB_128 0x87 /* constant used for   */
   22                                      /* CMAC calculation    */
   23 
   24 #define LAC_SYM_HASH_MSBIT_MASK 0x80 /* Mask to check MSB top bit */
   25                                      /* zero or one */
   26 
   27 #define LAC_SINGLE_BUFFER_HW_META_SIZE                                         \
   28         (sizeof(icp_buffer_list_desc_t) + sizeof(icp_flat_buffer_desc_t))
   29 /**< size of memory to allocate for the HW buffer list that is sent to the
   30  * QAT */
   31 
   32 #define LAC_SYM_HASH_PRECOMP_MAX_WORKING_BUFFER                                \
   33         ((sizeof(lac_sym_hash_precomp_op_data_t) * 2) +                        \
   34          sizeof(lac_sym_hash_precomp_op_t))
   35 /**< maximum size of the working data for the HMAC precompute operations
   36  *
   37  * Maximum size of lac_sym_hash_precomp_op_data_t is 264 bytes. For hash
   38  * precomputes there are 2 of these structrues and a further
   39  * lac_sym_hash_precomp_op_t structure required. This comes to a total of 536
   40  * bytes.
   41  * For the asynchronous version of the precomputes, the memory for the hash
   42  * state prefix buffer is used as the working memory. There are 584 bytes
   43  * which are alloacted for the hash state prefix buffer which is enough to
   44  * carve up for the precomputes.
   45  */
   46 
   47 #define LAC_SYM_HASH_PRECOMP_MAX_AES_ECB_DATA                                  \
   48         ((ICP_QAT_HW_AES_128_KEY_SZ) * (3))
   49 /**< Maximum size for the data that an AES ECB precompute is generated on */
   50 
   51 /**
   52  *****************************************************************************
   53  * @ingroup LacHashDefs
   54  *      Precompute type enum
   55  * @description
   56  *      Enum used to distinguish between precompute types
   57  *
   58  *****************************************************************************/
   59 typedef enum {
   60         LAC_SYM_HASH_PRECOMP_HMAC = 1,
   61         /**< Hmac precompute operation. Copy state from hash state buffer */
   62         LAC_SYM_HASH_PRECOMP_AES_ECB,
   63         /**< XCBC/CGM precompute, Copy state from data buffer */
   64 } lac_sym_hash_precomp_type_t;
   65 
   66 /**
   67  *****************************************************************************
   68  * @ingroup LacHashDefs
   69  *      overall precompute management structure
   70  * @description
   71  *      structure used to manage the precompute operations for a session
   72  *
   73  *****************************************************************************/
   74 typedef struct lac_sym_hash_precomp_op_s {
   75         lac_hash_precompute_done_cb_t callbackFn;
   76         /**< Callback function to be invoked when the final precompute completes
   77          */
   78 
   79         void *pCallbackTag;
   80         /**< Opaque data to be passed back as a parameter in the callback */
   81 
   82         QatUtilsAtomic opsPending;
   83         /**< counter used to determine if the current precompute is the
   84          * final one. */
   85 
   86 } lac_sym_hash_precomp_op_t;
   87 
   88 /**
   89  *****************************************************************************
   90  * @ingroup LacHashDefs
   91  *      hmac precompute structure as used by the QAT
   92  * @description
   93  *      data used by the QAT for HMAC precomputes
   94  *
   95  *      Must be allocated on an 8-byte aligned memory address.
   96  *
   97  *****************************************************************************/
   98 typedef struct lac_sym_hash_hmac_precomp_qat_s {
   99         Cpa8U data[LAC_HASH_SHA512_BLOCK_SIZE];
  100         /**< data to be hashed - block size of data for the algorithm */
  101         /* NOTE: to save space we could have got the QAT to overwrite
  102          * this with the hash state storage */
  103         icp_qat_fw_la_auth_req_params_t hashReqParams;
  104         /**< Request parameters as read in by the QAT */
  105         Cpa8U bufferDesc[LAC_SINGLE_BUFFER_HW_META_SIZE];
  106         /**< Buffer descriptor structure */
  107         Cpa8U hashStateStorage[LAC_MAX_HASH_STATE_STORAGE_SIZE];
  108         /**< Internal buffer where QAT writes the intermediate partial
  109          * state that is used in the precompute */
  110 } lac_sym_hash_hmac_precomp_qat_t;
  111 
  112 /**
  113  *****************************************************************************
  114  * @ingroup LacHashDefs
  115  *      AES ECB precompute structure as used by the QAT
  116  * @description
  117  *      data used by the QAT for AES ECB precomptes
  118  *
  119  *      Must be allocated on an 8-byte aligned memory address.
  120  *
  121  *****************************************************************************/
  122 typedef struct lac_sym_hash_aes_precomp_qat_s {
  123         Cpa8U contentDesc[LAC_SYM_QAT_MAX_CIPHER_SETUP_BLK_SZ];
  124         /**< Content descriptor for a cipher operation */
  125         Cpa8U data[LAC_SYM_HASH_PRECOMP_MAX_AES_ECB_DATA];
  126         /**< The data to be ciphered is conatined here and the result is
  127          * written in place back into this buffer */
  128         icp_qat_fw_la_cipher_req_params_t cipherReqParams;
  129         /**< Request parameters as read in by the QAT */
  130         Cpa8U bufferDesc[LAC_SINGLE_BUFFER_HW_META_SIZE];
  131         /**< Buffer descriptor structure */
  132 } lac_sym_hash_aes_precomp_qat_t;
  133 
  134 /**
  135  *****************************************************************************
  136  * @ingroup LacHashDefs
  137  *      overall structure for managing a single precompute operation
  138  * @description
  139  *      overall structure for managing a single precompute operation
  140  *
  141  *      Must be allocated on an 8-byte aligned memory address.
  142  *
  143  *****************************************************************************/
  144 typedef struct lac_sym_hash_precomp_op_data_s {
  145         sal_crypto_service_t *pInstance;
  146         /**< Instance handle for the operation */
  147         Cpa8U reserved[4];
  148         /**< padding to align later structures on minimum 8-Byte address */
  149         lac_sym_hash_precomp_type_t opType;
  150         /**< operation type to determine the precompute type in the callback */
  151         lac_sym_hash_precomp_op_t *pOpStatus;
  152         /**< structure containing the counter and the condition for the overall
  153          * precompute operation. This is a pointer because the memory structure
  154          * may be shared between precomputes when there are more than 1 as in
  155          * the
  156          * case of HMAC */
  157         union {
  158                 lac_sym_hash_hmac_precomp_qat_t hmacQatData;
  159                 /**< Data sent to the QAT for hmac precomputes */
  160                 lac_sym_hash_aes_precomp_qat_t aesQatData;
  161                 /**< Data sent to the QAT for AES ECB precomputes */
  162         } u;
  163 
  164         /**< ASSUMPTION: The above structures are 8 byte aligned if the overall
  165          * struct is 8 byte aligned, as there are two 4 byte fields before this
  166          * union */
  167         Cpa32U stateSize;
  168         /**< Size of the state to be copied into the state pointer in the
  169          * content
  170          * descriptor */
  171         Cpa8U *pState;
  172         /**< pointer to the state in the content descriptor where the result of
  173          * the precompute should be copied to */
  174 } lac_sym_hash_precomp_op_data_t;
  175 
  176 #endif /* LAC_SYM_HASH_PRECOMPUTES_H */

Cache object: ce0982627c462b755194504d4e4ae7eb


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.