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.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 /***************************************************************************
    2  *
    3  * <COPYRIGHT_TAG>
    4  *
    5  ***************************************************************************/
    6 
    7 /**
    8  *****************************************************************************
    9  * @file lac_sym_hash.h
   10  *
   11  * @defgroup  LacHash  Hash
   12  *
   13  * @ingroup LacSym
   14  *
   15  * API functions of the Hash component
   16  *
   17  * @lld_start
   18  * @lld_overview
   19  * There is a single \ref cpaCySym "Symmetric LAC API" for hash, cipher,
   20  * auth encryption and algorithm chaining. This API is implemented by the
   21  * \ref LacSym "Symmetric" module. It demultiplexes calls to this API into
   22  * their basic operation and does some common parameter checking and deals
   23  * with accesses to the session table.
   24  *
   25  * The hash component supports hashing in 3 modes. PLAIN, AUTH and NESTED.
   26  * Plain mode is used to provide data integrity while auth mode is used to
   27  * provide integrity as well as its authenticity. Nested mode is inteded
   28  * for use by non standard HMAC like algorithms such as for the SSL master
   29  * key secret. Partial packets is supported for both plain and auth modes.
   30  * In-place and out-of-place processing is supported for all modes. The
   31  * verify operation is supported for PLAIN and AUTH modes only.
   32  *
   33  * The hash component is responsible for implementing the hash specific
   34  * functionality for initialising a session and for a perform operation.
   35  * Statistics are maintained in the symmetric \ref CpaCySymStats64 "stats"
   36  * structure. This module has been seperated out into two. The hash QAT module
   37  * deals entirely with QAT data structures. The hash module itself has minimal
   38  * exposure to the QAT data structures.
   39  *
   40  * @lld_dependencies
   41  * - \ref LacCommon
   42  * - \ref LacSymQat "Symmetric QAT": Hash uses the lookup table provided by
   43  *   this module to validate user input. Hash also uses this module to build
   44  *   the hash QAT request message, request param structure, populate the
   45  *   content descriptor, allocate and populate the hash state prefix buffer.
   46  *   Hash also registers its function to process the QAT response with this
   47  *   module.
   48  * - OSAL : For memory functions, atomics and locking
   49  *
   50  * @lld_module_algorithms
   51  * <b>a. HMAC Precomputes</b>\n
   52  * HMAC algorithm is specified as follows:
   53  * \f$ HMAC(msg) = hash((key \oplus opad) \parallel
   54  * hash((key \oplus ipad) \parallel msg ))\f$.
   55  * The key is fixed per session, and is padded up to the block size of the
   56  * algorithm if necessary and xored with the ipad/opad. The following portion
   57  * of the operation can be precomputed: \f$ hash(key \oplus ipad) \f$ as the
   58  * output of this intermediate hash will be the same for every perform
   59  * operation. This intermediate state is the intermediate state of a partial
   60  * partial packet. It is used as the initialiser state to \f$ hash(msg) \f$.
   61  * The same applies to \f$ hash(key \oplus ipad) \f$. There is a saving in
   62  * the data path by the length of time it takes to do two hashes on a block
   63  * size of data. Note: a partial packet operation generates an intermediate
   64  * state. The final operation on a partial packet or when a full packet is
   65  * used applies padding and gives the final hash result. Esentially for the
   66  * inner hash, a partial packet final is issued on the data, using the
   67  * precomputed intermediate state and returns the digest.
   68  *
   69  * For the HMAC precomputes, \ref LacSymHash_HmacPreCompute(), there are two
   70  * hash operations done using a internal content descriptor to configure the
   71  * QAT. A first partial packet is specified as the packet type for the
   72  * pre-computes as we need the state that uses the initialiser constants
   73  * specific to the algorithm. The resulting output is copied from the hash
   74  * state prefix buffer into the QAT content descriptor for the session being
   75  * initialised. The state is used each perform operation as the initialiser
   76  * to the algorithm
   77  *
   78  * <b>b. AES XCBC Precomputes</b>\n
   79  * A similar technique to HMAC will be used to generate the precomputes for
   80  * AES XCBC. In this case a cipher operation will be used to generate the
   81  * precomputed result. The Pre-compute operation involves deriving 3 128-bit
   82  *  keys (K1, K2 and K3) from the 128-bit secret key K.
   83  *
   84  * - K1 = 0x01010101010101010101010101010101 encrypted with Key K
   85  * - K2 = 0x02020202020202020202020202020202 encrypted with Key K
   86  * - K3 = 0x03030303030303030303030303030303 encrypted with Key K
   87  *
   88  * A content descriptor  is created with the cipher algorithm set to AES
   89  * in ECB mode and with the keysize set to 128 bits. The 3 constants, 16 bytes
   90  * each, are copied into the src buffer and an in-place cipher operation is
   91  * performed on the 48 bytes. ECB mode does not maintain the state, therefore
   92  * the 3 keys can be encrypted in one perform. The encrypted result is used by
   93  * the state2 field in the hash setup block of the content descriptor.
   94  *
   95  * The precompute operations use a different lac command ID and thus have a
   96  * different route in the response path to the symmetric code. In this
   97  * precompute callback function the output of the precompute operation is
   98  * copied into the content descriptor for the session being registered.
   99  *
  100  * <b>c. AES CCM Precomputes</b>\n
  101  * The precomputes for AES CCM are trivial, i.e. there is no need to perform
  102  * a cipher or a digest operation.  Instead, the key is stored directly in
  103  * the state2 field.
  104  *
  105  * <b>d. AES GCM Precomputes</b>\n
  106  * As with AES XCBC precomputes, a cipher operation will be used to generate
  107  * the precomputed result for AES GCM.  In this case the Galois Hash
  108  * Multiplier (H) must be derived and stored in the state2 field.  H is
  109  * derived by encrypting a 16-byte block of zeroes with the
  110  * cipher/authentication key, using AES in ECB mode.
  111  *
  112  * <b>Key size for Auth algorithms</b>\n
  113  * <i>Min Size</i>\n
  114  * RFC 2104 states "The key for HMAC can be of any length. However, less than
  115  *  L bytes is strongly discouraged as it would decrease the security strength
  116  *  of the function."
  117  *
  118  * FIPS 198a states "The size of the key, K, shall be equal to or greater than
  119  * L/2, where L is the size of the hash function output."
  120  *
  121  * RFC 4434 states "If the key has fewer than 128 bits, lengthen it to exactly
  122  * 128 bits by padding it on the right with zero bits.
  123  *
  124  * A key length of 0 upwards is accepted. It is up to the client to pass in a
  125  * key that complies with the standard they wish to support.
  126  *
  127  * <i>Max Size</i>\n
  128  * RFC 2104 section 2 states : "Applications that use keys longer than B bytes
  129  * will first hash the key using H and then use the resultant L byte string
  130  * as the actual key to HMAC
  131  *
  132  * RFC 4434 section 2 states:
  133  * "If the key is 129 bits or longer, shorten it to exactly 128 bits
  134  *  by performing the steps in AES-XCBC-PRF-128 (that is, the
  135  *  algorithm described in this document).  In that re-application of
  136  *  this algorithm, the key is 128 zero bits; the message is the
  137  *  too-long current key."
  138  *
  139  * We push this up to the client. They need to do the hash operation through
  140  * the LAC API if the key is greater than the block size of the algorithm. This
  141  * will reduce the key size to the digest size of the algorithm.
  142  *
  143  * RFC 3566 section 4 states:
  144  * AES-XCBC-MAC-96 is a secret key algorithm.  For use with either ESP or
  145  * AH a fixed key length of 128-bits MUST be supported.  Key lengths
  146  * other than 128-bits MUST NOT be supported (i.e., only 128-bit keys are
  147  * to be used by AES-XCBC-MAC-96).
  148  *
  149  * In this case it is up to the client to provide a key that complies with
  150  * the standards. i.e. exactly 128 bits in size.
  151  *
  152  *
  153  * <b>HMAC-MD5-96 and HMAC-SHA1-96</b>\n
  154  * HMAC-MD5-96 and HMAC-SHA1-96 are defined as requirements by Look Aside
  155  * IPsec. The differences between HMAC-SHA1 and HMAC-SHA1-96 are that the
  156  * digest produced is truncated and there are strict requirements on the
  157  * size of the key that is used.
  158  *
  159  * They are supported in LAC by HMAC-MD5 and HMAC-SHA1. The field
  160  * \ref CpaCySymHashSetupData::digestResultLenInBytes in the LAC API in
  161  * bytes needs to be set to 12 bytes. There are also requirements regarding
  162  * the keysize. It is up to the client to ensure the key size meets the
  163  * requirements of the standards they are using.
  164  *
  165  * RFC 2403: HMAC-MD5-96 Key lengths other than 128-bits MUST NOT be supported.
  166  * HMAC-MD5-96 produces a 128-bit authenticator value. For use with either
  167  * ESP or AH, a truncated value using the first 96 bits MUST be supported.
  168  *
  169  * RFC2404: HMAC-SHA1-96 Key lengths other than 160- bits MUST NOT be supported
  170  * HMAC-SHA-1-96 produces a 160-bit authenticator value. For use with either
  171  * ESP or AH, a truncated value using the first 96 bits MUST be supported.
  172  *
  173  * <b>Out of place operations</b>
  174  * When verify is disabled, the digest will be written to the destination
  175  * buffer. When verify is enabled, the digest calculated is compared to the
  176  * digest stored in the source buffer.
  177  *
  178  * <b>Partial Packets</b>
  179  * Partial packets are handled in the \ref LacSym "Symmetric" component for
  180  * the request. The hash callback function handles the update of the state
  181  * in the callback.
  182  *
  183  *
  184  * @lld_process_context
  185  *
  186  * Session Register Sequence Diagram: For hash modes plain and nested.
  187  * \msc
  188  *  APP [label="Application"], SYM [label="Symmetric LAC"],
  189  *  Achain [label="Alg chain"], Hash, SQAT [label="Symmetric QAT"];
  190  *
  191  *  APP=>SYM [ label = "cpaCySymInitSession(cbFunc)",
  192  *             URL="\ref cpaCySymInitSession()"] ;
  193  *  SYM=>SYM [ label = "LacSymSession_ParamCheck()",
  194  *             URL="\ref LacSymSession_ParamCheck()"];
  195  *  SYM=>Achain [ label = "LacAlgChain_SessionInit()",
  196  *                URL="\ref LacAlgChain_SessionInit()"];
  197  *  Achain=>Hash [ label = "LacHash_HashContextCheck()",
  198  *               URL="\ref LacHash_HashContextCheck()"];
  199  *  Achain<<Hash [ label="return"];
  200  *  Achain=>SQAT [ label = "LacSymQat_HashContentDescInit()",
  201  *               URL="\ref LacSymQat_HashContentDescInit()"];
  202  *  Achain<<SQAT [ label="return"];
  203  *  Achain=>Hash [ label = "LacHash_StatePrefixAadBufferInit()",
  204  *               URL="\ref LacHash_StatePrefixAadBufferInit()"];
  205  *  Hash=>SQAT [ label = "LacSymQat_HashStatePrefixAadBufferSizeGet()",
  206  *               URL="\ref LacSymQat_HashStatePrefixAadBufferSizeGet()"];
  207  *  Hash<<SQAT [ label="return"];
  208  *  Hash=>SQAT [ label = "LacSymQat_HashStatePrefixAadBufferPopulate()",
  209  *               URL="\ref LacSymQat_HashStatePrefixAadBufferPopulate()"];
  210  *  Hash<<SQAT [ label="return"];
  211  *  Achain<<Hash [ label="return"];
  212  *  SYM<<Achain [ label = "status" ];
  213  *  SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
  214  *  APP<<SYM [label = "status"];
  215  * \endmsc
  216  *
  217  * Perform Sequence Diagram: For all 3 modes, full packets and in-place.
  218  * \msc
  219  *  APP [label="Application"], SYM [label="Symmetric LAC"],
  220  *  Achain [label="Alg chain"], Hash, SQAT [label="Symmetric QAT"],
  221  *  QATCOMMS [label="QAT Comms"];
  222  *
  223  *  APP=>SYM [ label = "cpaCySymPerformOp()",
  224  *             URL="\ref cpaCySymPerformOp()"] ;
  225  *  SYM=>SYM [ label = "LacSymPerform_BufferParamCheck()",
  226  *              URL="\ref LacSymPerform_BufferParamCheck()"];
  227  *  SYM=>Achain [ label = "LacAlgChain_Perform()",
  228  *                URL="\ref LacAlgChain_Perform()"];
  229  *  Achain=>Achain [ label = "Lac_MemPoolEntryAlloc()",
  230  *                  URL="\ref Lac_MemPoolEntryAlloc()"];
  231  *  Achain=>SQAT [ label = "LacSymQat_packetTypeGet()",
  232  *               URL="\ref LacSymQat_packetTypeGet()"];
  233  *  Achain<<SQAT [ label="return"];
  234  *  Achain=>Achain [ label = "LacBuffDesc_BufferListTotalSizeGet()",
  235  *                  URL="\ref LacBuffDesc_BufferListTotalSizeGet()"];
  236  *  Achain=>Hash [ label = "LacHash_PerformParamCheck()",
  237  *                  URL = "\ref LacHash_PerformParamCheck()"];
  238  *  Achain<<Hash [ label="status"];
  239  *  Achain=>SQAT [ label = "LacSymQat_HashRequestParamsPopulate()",
  240  *               URL="\ref LacSymQat_HashRequestParamsPopulate()"];
  241  *  Achain<<SQAT [ label="return"];
  242  *  Achain<<SQAT [ label="cmdFlags"];
  243  *
  244  *  Achain=>Achain [ label = "LacBuffDesc_BufferListDescWrite()",
  245  *               URL="\ref LacBuffDesc_BufferListDescWrite()"];
  246  *  Achain=>SQAT [ label = "SalQatMsg_CmnMsgAndReqParamsPopulate()",
  247  *               URL="\ref SalQatMsg_CmnMsgAndReqParamsPopulate()"];
  248  *  Achain<<SQAT [ label="return"];
  249  *  Achain=>SYM [ label = "LacSymQueue_RequestSend()",
  250  *                URL="\ref LacSymQueue_RequestSend()"];
  251  *  SYM=>QATCOMMS [ label = "QatComms_MsgSend()",
  252  *                   URL="\ref QatComms_MsgSend()"];
  253  *  SYM<<QATCOMMS [ label="status"];
  254  *  Achain<<SYM   [ label="status"];
  255  *  SYM<<Achain [ label="status"];
  256  *  SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
  257  *  APP<<SYM [label = "status"];
  258  *  ... [label = "QAT processing the request and generates response.
  259  *       Callback in Bottom Half Context"];
  260  *  ...;
  261  *  QATCOMMS=>QATCOMMS [label ="QatComms_ResponseMsgHandler()",
  262  *                       URL="\ref QatComms_ResponseMsgHandler()"];
  263  *  QATCOMMS=>SQAT [label ="LacSymQat_SymRespHandler()",
  264  *                   URL="\ref LacSymQat_SymRespHandler()"];
  265  *  SQAT=>SYM [label="LacSymCb_ProcessCallback()",
  266  *              URL="\ref LacSymCb_ProcessCallback()"];
  267  *  SYM=>SYM [label = "LacSymCb_ProcessCallbackInternal()",
  268  *            URL="\ref LacSymCb_ProcessCallbackInternal()"];
  269  *  SYM=>SYM [label = "Lac_MemPoolEntryFree()",
  270  *            URL="\ref Lac_MemPoolEntryFree()"];
  271  *  SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
  272  *  SYM=>APP [label="cbFunc"];
  273  *  APP>>SYM [label="return"];
  274  *  SYM>>SQAT [label="return"];
  275  *  SQAT>>QATCOMMS [label="return"];
  276  * \endmsc
  277  *
  278  * @lld_end
  279  *
  280  *****************************************************************************/
  281 
  282 /*****************************************************************************/
  283 
  284 #ifndef LAC_SYM_HASH_H
  285 #define LAC_SYM_HASH_H
  286 
  287 /*
  288 ******************************************************************************
  289 * Include public/global header files
  290 ******************************************************************************
  291 */
  292 
  293 #include "cpa.h"
  294 #include "cpa_cy_sym.h"
  295 
  296 /*
  297 *******************************************************************************
  298 * Include private header files
  299 *******************************************************************************
  300 */
  301 
  302 #include "lac_session.h"
  303 #include "lac_buffer_desc.h"
  304 
  305 /**
  306  *****************************************************************************
  307  * @ingroup LacHash
  308  *      Definition of callback function.
  309  *
  310  * @description
  311  *      This is the callback function prototype. The callback function is
  312  *      invoked when a hash precompute operation completes.
  313  *
  314  * @param[in] pCallbackTag  Opaque value provided by user while making
  315  *                         individual function call.
  316  *
  317  * @retval
  318  *      None
  319  *****************************************************************************/
  320 typedef void (*lac_hash_precompute_done_cb_t)(void *pCallbackTag);
  321 
  322 /*
  323  * WARNING: There are no checks done on the parameters of the functions in
  324  * this file. The expected values of the parameters are documented and it is
  325  * up to the caller to provide valid values.
  326  */
  327 
  328 /**
  329 *******************************************************************************
  330 * @ingroup LacHash
  331 *      validate the hash context
  332 *
  333 * @description
  334 *      The client populates the hash context in the session context structure
  335 *      This is passed as parameter to the session register API function and
  336 *      needs to be validated.
  337 *
  338 * @param[in] pHashSetupData      pointer to hash context structure
  339 *
  340 * @retval CPA_STATUS_SUCCESS        Success
  341 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter
  342 *
  343 *****************************************************************************/
  344 CpaStatus LacHash_HashContextCheck(CpaInstanceHandle instanceHandle,
  345                                    const CpaCySymHashSetupData *pHashSetupData);
  346 
  347 /**
  348  ******************************************************************************
  349  * @ingroup LacHash
  350  *      Populate the hash pre-compute data.
  351  *
  352  * @description
  353  *      This function populates the state1 and state2 fields with the hash
  354  *      pre-computes.  This is only done for authentication.  The state1
  355  *      and state2 pointers must be set to point to the correct locations
  356  *      in the content descriptor where the precompute result(s) will be
  357  *      written, before this function is called.
  358  *
  359  * @param[in] instanceHandle    Instance Handle
  360  * @param[in] pSessionSetup     pointer to session setup data
  361  * @param[in] callbackFn        Callback function which is invoked when
  362  *                              the precompute operation is completed
  363  * @param[in] pCallbackTag       Opaque data which is passed back to the user
  364  *                              as a parameter in the callback function
  365  * @param[out] pWorkingBuffer   Pointer to working buffer, sufficient memory
  366  *                              must be allocated by the caller for this.
  367  *                              Assumption that this is 8 byte aligned.
  368  * @param[out] pState1          pointer to State 1 in content descriptor
  369  * @param[out] pState2          pointer to State 2 in content descriptor
  370  *
  371  * @retval CPA_STATUS_SUCCESS    Success
  372  * @retval CPA_STATUS_RETRY      Retry the operation.
  373  * @retval CPA_STATUS_RESOURCE   Error Allocating memory
  374  * @retval CPA_STATUS_FAIL       Operation Failed
  375  *
  376  *****************************************************************************/
  377 CpaStatus LacHash_PrecomputeDataCreate(const CpaInstanceHandle instanceHandle,
  378                                        CpaCySymSessionSetupData *pSessionSetup,
  379                                        lac_hash_precompute_done_cb_t callbackFn,
  380                                        void *pCallbackTag,
  381                                        Cpa8U *pWorkingBuffer,
  382                                        Cpa8U *pState1,
  383                                        Cpa8U *pState2);
  384 
  385 /**
  386  ******************************************************************************
  387  * @ingroup LacHash
  388  *      populate the hash state prefix aad buffer.
  389  *
  390  * @description
  391  *      This function populates the hash state prefix aad buffer. This function
  392  *      is not called for CCM/GCM operations as the AAD data varies per request
  393  *      and is stored in the cookie as opposed to the session descriptor.
  394  *
  395  * @param[in] pHashSetupData        pointer to hash setup structure
  396  * @param[in] pHashControlBlock     pointer to hash control block
  397  * @param[in] qatHashMode           QAT Mode for hash
  398  * @param[in] pHashStateBuffer      pointer to hash state prefix aad buffer
  399  * @param[in] pHashStateBufferInfo  Pointer to hash state prefix buffer info
  400  *
  401  * @retval CPA_STATUS_SUCCESS       Success
  402  * @retval CPA_STATUS_FAIL          Operation Failed
  403  *
  404  *****************************************************************************/
  405 CpaStatus LacHash_StatePrefixAadBufferInit(
  406     sal_service_t *pService,
  407     const CpaCySymHashSetupData *pHashSetupData,
  408     icp_qat_la_bulk_req_ftr_t *pHashControlBlock,
  409     icp_qat_hw_auth_mode_t qatHashMode,
  410     Cpa8U *pHashStateBuffer,
  411     lac_sym_qat_hash_state_buffer_info_t *pHashStateBufferInfo);
  412 
  413 /**
  414 *******************************************************************************
  415 * @ingroup LacHash
  416 *      Check parameters for a hash perform operation
  417 *
  418 * @description
  419 *      This function checks the parameters for a hash perform operation.
  420 *
  421 * @param[in] pSessionDesc        Pointer to session descriptor.
  422 * @param[in] pOpData             Pointer to request parameters.
  423 * @param[in] srcPktSize          Total size of the Buffer List
  424 * @param[in] pVerifyResult       Pointer to user flag
  425 *
  426 * @retval CPA_STATUS_SUCCESS       Success
  427 * @retval CPA_STATUS_INVALID_PARAM Invalid Parameter
  428 *
  429 *****************************************************************************/
  430 CpaStatus LacHash_PerformParamCheck(CpaInstanceHandle instanceHandle,
  431                                     lac_session_desc_t *pSessionDesc,
  432                                     const CpaCySymOpData *pOpData,
  433                                     Cpa64U srcPktSize,
  434                                     const CpaBoolean *pVerifyResult);
  435 
  436 /**
  437 *******************************************************************************
  438 * @ingroup LacHash
  439 *      Perform hash precompute operation for HMAC
  440 *
  441 * @description
  442 *      This function sends 2 requests to the CPM for the hmac precompute
  443 *      operations. The results of the ipad and opad state calculation
  444 *      is copied into pState1 and pState2 (e.g. these may be the state1 and
  445 *      state2 buffers in a hash content descriptor) and when
  446 *      the final operation has completed the condition passed as a param to
  447 *      this function is set to true.
  448 *
  449 *      This function performs the XORing of the IPAD and OPAD constants to
  450 *      the key (which was padded to the block size of the algorithm)
  451 *
  452 * @param[in]  instanceHandle       Instance Handle
  453 * @param[in]  hashAlgorithm        Hash Algorithm
  454 * @param[in]  authKeyLenInBytes    Length of Auth Key
  455 * @param[in]  pAuthKey             Pointer to Auth Key
  456 * @param[out] pWorkingMemory       Pointer to working memory that is carved
  457 *                                  up and used in the pre-compute operations.
  458 *                                  Assumption that this is 8 byte aligned.
  459 * @param[out] pState1              Pointer to State 1 in content descriptor
  460 * @param[out] pState2              Pointer to State 2 in content descriptor
  461 * @param[in]  callbackFn           Callback function which is invoked when
  462 *                                  the precompute operation is completed
  463 * @param[in]  pCallbackTag         Opaque data which is passed back to the user
  464 *                                  as a parameter in the callback function
  465 *
  466 * @retval CPA_STATUS_SUCCESS       Success
  467 * @retval CPA_STATUS_RETRY         Retry the operation.
  468 * @retval CPA_STATUS_FAIL          Operation Failed
  469 *
  470 *****************************************************************************/
  471 CpaStatus LacSymHash_HmacPreComputes(CpaInstanceHandle instanceHandle,
  472                                      CpaCySymHashAlgorithm hashAlgorithm,
  473                                      Cpa32U authKeyLenInBytes,
  474                                      Cpa8U *pAuthKey,
  475                                      Cpa8U *pWorkingMemory,
  476                                      Cpa8U *pState1,
  477                                      Cpa8U *pState2,
  478                                      lac_hash_precompute_done_cb_t callbackFn,
  479                                      void *pCallbackTag);
  480 
  481 /**
  482 *******************************************************************************
  483  * @ingroup LacHash
  484  *      Perform hash precompute operation for XCBC MAC and GCM
  485  *
  486  * @description
  487  *      This function sends 1 request to the CPM for the precompute operation
  488  *      based on an AES ECB cipher. The results of the calculation is copied
  489  *      into pState (this may be a pointer to the State 2 buffer in a Hash
  490  *      content descriptor) and when the operation has completed the condition
  491  *      passed as a param to this function is set to true.
  492  *
  493  * @param[in]  instanceHandle       Instance Handle
  494  * @param[in]  hashAlgorithm        Hash Algorithm
  495  * @param[in]  authKeyLenInBytes    Length of Auth Key
  496  * @param[in]  pAuthKey             Auth Key
  497  * @param[out] pWorkingMemory       Pointer to working memory that is carved
  498  *                                  up and used in the pre-compute operations.
  499  *                                  Assumption that this is 8 byte aligned.
  500  * @param[out] pState               Pointer to output state
  501  * @param[in]  callbackFn           Callback function which is invoked when
  502  *                                  the precompute operation is completed
  503  * @param[in]  pCallbackTag         Opaque data which is passed back to the user
  504  *                                  as a parameter in the callback function
  505 
  506  *
  507  * @retval CPA_STATUS_SUCCESS       Success
  508  * @retval CPA_STATUS_RETRY         Retry the operation.
  509  * @retval CPA_STATUS_FAIL          Operation Failed
  510  *
  511  *****************************************************************************/
  512 CpaStatus LacSymHash_AesECBPreCompute(CpaInstanceHandle instanceHandle,
  513                                       CpaCySymHashAlgorithm hashAlgorithm,
  514                                       Cpa32U authKeyLenInBytes,
  515                                       Cpa8U *pAuthKey,
  516                                       Cpa8U *pWorkingMemory,
  517                                       Cpa8U *pState,
  518                                       lac_hash_precompute_done_cb_t callbackFn,
  519                                       void *pCallbackTag);
  520 
  521 /**
  522 *******************************************************************************
  523 * @ingroup LacHash
  524 *      initialise data structures for the hash precompute operations
  525 *
  526 * @description
  527 *      This function registers the precompute callback handler function, which
  528 *      is different to the default one used by symmetric. Content descriptors
  529 *      are preallocted for the hmac precomputes as they are constant for these
  530 *      operations.
  531 *
  532 * @retval CPA_STATUS_SUCCESS       Success
  533 * @retval CPA_STATUS_RESOURCE      Error allocating memory
  534 *
  535 *****************************************************************************/
  536 CpaStatus LacSymHash_HmacPrecompInit(CpaInstanceHandle instanceHandle);
  537 
  538 /**
  539 *******************************************************************************
  540 * @ingroup LacHash
  541 *      free resources allocated for the precompute operations
  542 *
  543 * @description
  544 *      free up the memory allocated on init time for the content descriptors
  545 *      that were allocated for the HMAC precompute operations.
  546 *
  547 * @return none
  548 *
  549 *****************************************************************************/
  550 void LacSymHash_HmacPrecompShutdown(CpaInstanceHandle instanceHandle);
  551 
  552 void LacSync_GenBufListVerifyCb(void *pCallbackTag,
  553                                 CpaStatus status,
  554                                 CpaCySymOp operationType,
  555                                 void *pOpData,
  556                                 CpaBufferList *pDstBuffer,
  557                                 CpaBoolean opResult);
  558 
  559 #endif /* LAC_SYM_HASH_H */

Cache object: 3f668c4fa71fa9f6130e3494eede7a35


[ 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.