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/include/lac/cpa_cy_ecdh.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  *   BSD LICENSE
    4  * 
    5  *   Copyright(c) 2007-2022 Intel Corporation. All rights reserved.
    6  *   All rights reserved.
    7  * 
    8  *   Redistribution and use in source and binary forms, with or without
    9  *   modification, are permitted provided that the following conditions
   10  *   are met:
   11  * 
   12  *     * Redistributions of source code must retain the above copyright
   13  *       notice, this list of conditions and the following disclaimer.
   14  *     * Redistributions in binary form must reproduce the above copyright
   15  *       notice, this list of conditions and the following disclaimer in
   16  *       the documentation and/or other materials provided with the
   17  *       distribution.
   18  *     * Neither the name of Intel Corporation nor the names of its
   19  *       contributors may be used to endorse or promote products derived
   20  *       from this software without specific prior written permission.
   21  * 
   22  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   23  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   24  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   25  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   26  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   27  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   28  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   29  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   30  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   31  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   32  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   33  * 
   34  *
   35  ***************************************************************************/
   36 
   37 /*
   38  *****************************************************************************
   39  * Doxygen group definitions
   40  ****************************************************************************/
   41 
   42 /**
   43  *****************************************************************************
   44  * @file cpa_cy_ecdh.h
   45  *
   46  * @defgroup cpaCyEcdh Elliptic Curve Diffie-Hellman (ECDH) API
   47  *
   48  * @ingroup cpaCy
   49  *
   50  * @description
   51  *      These functions specify the API for Public Key Encryption
   52  *      (Cryptography) Elliptic Curve Diffie-Hellman (ECDH) operations.
   53  *
   54  * @note
   55  *      Large numbers are represented on the QuickAssist API as described
   56  *      in the Large Number API (@ref cpaCyLn).
   57  *
   58  *      In addition, the bit length of large numbers passed to the API
   59  *      MUST NOT exceed 576 bits for Elliptic Curve operations.
   60  *****************************************************************************/
   61 
   62 #ifndef CPA_CY_ECDH_H_
   63 #define CPA_CY_ECDH_H_
   64 
   65 #ifdef __cplusplus
   66 extern "C" {
   67 #endif
   68 
   69 #include "cpa_cy_common.h"
   70 #include "cpa_cy_ec.h"
   71 
   72 /**
   73  *****************************************************************************
   74  * @ingroup cpaCyEcdh
   75  *      ECDH Point Multiplication Operation Data.
   76  *
   77  * @description
   78  *      This structure contains the operation data for the
   79  *      cpaCyEcdhPointMultiply function. The client MUST allocate the memory
   80  *      for this structure and the items pointed to by this structure. When
   81  *      the structure is passed into the function, ownership of the memory
   82  *      passes to the function. Ownership of the memory returns to the client
   83  *      when this structure is returned in the callback function.
   84  *
   85  *      For optimal performance all data buffers SHOULD be 8-byte aligned.
   86  *
   87  *      All values in this structure are required to be in Most Significant Byte
   88  *      first order, e.g. a.pData[0] = MSB.
   89  *
   90  * @note
   91  *      If the client modifies or frees the memory referenced in this
   92  *      structure after it has been submitted to the cpaCyEcdhPointMultiply
   93  *      function, and before it has been returned in the callback, undefined
   94  *      behavior will result.
   95  *
   96  * @see
   97  *      cpaCyEcdhPointMultiply()
   98  *
   99  *****************************************************************************/
  100 typedef struct _CpaCyEcdhPointMultiplyOpData {
  101     CpaFlatBuffer k;
  102     /**< scalar multiplier (k > 0 and k < n) */
  103     CpaFlatBuffer xg;
  104     /**< x coordinate of curve point */
  105     CpaFlatBuffer yg;
  106     /**< y coordinate of curve point */
  107     CpaFlatBuffer a;
  108     /**< a equation coefficient */
  109     CpaFlatBuffer b;
  110     /**< b equation coefficient */
  111     CpaFlatBuffer q;
  112     /**< prime modulus or irreducible polynomial over GF(2^r) */
  113     CpaFlatBuffer h;
  114     /**< cofactor of the operation.
  115      * If the cofactor is NOT required then set the cofactor to 1 or the
  116      * data pointer of the Flat Buffer to NULL.
  117      * There are some restrictions on the value of the cofactor.
  118      * Implementations of this API will support at least the following:
  119      * <ul>
  120      *   <li>NIST standard curves and their cofactors (1, 2 and 4)</li>
  121      *
  122      *   <li>Random curves where max(log2(p), log2(n)+log2(h)) <= 512, where
  123      *   p is the modulus, n is the order of the curve and h is the cofactor
  124      *   </li>
  125      * </ul>
  126      */
  127 
  128     CpaCyEcFieldType fieldType;
  129     /**< field type for the operation */
  130     CpaBoolean pointVerify;
  131     /**< set to CPA_TRUE to do a verification before the multiplication */
  132 } CpaCyEcdhPointMultiplyOpData;
  133 
  134 
  135 /**
  136  *****************************************************************************
  137  * @ingroup cpaCyEcdh
  138  *      Cryptographic ECDH Statistics.
  139  * @description
  140  *      This structure contains statistics on the Cryptographic ECDH
  141  *      operations. Statistics are set to zero when the component is
  142  *      initialized, and are collected per instance.
  143  *
  144  ****************************************************************************/
  145 typedef struct _CpaCyEcdhStats64 {
  146     Cpa64U numEcdhPointMultiplyRequests;
  147     /**< Total number of ECDH Point Multiplication operation requests. */
  148     Cpa64U numEcdhPointMultiplyRequestErrors;
  149     /**< Total number of ECDH Point Multiplication operation requests that had
  150      * an error and could not be processed. */
  151     Cpa64U numEcdhPointMultiplyCompleted;
  152     /**< Total number of ECDH Point Multiplication operation requests that
  153      * completed successfully. */
  154     Cpa64U numEcdhPointMultiplyCompletedError;
  155     /**< Total number of ECDH Point Multiplication operation requests that could
  156      * not be completed successfully due to errors. */
  157     Cpa64U numEcdhRequestCompletedOutputInvalid;
  158     /**< Total number of ECDH Point Multiplication or Point Verify operation
  159      * requests that could not be completed successfully due to an invalid
  160      * output.
  161      * Note that this does not indicate an error. */
  162 } CpaCyEcdhStats64;
  163 
  164 
  165 /**
  166  *****************************************************************************
  167  * @ingroup cpaCyEcdh
  168  *      Definition of callback function invoked for cpaCyEcdhPointMultiply
  169  *      requests.
  170  *
  171  * @description
  172  *      This is the prototype for the CpaCyEcdhPointMultiplyCbFunc callback
  173  *      function
  174  *
  175  * @context
  176  *      This callback function can be executed in a context that DOES NOT
  177  *      permit sleeping to occur.
  178  * @assumptions
  179  *      None
  180  * @sideEffects
  181  *      None
  182  * @reentrant
  183  *      No
  184  * @threadSafe
  185  *      Yes
  186  *
  187  * @param[in] pCallbackTag      User-supplied value to help identify request.
  188  * @param[in] status            Status of the operation. Valid values are
  189  *                              CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and
  190  *                              CPA_STATUS_UNSUPPORTED.
  191  * @param[in] pOpData           Opaque pointer to Operation data supplied in
  192  *                              request.
  193  * @param[in] pXk               Output x coordinate from the request.
  194  * @param[in] pYk               Output y coordinate from the request.
  195  * @param[in] multiplyStatus    Status of the point multiplication and the
  196  *                              verification when the pointVerify bit is set
  197  *                              in the CpaCyEcdhPointMultiplyOpData structure.
  198  *
  199  * @retval
  200  *      None
  201  * @pre
  202  *      Component has been initialized.
  203  * @post
  204  *      None
  205  * @note
  206  *      None
  207  * @see
  208  *      cpaCyEcdhPointMultiply()
  209  *
  210  *****************************************************************************/
  211 typedef void (*CpaCyEcdhPointMultiplyCbFunc)(void *pCallbackTag,
  212         CpaStatus status,
  213         void *pOpData,
  214         CpaBoolean multiplyStatus,
  215         CpaFlatBuffer *pXk,
  216         CpaFlatBuffer *pYk);
  217 
  218 
  219 /**
  220  *****************************************************************************
  221  * @ingroup cpaCyEcdh
  222  *      ECDH Point Multiplication.
  223  *
  224  * @description
  225  *      This function performs ECDH Point Multiplication as defined in
  226  *      ANSI X9.63 2001 section 5.4
  227  *
  228  * @context
  229  *      When called as an asynchronous function it cannot sleep. It can be
  230  *      executed in a context that does not permit sleeping.
  231  *      When called as a synchronous function it may sleep. It MUST NOT be
  232  *      executed in a context that DOES NOT permit sleeping.
  233  * @assumptions
  234  *      None
  235  * @sideEffects
  236  *      None
  237  * @blocking
  238  *      Yes when configured to operate in synchronous mode.
  239  * @reentrant
  240  *      No
  241  * @threadSafe
  242  *      Yes
  243  *
  244  * @param[in]  instanceHandle   Instance handle.
  245  * @param[in]  pCb              Callback function pointer. If this is set to
  246  *                              a NULL value the function will operate
  247  *                              synchronously.
  248  * @param[in]  pCallbackTag     User-supplied value to help identify request.
  249  * @param[in]  pOpData          Structure containing all the data needed to
  250  *                              perform the operation. The client code
  251  *                              allocates the memory for this structure. This
  252  *                              component takes ownership of the memory until
  253  *                              it is returned in the callback.
  254  * @param[out] pMultiplyStatus  In synchronous mode, the status of the point
  255  *                              multiplication and the verification when the
  256  *                              pointVerify bit is set in the
  257  *                              CpaCyEcdhPointMultiplyOpData structure. Set to
  258  *                              CPA_FALSE if the point is NOT on the curve or
  259  *                              at infinity. Set to CPA_TRUE if the point is
  260  *                              on the curve.
  261  * @param[out] pXk              Pointer to x coordinate flat buffer.
  262  * @param[out] pYk              Pointer to y coordinate flat buffer.
  263  *
  264  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
  265  * @retval CPA_STATUS_FAIL          Function failed.
  266  * @retval CPA_STATUS_RETRY         Resubmit the request.
  267  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
  268  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
  269  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
  270  *                                  the request.
  271  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
  272  *
  273  * @pre
  274  *      The component has been initialized via cpaCyStartInstance function.
  275  * @post
  276  *      None
  277  * @note
  278  *      When pCb is non-NULL an asynchronous callback of type
  279  *      CpaCyEcdhPointMultiplyCbFunc is generated in response to this function
  280  *      call.
  281  *      For optimal performance, data pointers SHOULD be 8-byte aligned.
  282  *
  283  * @see
  284  *      CpaCyEcdhPointMultiplyOpData,
  285  *      CpaCyEcdhPointMultiplyCbFunc
  286  *
  287  *****************************************************************************/
  288 CpaStatus
  289 cpaCyEcdhPointMultiply(const CpaInstanceHandle instanceHandle,
  290         const CpaCyEcdhPointMultiplyCbFunc pCb,
  291         void *pCallbackTag,
  292         const CpaCyEcdhPointMultiplyOpData *pOpData,
  293         CpaBoolean *pMultiplyStatus,
  294         CpaFlatBuffer *pXk,
  295         CpaFlatBuffer *pYk);
  296 
  297 
  298 /**
  299  *****************************************************************************
  300  * @ingroup cpaCyEcdh
  301  *      Query statistics for a specific ECDH instance.
  302  *
  303  * @description
  304  *      This function will query a specific instance of the ECDH implementation
  305  *      for statistics. The user MUST allocate the CpaCyEcdhStats64 structure
  306  *      and pass the reference to that structure into this function call. This
  307  *      function writes the statistic results into the passed in
  308  *      CpaCyEcdhStats64 structure.
  309  *
  310  *      Note: statistics returned by this function do not interrupt current data
  311  *      processing and as such can be slightly out of sync with operations that
  312  *      are in progress during the statistics retrieval process.
  313  *
  314  * @context
  315  *      This is a synchronous function and it can sleep. It MUST NOT be
  316  *      executed in a context that DOES NOT permit sleeping.
  317  * @assumptions
  318  *      None
  319  * @sideEffects
  320  *      None
  321  * @blocking
  322  *      This function is synchronous and blocking.
  323  * @reentrant
  324  *      No
  325  * @threadSafe
  326  *      Yes
  327  *
  328  * @param[in]  instanceHandle       Instance handle.
  329  * @param[out] pEcdhStats           Pointer to memory into which the statistics
  330  *                                  will be written.
  331  *
  332  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
  333  * @retval CPA_STATUS_FAIL          Function failed.
  334  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
  335  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
  336  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
  337  *                                  the request.
  338  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
  339  *
  340  * @pre
  341  *      Component has been initialized.
  342  * @post
  343  *      None
  344  * @note
  345  *      This function operates in a synchronous manner and no asynchronous
  346  *      callback will be generated.
  347  * @see
  348  *      CpaCyEcdhStats64
  349  *****************************************************************************/
  350 CpaStatus
  351 cpaCyEcdhQueryStats64(const CpaInstanceHandle instanceHandle,
  352         CpaCyEcdhStats64 *pEcdhStats);
  353 
  354 #ifdef __cplusplus
  355 } /* close the extern "C" { */
  356 #endif
  357 
  358 #endif /*CPA_CY_ECDH_H_*/

Cache object: 85a5ddf9da70f9a09125574be0f5bf5d


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