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