15e4dc74cSPablo de Lara /**********************************************************************
25e4dc74cSPablo de Lara Copyright(c) 2024 Intel Corporation All rights reserved.
35e4dc74cSPablo de Lara
45e4dc74cSPablo de Lara Redistribution and use in source and binary forms, with or without
55e4dc74cSPablo de Lara modification, are permitted provided that the following conditions
65e4dc74cSPablo de Lara are met:
75e4dc74cSPablo de Lara * Redistributions of source code must retain the above copyright
85e4dc74cSPablo de Lara notice, this list of conditions and the following disclaimer.
95e4dc74cSPablo de Lara * Redistributions in binary form must reproduce the above copyright
105e4dc74cSPablo de Lara notice, this list of conditions and the following disclaimer in
115e4dc74cSPablo de Lara the documentation and/or other materials provided with the
125e4dc74cSPablo de Lara distribution.
135e4dc74cSPablo de Lara * Neither the name of Intel Corporation nor the names of its
145e4dc74cSPablo de Lara contributors may be used to endorse or promote products derived
155e4dc74cSPablo de Lara from this software without specific prior written permission.
165e4dc74cSPablo de Lara
175e4dc74cSPablo de Lara THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185e4dc74cSPablo de Lara "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195e4dc74cSPablo de Lara LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205e4dc74cSPablo de Lara A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215e4dc74cSPablo de Lara OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225e4dc74cSPablo de Lara SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235e4dc74cSPablo de Lara LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245e4dc74cSPablo de Lara DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255e4dc74cSPablo de Lara THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265e4dc74cSPablo de Lara (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275e4dc74cSPablo de Lara OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285e4dc74cSPablo de Lara **********************************************************************/
295e4dc74cSPablo de Lara
305e4dc74cSPablo de Lara #include "isal_crypto_api.h"
315e4dc74cSPablo de Lara #include "internal_fips.h"
325e4dc74cSPablo de Lara
335e4dc74cSPablo de Lara #ifndef likely
345e4dc74cSPablo de Lara #if defined(__unix__) || (__APPLE__) || (__MINGW32__)
355e4dc74cSPablo de Lara #define likely(x) __builtin_expect(!!(x), 1)
365e4dc74cSPablo de Lara #else
375e4dc74cSPablo de Lara #define likely(x) (!!(x))
385e4dc74cSPablo de Lara #endif
395e4dc74cSPablo de Lara #endif /* likely */
405e4dc74cSPablo de Lara
415e4dc74cSPablo de Lara int
isal_self_tests(void)425e4dc74cSPablo de Lara isal_self_tests(void)
435e4dc74cSPablo de Lara {
44*fa03c366SMarcel Cornu #ifdef FIPS_MODE
455e4dc74cSPablo de Lara int ret = asm_check_self_tests_status();
465e4dc74cSPablo de Lara
475e4dc74cSPablo de Lara if (likely(ret == 0))
485e4dc74cSPablo de Lara return 0;
495e4dc74cSPablo de Lara else if (ret == 1)
505e4dc74cSPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
515e4dc74cSPablo de Lara
525e4dc74cSPablo de Lara /* Self tests have not been done yet, so run them */
535e4dc74cSPablo de Lara ret = _aes_self_tests();
545e4dc74cSPablo de Lara
55ee4f1205SPablo de Lara ret |= _sha_self_tests();
56ee4f1205SPablo de Lara
575e4dc74cSPablo de Lara asm_set_self_tests_status(ret);
585e4dc74cSPablo de Lara
595e4dc74cSPablo de Lara if (ret == 0)
605e4dc74cSPablo de Lara return 0;
615e4dc74cSPablo de Lara else
625e4dc74cSPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
63158a2fa5SPablo de Lara #else /* FIPS_MODE disabled */
64*fa03c366SMarcel Cornu return ISAL_CRYPTO_ERR_FIPS_DISABLED;
65158a2fa5SPablo de Lara #endif /* FIPS_MODE */
66*fa03c366SMarcel Cornu }
67