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_alg_chain.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_alg_chain.h
   10  *
   11  * @defgroup  LacAlgChain  Algorithm Chaining
   12  *
   13  * @ingroup LacSym
   14  *
   15  * Interfaces exposed by the Algorithm Chaining Component
   16  *
   17  * @lld_start
   18  *
   19  * @lld_overview
   20  * This is the LAC Algorithm-Chaining feature component.  This component
   21  * implements session registration and cleanup functions, and a perform
   22  * function.  Statistics are maintained to track requests issued and completed,
   23  * errors incurred, and  authentication verification failures.  For each
   24  * function the parameters  supplied by the client are checked, and then the
   25  * function proceeds if all the parameters are valid.  This component also
   26  * incorporates support for Authenticated-Encryption (CCM and GCM) which
   27  * essentially comprises of a cipher operation and a hash operation combined.
   28  *
   29  * This component can combine a cipher operation with a hash operation or just
   30  * simply create a hash only or cipher only operation and is called from the
   31  * LAC Symmetric API component. In turn it calls the LAC Cipher, LAC Hash, and
   32  * LAC Symmetric QAT components.  The goal here is to duplicate as little code
   33  * as possible from the Cipher and Hash components.
   34  *
   35  * The cipher and hash operations can be combined in either order, i.e. cipher
   36  * first then hash or hash first then cipher.  The client specifies this via
   37  * the algChainOrder field in the session context.  This ordering choice is
   38  * stored as part of the session descriptor, so that it is known when a
   39  * perform request is issued.  In the case of Authenticated-Encryption, the
   40  * ordering is an implicit part of the CCM or GCM protocol.
   41  *
   42  * When building a content descriptor, as part of session registration, this
   43  * component asks the Cipher and Hash components to build their respective
   44  * parts of the session descriptor.  The key aspect here is to provide the
   45  * correct offsets to the Cipher and Hash components for where in the content
   46  * descriptor to write their Config and Hardware Setup blocks.  Also the
   47  * Config block in each case must specify the appropriate next slice.
   48  *
   49  * When building request parameters, as part of a perform operation, this
   50  * component asks the Cipher and Hash components to build their respective
   51  * parts of the request parameters block.  Again the key aspect here is to
   52  * provide the correct offsets to the Cipher and Hash components for where in
   53  * the request parameters block to write their parameters.  Also the request
   54  * parameters block in each case must specify the appropriate next slice.
   55  *
   56  * Parameter checking for session registration and for operation perform is
   57  * mostly delegated to the Cipher and Hash components.  There are a few
   58  * extra checks that this component must perform: check the algChainOrder
   59  * parameter, ensure that CCM/GCM are specified for hash/cipher algorithms
   60  * as appropriate, and ensure that requests are for full packets (partial
   61  * packets are not supported for Algorithm-Chaining).
   62  *
   63  * The perform operation allocates a cookie to capture information required
   64  * in the request callback.  This cookie is then freed in the callback.
   65  *
   66  * @lld_dependencies
   67  * - \ref LacCipher "Cipher" : For taking care of the cipher aspects of
   68  *   session registration and operation perform
   69  * - \ref LacHash "Hash" : For taking care of the hash aspects of session
   70  *   registration and operation perform
   71  * - \ref LacSymCommon "Symmetric Common" : statistics.
   72  * - \ref LacSymQat "Symmetric QAT": To build the QAT request message,
   73  *   request param structure, and populate the content descriptor.  Also
   74  *   for registering a callback function to process the QAT response.
   75  * - \ref QatComms "QAT Comms" : For sending messages to the QAT, and for
   76  *   setting the response callback
   77  * - \ref LacMem "Mem" : For memory allocation and freeing, virtual/physical
   78  *   address translation, and translating between scalar and pointer types
   79  * - OSAL : For atomics and locking
   80  *
   81  * @lld_module_algorithms
   82  * This component builds up a chain of slices at session init time
   83  * and stores it in the session descriptor. This is used for building up the
   84  * content descriptor at session init time and the request parameters structure
   85  * in the perform operation.
   86  *
   87  * The offsets for the first slice are updated so that the second slice adds
   88  * its configuration information after that of the first slice. The first
   89  * slice also configures the next slice appropriately.
   90  *
   91  * This component is very much hard-coded to just support cipher+hash or
   92  * hash+cipher.  It should be quite possible to extend this idea to support
   93  * an arbitrary chain of commands, by building up a command chain that can
   94  * be traversed in order to build up the appropriate configuration for the
   95  * QAT.  This notion should be looked at in the future if other forms of
   96  * Algorithm-Chaining are desired.
   97  *
   98  * @lld_process_context
   99  *
  100  * @lld_end
  101  *
  102  *****************************************************************************/
  103 
  104 /*****************************************************************************/
  105 
  106 #ifndef LAC_SYM_ALG_CHAIN_H
  107 #define LAC_SYM_ALG_CHAIN_H
  108 
  109 /*
  110 ******************************************************************************
  111 * Include public/global header files
  112 ******************************************************************************
  113 */
  114 
  115 #include "cpa.h"
  116 #include "cpa_cy_sym.h"
  117 #include "lac_session.h"
  118 
  119 /*
  120 *******************************************************************************
  121 * Include private header files
  122 *******************************************************************************
  123 */
  124 
  125 /* Macro for checking if zero length buffer are supported
  126  * only for cipher is AES-GCM and hash are AES-GCM/AES-GMAC */
  127 #define IS_ZERO_LENGTH_BUFFER_SUPPORTED(cipherAlgo, hashAlgo)                  \
  128         (CPA_CY_SYM_CIPHER_AES_GCM == cipherAlgo &&                            \
  129          (CPA_CY_SYM_HASH_AES_GMAC == hashAlgo ||                              \
  130           CPA_CY_SYM_HASH_AES_GCM == hashAlgo))
  131 
  132 /**
  133 *******************************************************************************
  134 * @ingroup LacAlgChain
  135 *      This function registers a session for an Algorithm-Chaining operation.
  136 *
  137 * @description
  138 *      This function is called from the LAC session register API function for
  139 *      Algorithm-Chaining operations. It validates all input parameters. If
  140 *      an invalid parameter is passed, an error is returned to the calling
  141 *      function. If all parameters are valid an Algorithm-Chaining session is
  142 *      registered.
  143 *
  144 * @param[in] instanceHandle    Instance Handle
  145 *
  146 * @param[in] pSessionCtx       Pointer to session context which contains
  147 *                              parameters which are static for a given
  148 *                              cryptographic session such as operation type,
  149 *                              mechanisms, and keys for cipher and/or digest
  150 *                              operations.
  151 * @param[out] pSessionDesc     Pointer to session descriptor
  152 *
  153 * @retval CPA_STATUS_SUCCESS       Function executed successfully.
  154 * @retval CPA_STATUS_FAIL           Function failed.
  155 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  156 * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  157 *
  158 * @see cpaCySymInitSession()
  159 *
  160 *****************************************************************************/
  161 CpaStatus LacAlgChain_SessionInit(const CpaInstanceHandle instanceHandle,
  162                                   const CpaCySymSessionSetupData *pSessionCtx,
  163                                   lac_session_desc_t *pSessionDesc);
  164 
  165 /**
  166 *******************************************************************************
  167 * @ingroup LacAlgChain
  168 *      Data path function for the Algorithm-Chaining component
  169 *
  170 * @description
  171 *      This function gets called from cpaCySymPerformOp() which is the
  172 *      symmetric LAC API function. It is the data path function for the
  173 *      Algorithm-Chaining component. It does the parameter checking on the
  174 *      client supplied parameters and if the parameters are valid, the
  175 *      operation is performed and a request sent to the QAT, otherwise an
  176 *      error is returned to the client.
  177 *
  178 * @param[in] instanceHandle    Instance Handle
  179 *
  180 * @param[in] pSessionDesc  Pointer to session descriptor
  181 * @param[in] pCallbackTag    The application's context for this call
  182 * @param[in] pOpData       Pointer to a structure containing request
  183 *                          parameters. The client code allocates the memory for
  184 *                          this structure. This component takes ownership of
  185 *                          the memory until it is returned in the callback.
  186 *
  187 * @param[in] pSrcBuffer        Source Buffer List
  188 * @param[out] pDstBuffer       Destination Buffer List
  189 * @param[out] pVerifyResult    Verify Result
  190 *
  191 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  192 * @retval CPA_STATUS_FAIL           Function failed.
  193 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  194 * @retval CPA_STATUS_RESOURCE       Error related to system resource.
  195 *
  196 * @see cpaCySymPerformOp()
  197 *
  198 *****************************************************************************/
  199 CpaStatus LacAlgChain_Perform(const CpaInstanceHandle instanceHandle,
  200                               lac_session_desc_t *pSessionDesc,
  201                               void *pCallbackTag,
  202                               const CpaCySymOpData *pOpData,
  203                               const CpaBufferList *pSrcBuffer,
  204                               CpaBufferList *pDstBuffer,
  205                               CpaBoolean *pVerifyResult);
  206 
  207 /**
  208 *******************************************************************************
  209 * @ingroup LacAlgChain
  210 *      This function is used to update cipher key, as specified in provided
  211 *      input.
  212 *
  213 * @description
  214 *      This function is called from the LAC session register API function for
  215 *      Algorithm-Chaining operations. It validates all input parameters. If
  216 *      an invalid parameter is passed, an error is returned to the calling
  217 *      function. If all parameters are valid an Algorithm-Chaining session is
  218 *      updated.
  219 *
  220 * @threadSafe
  221 *      No
  222 *
  223 * @param[in] pSessionDesc           Pointer to session descriptor
  224 * @param[in] pCipherKey             Pointer to new cipher key.
  225 *
  226 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  227 * @retval CPA_STATUS_FAIL           Function failed.
  228 * @retval CPA_STATUS_RETRY          Resubmit the request.
  229 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  230 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  231 *
  232 *****************************************************************************/
  233 CpaStatus LacAlgChain_SessionCipherKeyUpdate(lac_session_desc_t *pSessionDesc,
  234                                              Cpa8U *pCipherKey);
  235 
  236 /**
  237 *******************************************************************************
  238 * @ingroup LacAlgChain
  239 *      This function is used to update authentication key, as specified in
  240 *      provided input.
  241 *
  242 * @description
  243 *      This function is called from the LAC session register API function for
  244 *      Algorithm-Chaining operations. It validates all input parameters. If
  245 *      an invalid parameter is passed, an error is returned to the calling
  246 *      function. If all parameters are valid an Algorithm-Chaining session is
  247 *      updated.
  248 *
  249 * @threadSafe
  250 *      No
  251 *
  252 * @param[in] pSessionDesc           Pointer to session descriptor
  253 * @param[in] pCipherKey             Pointer to new authentication key.
  254 *
  255 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  256 * @retval CPA_STATUS_FAIL           Function failed.
  257 * @retval CPA_STATUS_RETRY          Resubmit the request.
  258 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  259 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  260 *
  261 *****************************************************************************/
  262 CpaStatus LacAlgChain_SessionAuthKeyUpdate(lac_session_desc_t *pSessionDesc,
  263                                            Cpa8U *pAuthKey);
  264 
  265 /**
  266 *******************************************************************************
  267 * @ingroup LacAlgChain
  268 *      This function is used to update AAD length as specified in provided
  269 *      input.
  270 *
  271 * @description
  272 *      This function is called from the LAC session register API function for
  273 *      Algorithm-Chaining operations. It validates all input parameters. If
  274 *      an invalid parameter is passed, an error is returned to the calling
  275 *      function. If all parameters are valid an Algorithm-Chaining session is
  276 *      updated.
  277 *
  278 * @threadSafe
  279 *      No
  280 *
  281 * @param[in] pSessionDesc           Pointer to session descriptor
  282 * @param[in] newAADLength           New AAD length.
  283 *
  284 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  285 * @retval CPA_STATUS_FAIL           Function failed.
  286 * @retval CPA_STATUS_RETRY          Resubmit the request.
  287 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  288 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  289 *
  290 *****************************************************************************/
  291 CpaStatus LacAlgChain_SessionAADUpdate(lac_session_desc_t *pSessionDesc,
  292                                        Cpa32U newAADLength);
  293 
  294 #endif /* LAC_SYM_ALG_CHAIN_H */

Cache object: 95cede0fb75a7bb732c231f4b858dbed


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