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_prime.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_prime.h
   45  *
   46  * @defgroup cpaCyPrime Prime Number Test API
   47  *
   48  * @ingroup cpaCy
   49  *
   50  * @description
   51  *      These functions specify the API for the prime number test operations.
   52  *
   53  *      For prime number generation, this API SHOULD be used in conjunction
   54  *      with the Deterministic Random Bit Generation API (@ref cpaCyDrbg).
   55  *
   56  * @note
   57  *      Large numbers are represented on the QuickAssist API as described
   58  *      in the Large Number API (@ref cpaCyLn).
   59  *
   60  *      In addition, the bit length of large numbers passed to the API
   61  *      MUST NOT exceed 576 bits for Elliptic Curve operations.
   62  *****************************************************************************/
   63 
   64 #ifndef CPA_CY_PRIME_H
   65 #define CPA_CY_PRIME_H
   66 
   67 #ifdef __cplusplus
   68 extern "C" {
   69 #endif
   70 
   71 #include "cpa_cy_common.h"
   72 
   73 /**
   74  *****************************************************************************
   75  * @ingroup cpaCyPrime
   76  *      Prime Test Operation Data.
   77  * @description
   78  *      This structure contains the operation data for the cpaCyPrimeTest
   79  *      function. The client MUST allocate the memory for this structure and the
   80  *      items pointed to by this structure. When the structure is passed into
   81  *      the function, ownership of the memory passes to the function. Ownership
   82  *      of the memory returns to the client when this structure is returned in
   83  *      the callback function.
   84  *
   85  *      All values in this structure are required to be in Most Significant Byte
   86  *      first order, e.g. primeCandidate.pData[0] = MSB.
   87  *
   88  *      All numbers MUST be stored in big-endian order.
   89  *
   90  * @note
   91  *      If the client modifies or frees the memory referenced in this
   92  *      structure after it has been submitted to the cpaCyPrimeTest
   93  *      function, and before it has been returned in the callback, undefined
   94  *      behavior will result.
   95  *
   96  * @see
   97  *      cpaCyPrimeTest()
   98  *
   99  *****************************************************************************/
  100 typedef struct _CpaCyPrimeTestOpData {
  101     CpaFlatBuffer primeCandidate;
  102     /**< The prime number candidate to test */
  103     CpaBoolean performGcdTest;
  104     /**< A value of CPA_TRUE means perform a GCD Primality Test */
  105     CpaBoolean performFermatTest;
  106     /**< A value of CPA_TRUE means perform a Fermat Primality Test */
  107     Cpa32U numMillerRabinRounds;
  108     /**<  Number of Miller Rabin Primality Test rounds. Set to 0 to perform
  109      * zero Miller Rabin tests. The maximum number of rounds supported is 50.
  110      */
  111     CpaFlatBuffer millerRabinRandomInput;
  112     /**<  Flat buffer containing a pointer to an array of n random numbers
  113      * for Miller Rabin Primality Tests. The size of the buffer MUST be
  114      *
  115      *         n * (MAX(64,x))
  116      *
  117      * where:
  118      *
  119      * - n is the requested number of rounds.
  120      * - x is the minimum number of bytes required to represent the prime
  121      *   candidate, i.e. x = ceiling((ceiling(log2(p)))/8).
  122      *
  123      * Each random number MUST be greater than 1 and less than the prime
  124      * candidate - 1, with leading zeroes as necessary.
  125      */
  126     CpaBoolean performLucasTest;
  127     /**< An CPA_TRUE value means perform a Lucas Primality Test */
  128 } CpaCyPrimeTestOpData;
  129 
  130 /**
  131  *****************************************************************************
  132  * @ingroup cpaCyPrime
  133  *      Prime Number Test Statistics.
  134  * @deprecated
  135  *      As of v1.3 of the Crypto API, this structure has been deprecated,
  136  *      replaced by @ref CpaCyPrimeStats64.
  137  * @description
  138  *      This structure contains statistics on the prime number test operations.
  139  *      Statistics are set to zero when the component is initialized, and are
  140  *      collected per instance.
  141  *
  142  ****************************************************************************/
  143 typedef struct _CpaCyPrimeStats {
  144     Cpa32U numPrimeTestRequests;
  145     /**<  Total number of successful prime number test requests.*/
  146     Cpa32U numPrimeTestRequestErrors;
  147     /**<  Total number of prime number test requests that had an
  148      * error and could not be processed.  */
  149     Cpa32U numPrimeTestCompleted;
  150     /**<  Total number of prime number test operations that completed
  151      * successfully. */
  152     Cpa32U numPrimeTestCompletedErrors;
  153     /**<  Total number of prime number test operations that could not be
  154      * completed successfully due to errors. */
  155     Cpa32U numPrimeTestFailures;
  156     /**<  Total number of prime number test operations that executed
  157      * successfully but the outcome of the test was that the number was not
  158      * prime. */
  159 } CpaCyPrimeStats CPA_DEPRECATED;
  160 
  161 /**
  162  *****************************************************************************
  163  * @ingroup cpaCyPrime
  164  *      Prime Number Test Statistics (64-bit version).
  165  * @description
  166  *      This structure contains a 64-bit version of the statistics on the
  167  *      prime number test operations.
  168  *      Statistics are set to zero when the component is initialized, and are
  169  *      collected per instance.
  170  ****************************************************************************/
  171 typedef struct _CpaCyPrimeStats64 {
  172     Cpa64U numPrimeTestRequests;
  173     /**<  Total number of successful prime number test requests.*/
  174     Cpa64U numPrimeTestRequestErrors;
  175     /**<  Total number of prime number test requests that had an
  176      * error and could not be processed.  */
  177     Cpa64U numPrimeTestCompleted;
  178     /**<  Total number of prime number test operations that completed
  179      * successfully. */
  180     Cpa64U numPrimeTestCompletedErrors;
  181     /**<  Total number of prime number test operations that could not be
  182      * completed successfully due to errors. */
  183     Cpa64U numPrimeTestFailures;
  184     /**<  Total number of prime number test operations that executed
  185      * successfully but the outcome of the test was that the number was not
  186      * prime. */
  187 } CpaCyPrimeStats64;
  188 
  189 /**
  190  *****************************************************************************
  191  * @ingroup cpaCyPrime
  192  *      Definition of callback function invoked for cpaCyPrimeTest
  193  *      requests.
  194  *
  195  * @description
  196  *      This is the prototype for the cpaCyPrimeTest callback function.
  197  *
  198  * @context
  199  *      This callback function can be executed in a context that DOES NOT
  200  *      permit sleeping to occur.
  201  * @assumptions
  202  *      None
  203  * @sideEffects
  204  *      None
  205  * @reentrant
  206  *      No
  207  * @threadSafe
  208  *      Yes
  209  *
  210  * @param[in] pCallbackTag    User-supplied value to help identify request.
  211  * @param[in] status          Status of the operation. Valid values are
  212  *                            CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and
  213  *                            CPA_STATUS_UNSUPPORTED.
  214  * @param[in] pOpData         Opaque pointer to the Operation data pointer
  215  *                            supplied in request.
  216  * @param[in] testPassed      A value of CPA_TRUE means the prime candidate
  217  *                            is probably prime.
  218  *
  219  * @retval
  220  *      None
  221  * @pre
  222  *      Component has been initialized.
  223  * @post
  224  *      None
  225  * @note
  226  *      None
  227  * @see
  228  *      cpaCyPrimeTest()
  229  *
  230  *****************************************************************************/
  231 typedef void (*CpaCyPrimeTestCbFunc)(void *pCallbackTag,
  232         CpaStatus status,
  233         void *pOpData,
  234         CpaBoolean testPassed);
  235 
  236 /**
  237  *****************************************************************************
  238  * @ingroup cpaCyPrime
  239  *      Prime Number Test Function.
  240  *
  241  * @description
  242  *      This function will test probabilistically if a number is prime. Refer
  243  *      to ANSI X9.80 2005 for details. The primality result will be returned
  244  *      in the asynchronous callback.
  245  *
  246  *      The following combination of GCD, Fermat, Miller-Rabin, and Lucas
  247  *      testing is supported:
  248  *      (up to 1x GCD) + (up to 1x Fermat) + (up to 50x Miller-Rabin rounds) +
  249  *      (up to 1x Lucas)
  250  *      For example:
  251  *      (1x GCD) + (25x Miller-Rabin) + (1x Lucas);
  252  *      (1x GCD) + (1x Fermat);
  253  *      (50x Miller-rabin);
  254  *
  255  *      Tests are always performed in order of increasing complexity, for
  256  *      example GCD first, then Fermat, then Miller-Rabin, and finally Lucas.
  257  *
  258  *      For all of the primality tests, the following prime number "sizes"
  259  *      (length in bits) are supported: all sizes up to and including 512
  260  *      bits, as well as sizes 768, 1024, 1536, 2048, 3072 and 4096.
  261  *
  262  *      Candidate prime numbers MUST match these sizes accordingly, with
  263  *      leading zeroes present where necessary.
  264  *
  265  *      When this prime number test is used in conjunction with combined
  266  *      Miller-Rabin and Lucas tests, it may be used as a means of performing
  267  *      a self test operation on the random data generator.
  268  *
  269  *      A response status of ok (pass == CPA_TRUE) means all requested
  270  *      primality tests passed, and the prime candidate is probably prime
  271  *      (the exact probability depends on the primality tests requested).
  272  *      A response status of not ok (pass == CPA_FALSE) means one of the
  273  *      requested primality tests failed (the prime candidate has been found
  274  *      to be composite).
  275  * @context
  276  *      When called as an asynchronous function it cannot sleep. It can be
  277  *      executed in a context that does not permit sleeping.
  278  *      When called as a synchronous function it may sleep. It MUST NOT be
  279  *      executed in a context that DOES NOT permit sleeping.
  280  * @assumptions
  281  *      None
  282  * @sideEffects
  283  *      None
  284  * @blocking
  285  *      Yes when configured to operate in synchronous mode.
  286  * @reentrant
  287  *      No
  288  * @threadSafe
  289  *      Yes
  290  *
  291  * @param[in]  instanceHandle    Instance handle.
  292  * @param[in]  pCb               Callback function pointer. If this is  set to
  293  *                               a NULL value the function will operate
  294  *                               synchronously.
  295  * @param[in]  pCallbackTag      User-supplied value to help identify request.
  296  * @param[in]  pOpData           Structure containing all the data needed to
  297  *                               perform the operation. The client code
  298  *                               allocates the memory for this structure. This
  299  *                               component takes ownership of the memory until
  300  *                               it is returned in the callback.
  301  * @param[out] pTestPassed       A value of CPA_TRUE means the prime candidate
  302  *                               is probably prime.
  303  *
  304  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  305  * @retval CPA_STATUS_FAIL           Function failed.
  306  * @retval CPA_STATUS_RETRY          Resubmit the request.
  307  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  308  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  309  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  310  *                                   the request.
  311  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  312  *
  313  * @pre
  314  *      The component has been initialized via cpaCyStartInstance function.
  315  * @post
  316  *      None
  317  * @note
  318  *      When pCb is non-NULL an asynchronous callback of type
  319  *      CpaCyPrimeTestCbFunc is generated in response to this function call.
  320  *      For optimal performance, data pointers SHOULD be 8-byte aligned.
  321  *
  322  * @see
  323  *      CpaCyPrimeTestOpData, CpaCyPrimeTestCbFunc
  324  *
  325  *****************************************************************************/
  326 CpaStatus
  327 cpaCyPrimeTest(const CpaInstanceHandle instanceHandle,
  328         const CpaCyPrimeTestCbFunc pCb,
  329         void *pCallbackTag,
  330         const CpaCyPrimeTestOpData *pOpData,
  331         CpaBoolean *pTestPassed);
  332 
  333 /******************************************************************************
  334  * @ingroup cpaCyPrime
  335  *      Query prime number statistics specific to an instance.
  336  *
  337  * @deprecated
  338  *      As of v1.3 of the Crypto API, this function has been deprecated,
  339  *      replaced by @ref cpaCyPrimeQueryStats64().
  340  *
  341  * @description
  342  *      This function will query a specific instance for prime number
  343  *      statistics. The user MUST allocate the CpaCyPrimeStats structure
  344  *      and pass the reference to that into this function call. This function
  345  *      will write the statistic results into the passed in
  346  *      CpaCyPrimeStats structure.
  347  *
  348  *      Note: statistics returned by this function do not interrupt current data
  349  *      processing and as such can be slightly out of sync with operations that
  350  *      are in progress during the statistics retrieval process.
  351  *
  352  * @context
  353  *      This is a synchronous function and it can sleep. It MUST NOT be
  354  *      executed in a context that DOES NOT permit sleeping.
  355  * @assumptions
  356  *      None
  357  * @sideEffects
  358  *      None
  359  * @blocking
  360  *      This function is synchronous and blocking.
  361  * @reentrant
  362  *      No
  363  * @threadSafe
  364  *      Yes
  365  *
  366  * @param[in]  instanceHandle       Instance handle.
  367  * @param[out] pPrimeStats          Pointer to memory into which the statistics
  368  *                                  will be written.
  369  *
  370  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  371  * @retval CPA_STATUS_FAIL           Function failed.
  372  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  373  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  374  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  375  *                                   the request.
  376  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  377  *
  378  * @pre
  379  *      Component has been initialized.
  380  * @post
  381  *      None
  382  * @note
  383  *      This function operates in a synchronous manner and no asynchronous
  384  *      callback will be generated.
  385  *
  386  *****************************************************************************/
  387 CpaStatus CPA_DEPRECATED
  388 cpaCyPrimeQueryStats(const CpaInstanceHandle instanceHandle,
  389         struct _CpaCyPrimeStats *pPrimeStats);
  390 
  391 
  392 /******************************************************************************
  393  * @ingroup cpaCyPrime
  394  *      Query prime number statistics specific to an instance.
  395  *
  396  * @description
  397  *      This function will query a specific instance for the 64-bit
  398  *      version of the prime number statistics.
  399  *      The user MUST allocate the CpaCyPrimeStats64 structure
  400  *      and pass the reference to that into this function call. This function
  401  *      will write the statistic results into the passed in
  402  *      CpaCyPrimeStats64 structure.
  403  *
  404  *      Note: statistics returned by this function do not interrupt current data
  405  *      processing and as such can be slightly out of sync with operations that
  406  *      are in progress during the statistics retrieval process.
  407  *
  408  * @context
  409  *      This is a synchronous function and it can sleep. It MUST NOT be
  410  *      executed in a context that DOES NOT permit sleeping.
  411  * @assumptions
  412  *      None
  413  * @sideEffects
  414  *      None
  415  * @blocking
  416  *      This function is synchronous and blocking.
  417  * @reentrant
  418  *      No
  419  * @threadSafe
  420  *      Yes
  421  *
  422  * @param[in]  instanceHandle       Instance handle.
  423  * @param[out] pPrimeStats          Pointer to memory into which the statistics
  424  *                                  will be written.
  425  *
  426  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  427  * @retval CPA_STATUS_FAIL           Function failed.
  428  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  429  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  430  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  431  *                                   the request.
  432  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  433  *
  434  * @pre
  435  *      Component has been initialized.
  436  * @post
  437  *      None
  438  * @note
  439  *      This function operates in a synchronous manner and no asynchronous
  440  *      callback will be generated.
  441  *****************************************************************************/
  442 CpaStatus
  443 cpaCyPrimeQueryStats64(const CpaInstanceHandle instanceHandle,
  444         CpaCyPrimeStats64 *pPrimeStats);
  445 
  446 #ifdef __cplusplus
  447 } /* close the extern "C" { */
  448 #endif
  449 
  450 #endif /* CPA_CY_PRIME_H */

Cache object: 82055888dc5b9105c90e5aa6aa699fd9


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