178ee8d1cSJulian Grajkowski /***************************************************************************
278ee8d1cSJulian Grajkowski  *
378ee8d1cSJulian Grajkowski  *   BSD LICENSE
478ee8d1cSJulian Grajkowski  *
5266b0663SKrzysztof Zdziarski  *   Copyright(c) 2007-2023 Intel Corporation. All rights reserved.
678ee8d1cSJulian Grajkowski  *   All rights reserved.
778ee8d1cSJulian Grajkowski  *
878ee8d1cSJulian Grajkowski  *   Redistribution and use in source and binary forms, with or without
978ee8d1cSJulian Grajkowski  *   modification, are permitted provided that the following conditions
1078ee8d1cSJulian Grajkowski  *   are met:
1178ee8d1cSJulian Grajkowski  *
1278ee8d1cSJulian Grajkowski  *     * Redistributions of source code must retain the above copyright
1378ee8d1cSJulian Grajkowski  *       notice, this list of conditions and the following disclaimer.
1478ee8d1cSJulian Grajkowski  *     * Redistributions in binary form must reproduce the above copyright
1578ee8d1cSJulian Grajkowski  *       notice, this list of conditions and the following disclaimer in
1678ee8d1cSJulian Grajkowski  *       the documentation and/or other materials provided with the
1778ee8d1cSJulian Grajkowski  *       distribution.
1878ee8d1cSJulian Grajkowski  *     * Neither the name of Intel Corporation nor the names of its
1978ee8d1cSJulian Grajkowski  *       contributors may be used to endorse or promote products derived
2078ee8d1cSJulian Grajkowski  *       from this software without specific prior written permission.
2178ee8d1cSJulian Grajkowski  *
2278ee8d1cSJulian Grajkowski  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2378ee8d1cSJulian Grajkowski  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2478ee8d1cSJulian Grajkowski  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2578ee8d1cSJulian Grajkowski  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2678ee8d1cSJulian Grajkowski  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2778ee8d1cSJulian Grajkowski  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2878ee8d1cSJulian Grajkowski  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2978ee8d1cSJulian Grajkowski  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3078ee8d1cSJulian Grajkowski  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3178ee8d1cSJulian Grajkowski  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3278ee8d1cSJulian Grajkowski  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3378ee8d1cSJulian Grajkowski  *
3478ee8d1cSJulian Grajkowski  *
3578ee8d1cSJulian Grajkowski  ***************************************************************************/
3678ee8d1cSJulian Grajkowski 
3778ee8d1cSJulian Grajkowski /*
3878ee8d1cSJulian Grajkowski  *****************************************************************************
3978ee8d1cSJulian Grajkowski  * Doxygen group definitions
4078ee8d1cSJulian Grajkowski  ****************************************************************************/
4178ee8d1cSJulian Grajkowski 
4278ee8d1cSJulian Grajkowski /**
4378ee8d1cSJulian Grajkowski  *****************************************************************************
4478ee8d1cSJulian Grajkowski  * @file cpa_cy_ecdh.h
4578ee8d1cSJulian Grajkowski  *
4678ee8d1cSJulian Grajkowski  * @defgroup cpaCyEcdh Elliptic Curve Diffie-Hellman (ECDH) API
4778ee8d1cSJulian Grajkowski  *
4878ee8d1cSJulian Grajkowski  * @ingroup cpaCy
4978ee8d1cSJulian Grajkowski  *
5078ee8d1cSJulian Grajkowski  * @description
5178ee8d1cSJulian Grajkowski  *      These functions specify the API for Public Key Encryption
5278ee8d1cSJulian Grajkowski  *      (Cryptography) Elliptic Curve Diffie-Hellman (ECDH) operations.
5378ee8d1cSJulian Grajkowski  *
5478ee8d1cSJulian Grajkowski  * @note
5578ee8d1cSJulian Grajkowski  *      Large numbers are represented on the QuickAssist API as described
5678ee8d1cSJulian Grajkowski  *      in the Large Number API (@ref cpaCyLn).
5778ee8d1cSJulian Grajkowski  *
5878ee8d1cSJulian Grajkowski  *      In addition, the bit length of large numbers passed to the API
5978ee8d1cSJulian Grajkowski  *      MUST NOT exceed 576 bits for Elliptic Curve operations.
6078ee8d1cSJulian Grajkowski  *****************************************************************************/
6178ee8d1cSJulian Grajkowski 
6278ee8d1cSJulian Grajkowski #ifndef CPA_CY_ECDH_H_
6378ee8d1cSJulian Grajkowski #define CPA_CY_ECDH_H_
6478ee8d1cSJulian Grajkowski 
6578ee8d1cSJulian Grajkowski #ifdef __cplusplus
6678ee8d1cSJulian Grajkowski extern "C" {
6778ee8d1cSJulian Grajkowski #endif
6878ee8d1cSJulian Grajkowski 
6978ee8d1cSJulian Grajkowski #include "cpa_cy_common.h"
7078ee8d1cSJulian Grajkowski #include "cpa_cy_ec.h"
7178ee8d1cSJulian Grajkowski 
7278ee8d1cSJulian Grajkowski /**
7378ee8d1cSJulian Grajkowski  *****************************************************************************
7478ee8d1cSJulian Grajkowski  * @ingroup cpaCyEcdh
7578ee8d1cSJulian Grajkowski  *      ECDH Point Multiplication Operation Data.
7678ee8d1cSJulian Grajkowski  *
7778ee8d1cSJulian Grajkowski  * @description
7878ee8d1cSJulian Grajkowski  *      This structure contains the operation data for the
7978ee8d1cSJulian Grajkowski  *      cpaCyEcdhPointMultiply function. The client MUST allocate the memory
8078ee8d1cSJulian Grajkowski  *      for this structure and the items pointed to by this structure. When
8178ee8d1cSJulian Grajkowski  *      the structure is passed into the function, ownership of the memory
8278ee8d1cSJulian Grajkowski  *      passes to the function. Ownership of the memory returns to the client
8378ee8d1cSJulian Grajkowski  *      when this structure is returned in the callback function.
8478ee8d1cSJulian Grajkowski  *
8578ee8d1cSJulian Grajkowski  *      For optimal performance all data buffers SHOULD be 8-byte aligned.
8678ee8d1cSJulian Grajkowski  *
8778ee8d1cSJulian Grajkowski  *      All values in this structure are required to be in Most Significant Byte
8878ee8d1cSJulian Grajkowski  *      first order, e.g. a.pData[0] = MSB.
8978ee8d1cSJulian Grajkowski  *
9078ee8d1cSJulian Grajkowski  * @note
9178ee8d1cSJulian Grajkowski  *      If the client modifies or frees the memory referenced in this
9278ee8d1cSJulian Grajkowski  *      structure after it has been submitted to the cpaCyEcdhPointMultiply
9378ee8d1cSJulian Grajkowski  *      function, and before it has been returned in the callback, undefined
9478ee8d1cSJulian Grajkowski  *      behavior will result.
9578ee8d1cSJulian Grajkowski  *
9678ee8d1cSJulian Grajkowski  * @see
9778ee8d1cSJulian Grajkowski  *      cpaCyEcdhPointMultiply()
9878ee8d1cSJulian Grajkowski  *
9978ee8d1cSJulian Grajkowski  *****************************************************************************/
10078ee8d1cSJulian Grajkowski typedef struct _CpaCyEcdhPointMultiplyOpData {
10178ee8d1cSJulian Grajkowski     CpaFlatBuffer k;
10278ee8d1cSJulian Grajkowski     /**< scalar multiplier (k > 0 and k < n) */
10378ee8d1cSJulian Grajkowski     CpaFlatBuffer xg;
10478ee8d1cSJulian Grajkowski     /**< x coordinate of curve point */
10578ee8d1cSJulian Grajkowski     CpaFlatBuffer yg;
10678ee8d1cSJulian Grajkowski     /**< y coordinate of curve point */
10778ee8d1cSJulian Grajkowski     CpaFlatBuffer a;
10878ee8d1cSJulian Grajkowski     /**< a equation coefficient */
10978ee8d1cSJulian Grajkowski     CpaFlatBuffer b;
11078ee8d1cSJulian Grajkowski     /**< b equation coefficient */
11178ee8d1cSJulian Grajkowski     CpaFlatBuffer q;
11278ee8d1cSJulian Grajkowski     /**< prime modulus or irreducible polynomial over GF(2^r) */
11378ee8d1cSJulian Grajkowski     CpaFlatBuffer h;
11478ee8d1cSJulian Grajkowski     /**< cofactor of the operation.
11578ee8d1cSJulian Grajkowski      * If the cofactor is NOT required then set the cofactor to 1 or the
11678ee8d1cSJulian Grajkowski      * data pointer of the Flat Buffer to NULL.
11778ee8d1cSJulian Grajkowski      * There are some restrictions on the value of the cofactor.
11878ee8d1cSJulian Grajkowski      * Implementations of this API will support at least the following:
11978ee8d1cSJulian Grajkowski      * <ul>
12078ee8d1cSJulian Grajkowski      *   <li>NIST standard curves and their cofactors (1, 2 and 4)</li>
12178ee8d1cSJulian Grajkowski      *
12278ee8d1cSJulian Grajkowski      *   <li>Random curves where max(log2(p), log2(n)+log2(h)) <= 512, where
12378ee8d1cSJulian Grajkowski      *   p is the modulus, n is the order of the curve and h is the cofactor
12478ee8d1cSJulian Grajkowski      *   </li>
12578ee8d1cSJulian Grajkowski      * </ul>
12678ee8d1cSJulian Grajkowski      */
12778ee8d1cSJulian Grajkowski 
12878ee8d1cSJulian Grajkowski     CpaCyEcFieldType fieldType;
12978ee8d1cSJulian Grajkowski     /**< field type for the operation */
13078ee8d1cSJulian Grajkowski     CpaBoolean pointVerify;
13178ee8d1cSJulian Grajkowski     /**< set to CPA_TRUE to do a verification before the multiplication */
13278ee8d1cSJulian Grajkowski } CpaCyEcdhPointMultiplyOpData;
13378ee8d1cSJulian Grajkowski 
13478ee8d1cSJulian Grajkowski 
13578ee8d1cSJulian Grajkowski /**
13678ee8d1cSJulian Grajkowski  *****************************************************************************
13778ee8d1cSJulian Grajkowski  * @ingroup cpaCyEcdh
13878ee8d1cSJulian Grajkowski  *      Cryptographic ECDH Statistics.
13978ee8d1cSJulian Grajkowski  * @description
14078ee8d1cSJulian Grajkowski  *      This structure contains statistics on the Cryptographic ECDH
14178ee8d1cSJulian Grajkowski  *      operations. Statistics are set to zero when the component is
14278ee8d1cSJulian Grajkowski  *      initialized, and are collected per instance.
14378ee8d1cSJulian Grajkowski  *
14478ee8d1cSJulian Grajkowski  ****************************************************************************/
14578ee8d1cSJulian Grajkowski typedef struct _CpaCyEcdhStats64 {
14678ee8d1cSJulian Grajkowski     Cpa64U numEcdhPointMultiplyRequests;
14778ee8d1cSJulian Grajkowski     /**< Total number of ECDH Point Multiplication operation requests. */
14878ee8d1cSJulian Grajkowski     Cpa64U numEcdhPointMultiplyRequestErrors;
14978ee8d1cSJulian Grajkowski     /**< Total number of ECDH Point Multiplication operation requests that had
15078ee8d1cSJulian Grajkowski      * an error and could not be processed. */
15178ee8d1cSJulian Grajkowski     Cpa64U numEcdhPointMultiplyCompleted;
15278ee8d1cSJulian Grajkowski     /**< Total number of ECDH Point Multiplication operation requests that
15378ee8d1cSJulian Grajkowski      * completed successfully. */
15478ee8d1cSJulian Grajkowski     Cpa64U numEcdhPointMultiplyCompletedError;
15578ee8d1cSJulian Grajkowski     /**< Total number of ECDH Point Multiplication operation requests that could
15678ee8d1cSJulian Grajkowski      * not be completed successfully due to errors. */
15778ee8d1cSJulian Grajkowski     Cpa64U numEcdhRequestCompletedOutputInvalid;
15878ee8d1cSJulian Grajkowski     /**< Total number of ECDH Point Multiplication or Point Verify operation
15978ee8d1cSJulian Grajkowski      * requests that could not be completed successfully due to an invalid
16078ee8d1cSJulian Grajkowski      * output.
16178ee8d1cSJulian Grajkowski      * Note that this does not indicate an error. */
16278ee8d1cSJulian Grajkowski } CpaCyEcdhStats64;
16378ee8d1cSJulian Grajkowski 
16478ee8d1cSJulian Grajkowski 
16578ee8d1cSJulian Grajkowski /**
16678ee8d1cSJulian Grajkowski  *****************************************************************************
16778ee8d1cSJulian Grajkowski  * @ingroup cpaCyEcdh
16878ee8d1cSJulian Grajkowski  *      Definition of callback function invoked for cpaCyEcdhPointMultiply
16978ee8d1cSJulian Grajkowski  *      requests.
17078ee8d1cSJulian Grajkowski  *
17178ee8d1cSJulian Grajkowski  * @description
17278ee8d1cSJulian Grajkowski  *      This is the prototype for the CpaCyEcdhPointMultiplyCbFunc callback
17378ee8d1cSJulian Grajkowski  *      function
17478ee8d1cSJulian Grajkowski  *
17578ee8d1cSJulian Grajkowski  * @context
17678ee8d1cSJulian Grajkowski  *      This callback function can be executed in a context that DOES NOT
17778ee8d1cSJulian Grajkowski  *      permit sleeping to occur.
17878ee8d1cSJulian Grajkowski  * @assumptions
17978ee8d1cSJulian Grajkowski  *      None
18078ee8d1cSJulian Grajkowski  * @sideEffects
18178ee8d1cSJulian Grajkowski  *      None
18278ee8d1cSJulian Grajkowski  * @reentrant
18378ee8d1cSJulian Grajkowski  *      No
18478ee8d1cSJulian Grajkowski  * @threadSafe
18578ee8d1cSJulian Grajkowski  *      Yes
18678ee8d1cSJulian Grajkowski  *
18778ee8d1cSJulian Grajkowski  * @param[in] pCallbackTag      User-supplied value to help identify request.
18878ee8d1cSJulian Grajkowski  * @param[in] status            Status of the operation. Valid values are
18978ee8d1cSJulian Grajkowski  *                              CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and
19078ee8d1cSJulian Grajkowski  *                              CPA_STATUS_UNSUPPORTED.
19178ee8d1cSJulian Grajkowski  * @param[in] pOpData           Opaque pointer to Operation data supplied in
19278ee8d1cSJulian Grajkowski  *                              request.
19378ee8d1cSJulian Grajkowski  * @param[in] pXk               Output x coordinate from the request.
19478ee8d1cSJulian Grajkowski  * @param[in] pYk               Output y coordinate from the request.
19578ee8d1cSJulian Grajkowski  * @param[in] multiplyStatus    Status of the point multiplication and the
19678ee8d1cSJulian Grajkowski  *                              verification when the pointVerify bit is set
19778ee8d1cSJulian Grajkowski  *                              in the CpaCyEcdhPointMultiplyOpData structure.
19878ee8d1cSJulian Grajkowski  *
19978ee8d1cSJulian Grajkowski  * @retval
20078ee8d1cSJulian Grajkowski  *      None
20178ee8d1cSJulian Grajkowski  * @pre
20278ee8d1cSJulian Grajkowski  *      Component has been initialized.
20378ee8d1cSJulian Grajkowski  * @post
20478ee8d1cSJulian Grajkowski  *      None
20578ee8d1cSJulian Grajkowski  * @note
20678ee8d1cSJulian Grajkowski  *      None
20778ee8d1cSJulian Grajkowski  * @see
20878ee8d1cSJulian Grajkowski  *      cpaCyEcdhPointMultiply()
20978ee8d1cSJulian Grajkowski  *
21078ee8d1cSJulian Grajkowski  *****************************************************************************/
21178ee8d1cSJulian Grajkowski typedef void (*CpaCyEcdhPointMultiplyCbFunc)(void *pCallbackTag,
21278ee8d1cSJulian Grajkowski         CpaStatus status,
21378ee8d1cSJulian Grajkowski         void *pOpData,
21478ee8d1cSJulian Grajkowski         CpaBoolean multiplyStatus,
21578ee8d1cSJulian Grajkowski         CpaFlatBuffer *pXk,
21678ee8d1cSJulian Grajkowski         CpaFlatBuffer *pYk);
21778ee8d1cSJulian Grajkowski 
21878ee8d1cSJulian Grajkowski 
21978ee8d1cSJulian Grajkowski /**
22078ee8d1cSJulian Grajkowski  *****************************************************************************
22178ee8d1cSJulian Grajkowski  * @ingroup cpaCyEcdh
22278ee8d1cSJulian Grajkowski  *      ECDH Point Multiplication.
22378ee8d1cSJulian Grajkowski  *
22478ee8d1cSJulian Grajkowski  * @description
22578ee8d1cSJulian Grajkowski  *      This function performs ECDH Point Multiplication as defined in
22678ee8d1cSJulian Grajkowski  *      ANSI X9.63 2001 section 5.4
22778ee8d1cSJulian Grajkowski  *
22878ee8d1cSJulian Grajkowski  * @context
22978ee8d1cSJulian Grajkowski  *      When called as an asynchronous function it cannot sleep. It can be
23078ee8d1cSJulian Grajkowski  *      executed in a context that does not permit sleeping.
23178ee8d1cSJulian Grajkowski  *      When called as a synchronous function it may sleep. It MUST NOT be
23278ee8d1cSJulian Grajkowski  *      executed in a context that DOES NOT permit sleeping.
23378ee8d1cSJulian Grajkowski  * @assumptions
23478ee8d1cSJulian Grajkowski  *      None
23578ee8d1cSJulian Grajkowski  * @sideEffects
23678ee8d1cSJulian Grajkowski  *      None
23778ee8d1cSJulian Grajkowski  * @blocking
23878ee8d1cSJulian Grajkowski  *      Yes when configured to operate in synchronous mode.
23978ee8d1cSJulian Grajkowski  * @reentrant
24078ee8d1cSJulian Grajkowski  *      No
24178ee8d1cSJulian Grajkowski  * @threadSafe
24278ee8d1cSJulian Grajkowski  *      Yes
24378ee8d1cSJulian Grajkowski  *
24478ee8d1cSJulian Grajkowski  * @param[in]  instanceHandle   Instance handle.
24578ee8d1cSJulian Grajkowski  * @param[in]  pCb              Callback function pointer. If this is set to
24678ee8d1cSJulian Grajkowski  *                              a NULL value the function will operate
24778ee8d1cSJulian Grajkowski  *                              synchronously.
24878ee8d1cSJulian Grajkowski  * @param[in]  pCallbackTag     User-supplied value to help identify request.
24978ee8d1cSJulian Grajkowski  * @param[in]  pOpData          Structure containing all the data needed to
25078ee8d1cSJulian Grajkowski  *                              perform the operation. The client code
25178ee8d1cSJulian Grajkowski  *                              allocates the memory for this structure. This
25278ee8d1cSJulian Grajkowski  *                              component takes ownership of the memory until
25378ee8d1cSJulian Grajkowski  *                              it is returned in the callback.
25478ee8d1cSJulian Grajkowski  * @param[out] pMultiplyStatus  In synchronous mode, the status of the point
25578ee8d1cSJulian Grajkowski  *                              multiplication and the verification when the
25678ee8d1cSJulian Grajkowski  *                              pointVerify bit is set in the
25778ee8d1cSJulian Grajkowski  *                              CpaCyEcdhPointMultiplyOpData structure. Set to
25878ee8d1cSJulian Grajkowski  *                              CPA_FALSE if the point is NOT on the curve or
25978ee8d1cSJulian Grajkowski  *                              at infinity. Set to CPA_TRUE if the point is
26078ee8d1cSJulian Grajkowski  *                              on the curve.
26178ee8d1cSJulian Grajkowski  * @param[out] pXk              Pointer to x coordinate flat buffer.
26278ee8d1cSJulian Grajkowski  * @param[out] pYk              Pointer to y coordinate flat buffer.
26378ee8d1cSJulian Grajkowski  *
26478ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
26578ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_FAIL          Function failed.
26678ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RETRY         Resubmit the request.
26778ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
26878ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
26978ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
27078ee8d1cSJulian Grajkowski  *                                  the request.
27178ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
27278ee8d1cSJulian Grajkowski  *
27378ee8d1cSJulian Grajkowski  * @pre
27478ee8d1cSJulian Grajkowski  *      The component has been initialized via cpaCyStartInstance function.
27578ee8d1cSJulian Grajkowski  * @post
27678ee8d1cSJulian Grajkowski  *      None
27778ee8d1cSJulian Grajkowski  * @note
27878ee8d1cSJulian Grajkowski  *      When pCb is non-NULL an asynchronous callback of type
27978ee8d1cSJulian Grajkowski  *      CpaCyEcdhPointMultiplyCbFunc is generated in response to this function
28078ee8d1cSJulian Grajkowski  *      call.
28178ee8d1cSJulian Grajkowski  *      For optimal performance, data pointers SHOULD be 8-byte aligned.
28278ee8d1cSJulian Grajkowski  *
28378ee8d1cSJulian Grajkowski  * @see
28478ee8d1cSJulian Grajkowski  *      CpaCyEcdhPointMultiplyOpData,
28578ee8d1cSJulian Grajkowski  *      CpaCyEcdhPointMultiplyCbFunc
28678ee8d1cSJulian Grajkowski  *
28778ee8d1cSJulian Grajkowski  *****************************************************************************/
28878ee8d1cSJulian Grajkowski CpaStatus
28978ee8d1cSJulian Grajkowski cpaCyEcdhPointMultiply(const CpaInstanceHandle instanceHandle,
29078ee8d1cSJulian Grajkowski         const CpaCyEcdhPointMultiplyCbFunc pCb,
29178ee8d1cSJulian Grajkowski         void *pCallbackTag,
29278ee8d1cSJulian Grajkowski         const CpaCyEcdhPointMultiplyOpData *pOpData,
29378ee8d1cSJulian Grajkowski         CpaBoolean *pMultiplyStatus,
29478ee8d1cSJulian Grajkowski         CpaFlatBuffer *pXk,
29578ee8d1cSJulian Grajkowski         CpaFlatBuffer *pYk);
29678ee8d1cSJulian Grajkowski 
29778ee8d1cSJulian Grajkowski /**
29878ee8d1cSJulian Grajkowski  *****************************************************************************
29978ee8d1cSJulian Grajkowski  * @ingroup cpaCyEcdh
30078ee8d1cSJulian Grajkowski  *      Query statistics for a specific ECDH instance.
30178ee8d1cSJulian Grajkowski  *
30278ee8d1cSJulian Grajkowski  * @description
30378ee8d1cSJulian Grajkowski  *      This function will query a specific instance of the ECDH implementation
30478ee8d1cSJulian Grajkowski  *      for statistics. The user MUST allocate the CpaCyEcdhStats64 structure
30578ee8d1cSJulian Grajkowski  *      and pass the reference to that structure into this function call. This
30678ee8d1cSJulian Grajkowski  *      function writes the statistic results into the passed in
30778ee8d1cSJulian Grajkowski  *      CpaCyEcdhStats64 structure.
30878ee8d1cSJulian Grajkowski  *
30978ee8d1cSJulian Grajkowski  *      Note: statistics returned by this function do not interrupt current data
31078ee8d1cSJulian Grajkowski  *      processing and as such can be slightly out of sync with operations that
31178ee8d1cSJulian Grajkowski  *      are in progress during the statistics retrieval process.
31278ee8d1cSJulian Grajkowski  *
31378ee8d1cSJulian Grajkowski  * @context
31478ee8d1cSJulian Grajkowski  *      This is a synchronous function and it can sleep. It MUST NOT be
31578ee8d1cSJulian Grajkowski  *      executed in a context that DOES NOT permit sleeping.
31678ee8d1cSJulian Grajkowski  * @assumptions
31778ee8d1cSJulian Grajkowski  *      None
31878ee8d1cSJulian Grajkowski  * @sideEffects
31978ee8d1cSJulian Grajkowski  *      None
32078ee8d1cSJulian Grajkowski  * @blocking
32178ee8d1cSJulian Grajkowski  *      This function is synchronous and blocking.
32278ee8d1cSJulian Grajkowski  * @reentrant
32378ee8d1cSJulian Grajkowski  *      No
32478ee8d1cSJulian Grajkowski  * @threadSafe
32578ee8d1cSJulian Grajkowski  *      Yes
32678ee8d1cSJulian Grajkowski  *
32778ee8d1cSJulian Grajkowski  * @param[in]  instanceHandle       Instance handle.
32878ee8d1cSJulian Grajkowski  * @param[out] pEcdhStats           Pointer to memory into which the statistics
32978ee8d1cSJulian Grajkowski  *                                  will be written.
33078ee8d1cSJulian Grajkowski  *
33178ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
33278ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_FAIL          Function failed.
33378ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
33478ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
33578ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
33678ee8d1cSJulian Grajkowski  *                                  the request.
33778ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
33878ee8d1cSJulian Grajkowski  *
33978ee8d1cSJulian Grajkowski  * @pre
34078ee8d1cSJulian Grajkowski  *      Component has been initialized.
34178ee8d1cSJulian Grajkowski  * @post
34278ee8d1cSJulian Grajkowski  *      None
34378ee8d1cSJulian Grajkowski  * @note
34478ee8d1cSJulian Grajkowski  *      This function operates in a synchronous manner and no asynchronous
34578ee8d1cSJulian Grajkowski  *      callback will be generated.
34678ee8d1cSJulian Grajkowski  * @see
34778ee8d1cSJulian Grajkowski  *      CpaCyEcdhStats64
34878ee8d1cSJulian Grajkowski  *****************************************************************************/
34978ee8d1cSJulian Grajkowski CpaStatus
35078ee8d1cSJulian Grajkowski cpaCyEcdhQueryStats64(const CpaInstanceHandle instanceHandle,
35178ee8d1cSJulian Grajkowski         CpaCyEcdhStats64 *pEcdhStats);
35278ee8d1cSJulian Grajkowski 
35378ee8d1cSJulian Grajkowski #ifdef __cplusplus
35478ee8d1cSJulian Grajkowski } /* close the extern "C" { */
35578ee8d1cSJulian Grajkowski #endif
35678ee8d1cSJulian Grajkowski 
35778ee8d1cSJulian Grajkowski #endif /*CPA_CY_ECDH_H_*/
358