xref: /isa-l_crypto/include/isal_crypto_api.h (revision 3aa2266bba7e1bce04a3fdb96386b1daf42fb065)
1cd3e6503SMarcel Cornu /**********************************************************************
2cd3e6503SMarcel Cornu   Copyright(c) 2024 Intel Corporation All rights reserved.
3cd3e6503SMarcel Cornu 
4cd3e6503SMarcel Cornu   Redistribution and use in source and binary forms, with or without
5cd3e6503SMarcel Cornu   modification, are permitted provided that the following conditions
6cd3e6503SMarcel Cornu   are met:
7cd3e6503SMarcel Cornu     * Redistributions of source code must retain the above copyright
8cd3e6503SMarcel Cornu       notice, this list of conditions and the following disclaimer.
9cd3e6503SMarcel Cornu     * Redistributions in binary form must reproduce the above copyright
10cd3e6503SMarcel Cornu       notice, this list of conditions and the following disclaimer in
11cd3e6503SMarcel Cornu       the documentation and/or other materials provided with the
12cd3e6503SMarcel Cornu       distribution.
13cd3e6503SMarcel Cornu     * Neither the name of Intel Corporation nor the names of its
14cd3e6503SMarcel Cornu       contributors may be used to endorse or promote products derived
15cd3e6503SMarcel Cornu       from this software without specific prior written permission.
16cd3e6503SMarcel Cornu 
17cd3e6503SMarcel Cornu   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18cd3e6503SMarcel Cornu   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19cd3e6503SMarcel Cornu   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20cd3e6503SMarcel Cornu   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21cd3e6503SMarcel Cornu   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22cd3e6503SMarcel Cornu   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23cd3e6503SMarcel Cornu   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24cd3e6503SMarcel Cornu   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25cd3e6503SMarcel Cornu   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26cd3e6503SMarcel Cornu   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27cd3e6503SMarcel Cornu   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28cd3e6503SMarcel Cornu **********************************************************************/
29cd3e6503SMarcel Cornu 
30cd3e6503SMarcel Cornu #ifndef _ISAL_CRYPTO_API_H
31cd3e6503SMarcel Cornu #define _ISAL_CRYPTO_API_H
32cd3e6503SMarcel Cornu 
33cd3e6503SMarcel Cornu #ifdef __cplusplus
34cd3e6503SMarcel Cornu extern "C" {
35cd3e6503SMarcel Cornu #endif
36cd3e6503SMarcel Cornu 
37fea2d86aSMarcel Cornu /* Utility macros */
38fea2d86aSMarcel Cornu #define CONCAT_VERSION_(a, b, c) a##.##b##.##c
39fea2d86aSMarcel Cornu #define CONCAT_VERSION(a, b, c)  CONCAT_VERSION_(a, b, c)
40fea2d86aSMarcel Cornu #define TO_STRING_(a)            #a
41fea2d86aSMarcel Cornu #define TO_STRING(a)             TO_STRING_(a)
42fea2d86aSMarcel Cornu 
43fea2d86aSMarcel Cornu /* Library version numbers */
44fea2d86aSMarcel Cornu #define ISAL_CRYPTO_MAJOR_VERSION 2
45*3aa2266bSPablo de Lara #define ISAL_CRYPTO_MINOR_VERSION 25
46fea2d86aSMarcel Cornu #define ISAL_CRYPTO_PATCH_VERSION 0
47fea2d86aSMarcel Cornu 
48fea2d86aSMarcel Cornu #define ISAL_CRYPTO_MAKE_VERSION(maj, min, patch) ((maj) * 0x10000 + (min) * 0x100 + (patch))
49fea2d86aSMarcel Cornu #define ISAL_CRYPTO_VERSION                                                                        \
50fea2d86aSMarcel Cornu         ISAL_CRYPTO_MAKE_VERSION(ISAL_CRYPTO_MAJOR_VERSION, ISAL_CRYPTO_MINOR_VERSION,             \
51fea2d86aSMarcel Cornu                                  ISAL_CRYPTO_PATCH_VERSION)
52fea2d86aSMarcel Cornu #define ISAL_CRYPTO_VERSION_STR                                                                    \
53fea2d86aSMarcel Cornu         TO_STRING(CONCAT_VERSION(ISAL_CRYPTO_MAJOR_VERSION, ISAL_CRYPTO_MINOR_VERSION,             \
54fea2d86aSMarcel Cornu                                  ISAL_CRYPTO_PATCH_VERSION))
55fea2d86aSMarcel Cornu 
5621f671bbSMarcel Cornu /**
5721f671bbSMarcel Cornu  * @brief Library error types
5821f671bbSMarcel Cornu  */
59cd3e6503SMarcel Cornu typedef enum {
609118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NONE = 0,           //!< No error
619118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_SRC = 2000,    //!< Null source pointer
629118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_DST,           //!< Null destination pointer
639118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_CTX,           //!< Null context pointer
649118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_MGR,           //!< Null manager pointer
659118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_KEY,           //!< Null key pointer
669118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_EXP_KEY,       //!< Null expanded key pointer
679118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_IV,            //!< Null IV pointer
689118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_AUTH,          //!< Null authentication tag pointer
699118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_AAD,           //!< Null AAD pointer
709118dad8SPablo de Lara         ISAL_CRYPTO_ERR_CIPH_LEN,           //!< Invalid cipher length
719118dad8SPablo de Lara         ISAL_CRYPTO_ERR_AUTH_TAG_LEN,       //!< Invalid authentication tag length
729118dad8SPablo de Lara         ISAL_CRYPTO_ERR_INVALID_FLAGS,      //!< Invalid context flags
739118dad8SPablo de Lara         ISAL_CRYPTO_ERR_ALREADY_PROCESSING, //!< Job already processing
749118dad8SPablo de Lara         ISAL_CRYPTO_ERR_ALREADY_COMPLETED,  //!< Job already completed
759118dad8SPablo de Lara         ISAL_CRYPTO_ERR_XTS_NULL_TWEAK,     //!< Null AES-XTS tweak pointer
769118dad8SPablo de Lara         ISAL_CRYPTO_ERR_XTS_SAME_KEYS,      //!< Equal AES-XTS k1 and k2 keys
779118dad8SPablo de Lara         ISAL_CRYPTO_ERR_SELF_TEST,          //!< Self tests
789118dad8SPablo de Lara         ISAL_CRYPTO_ERR_FIPS_INVALID_ALGO,  //!< Non NIST-approved algorithm
799118dad8SPablo de Lara         ISAL_CRYPTO_ERR_WINDOW_SIZE,        //!< Invalid Rolling hash window size
809118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_OFFSET,        //!< Null Rolling hash offset pointer
819118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_MATCH,         //!< Null Rolling hash match pointer
829118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_MASK,          //!< Null Rolling hash mask pointer
839118dad8SPablo de Lara         ISAL_CRYPTO_ERR_NULL_INIT_VAL,      //!< Null Rolling hash initial value pointer
84fa03c366SMarcel Cornu         ISAL_CRYPTO_ERR_FIPS_DISABLED,      //!< FIPS Mode is not enabled
85cd3e6503SMarcel Cornu         /* add new error types above this comment */
86cd3e6503SMarcel Cornu         ISAL_CRYPTO_ERR_MAX /* don't move this one */
87cd3e6503SMarcel Cornu } ISAL_CRYPTO_ERROR;
88cd3e6503SMarcel Cornu 
895e4dc74cSPablo de Lara /**
905e4dc74cSPablo de Lara  * @brief Run all crypto self tests
915e4dc74cSPablo de Lara  *
925e4dc74cSPablo de Lara  * When FIPS Mode is enabled, all isal_XXX API which performs any crypto processing
935e4dc74cSPablo de Lara  * on a NIST-approved algorithm (such as isal_aes_cbc_enc_128) will require this function
945e4dc74cSPablo de Lara  * to be run.
955e4dc74cSPablo de Lara  *
965e4dc74cSPablo de Lara  * This API can be run from the application or it will be run internally in the library,
975e4dc74cSPablo de Lara  * after calling any of the isal_XXX API.
985e4dc74cSPablo de Lara  *
995e4dc74cSPablo de Lara  * Either way, once the self tests have passed, all API calls will be able to start
1005e4dc74cSPablo de Lara  * performing the crypto operation. If the self tests fail, no crypto processing will be done.
1015e4dc74cSPablo de Lara  *
1025e4dc74cSPablo de Lara  * This function is thread safe, so only one thread will run the tests and the rest of the threads
1035e4dc74cSPablo de Lara  * will wait until the tests are finished.
1045e4dc74cSPablo de Lara  *
1055e4dc74cSPablo de Lara  * @return  Self test result
1065e4dc74cSPablo de Lara  * @retval  0 on success, ISAL_CRYPTO_ERR_SELF_TEST on failure
1075e4dc74cSPablo de Lara  */
1085e4dc74cSPablo de Lara int
1095e4dc74cSPablo de Lara isal_self_tests(void);
1105e4dc74cSPablo de Lara 
111fea2d86aSMarcel Cornu /**
112fea2d86aSMarcel Cornu  * @brief Get library version in string format
113fea2d86aSMarcel Cornu  *
114fea2d86aSMarcel Cornu  * @return library version string
115fea2d86aSMarcel Cornu  */
116fea2d86aSMarcel Cornu const char *
117fea2d86aSMarcel Cornu isal_crypto_get_version_str(void);
118fea2d86aSMarcel Cornu 
119fea2d86aSMarcel Cornu /**
120fea2d86aSMarcel Cornu  * @brief Get library version in numerical format
121fea2d86aSMarcel Cornu  *
122fea2d86aSMarcel Cornu  * Use ISAL_CRYPTO_MAKE_VERSION macro to compare this
123fea2d86aSMarcel Cornu  * numerical version against known library version.
124fea2d86aSMarcel Cornu  *
125fea2d86aSMarcel Cornu  * @return library version number
126fea2d86aSMarcel Cornu  */
127fea2d86aSMarcel Cornu unsigned
128fea2d86aSMarcel Cornu isal_crypto_get_version(void);
129fea2d86aSMarcel Cornu 
130cd3e6503SMarcel Cornu #ifdef __cplusplus
131cd3e6503SMarcel Cornu }
132cd3e6503SMarcel Cornu #endif //__cplusplus
133cd3e6503SMarcel Cornu #endif // ifndef _ISAL_CRYPTO_API_H
134