18c5795a3SMarcel Cornu /**********************************************************************
28c5795a3SMarcel Cornu Copyright(c) 2024 Intel Corporation All rights reserved.
38c5795a3SMarcel Cornu
48c5795a3SMarcel Cornu Redistribution and use in source and binary forms, with or without
58c5795a3SMarcel Cornu modification, are permitted provided that the following conditions
68c5795a3SMarcel Cornu are met:
78c5795a3SMarcel Cornu * Redistributions of source code must retain the above copyright
88c5795a3SMarcel Cornu notice, this list of conditions and the following disclaimer.
98c5795a3SMarcel Cornu * Redistributions in binary form must reproduce the above copyright
108c5795a3SMarcel Cornu notice, this list of conditions and the following disclaimer in
118c5795a3SMarcel Cornu the documentation and/or other materials provided with the
128c5795a3SMarcel Cornu distribution.
138c5795a3SMarcel Cornu * Neither the name of Intel Corporation nor the names of its
148c5795a3SMarcel Cornu contributors may be used to endorse or promote products derived
158c5795a3SMarcel Cornu from this software without specific prior written permission.
168c5795a3SMarcel Cornu
178c5795a3SMarcel Cornu THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
188c5795a3SMarcel Cornu "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
198c5795a3SMarcel Cornu LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
208c5795a3SMarcel Cornu A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
218c5795a3SMarcel Cornu OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
228c5795a3SMarcel Cornu SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
238c5795a3SMarcel Cornu LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
248c5795a3SMarcel Cornu DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
258c5795a3SMarcel Cornu THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268c5795a3SMarcel Cornu (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
278c5795a3SMarcel Cornu OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288c5795a3SMarcel Cornu **********************************************************************/
298c5795a3SMarcel Cornu
308c5795a3SMarcel Cornu #include "sha1_mb.h"
317f87eab4SPablo de Lara #include "sha1_mb_internal.h"
328c5795a3SMarcel Cornu #include "isal_crypto_api.h"
338c5795a3SMarcel Cornu #include "multi_buffer.h"
348c5795a3SMarcel Cornu
35868f05eaSMarcel Cornu int
isal_sha1_ctx_mgr_init(ISAL_SHA1_HASH_CTX_MGR * mgr)360106da91SPablo de Lara isal_sha1_ctx_mgr_init(ISAL_SHA1_HASH_CTX_MGR *mgr)
378c5795a3SMarcel Cornu {
388c5795a3SMarcel Cornu #ifdef SAFE_PARAM
398c5795a3SMarcel Cornu if (mgr == NULL)
408c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
418c5795a3SMarcel Cornu #endif
42848eb47cSPablo de Lara
43848eb47cSPablo de Lara #ifdef FIPS_MODE
44848eb47cSPablo de Lara if (isal_self_tests())
45848eb47cSPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
46848eb47cSPablo de Lara #endif
47848eb47cSPablo de Lara
487f87eab4SPablo de Lara _sha1_ctx_mgr_init(mgr);
498c5795a3SMarcel Cornu
508c5795a3SMarcel Cornu return 0;
518c5795a3SMarcel Cornu }
528c5795a3SMarcel Cornu
53868f05eaSMarcel Cornu int
isal_sha1_ctx_mgr_submit(ISAL_SHA1_HASH_CTX_MGR * mgr,ISAL_SHA1_HASH_CTX * ctx_in,ISAL_SHA1_HASH_CTX ** ctx_out,const void * buffer,const uint32_t len,const ISAL_HASH_CTX_FLAG flags)540106da91SPablo de Lara isal_sha1_ctx_mgr_submit(ISAL_SHA1_HASH_CTX_MGR *mgr, ISAL_SHA1_HASH_CTX *ctx_in,
550106da91SPablo de Lara ISAL_SHA1_HASH_CTX **ctx_out, const void *buffer, const uint32_t len,
56*8cb7fe78SPablo de Lara const ISAL_HASH_CTX_FLAG flags)
578c5795a3SMarcel Cornu {
588c5795a3SMarcel Cornu #ifdef SAFE_PARAM
598c5795a3SMarcel Cornu if (mgr == NULL)
608c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
618c5795a3SMarcel Cornu if (ctx_in == NULL || ctx_out == NULL)
628c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_CTX;
63*8cb7fe78SPablo de Lara /* OK to have NULL source buffer when flags is ISAL_HASH_FIRST or ISAL_HASH_LAST */
64*8cb7fe78SPablo de Lara if (buffer == NULL && (flags == ISAL_HASH_UPDATE || flags == ISAL_HASH_ENTIRE))
658c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_SRC;
668c5795a3SMarcel Cornu #endif
678c5795a3SMarcel Cornu
68848eb47cSPablo de Lara #ifdef FIPS_MODE
69848eb47cSPablo de Lara if (isal_self_tests())
70848eb47cSPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
71848eb47cSPablo de Lara #endif
72848eb47cSPablo de Lara
737f87eab4SPablo de Lara *ctx_out = _sha1_ctx_mgr_submit(mgr, ctx_in, buffer, len, flags);
748c5795a3SMarcel Cornu
758c5795a3SMarcel Cornu #ifdef SAFE_PARAM
76*8cb7fe78SPablo de Lara if (*ctx_out != NULL &&
77*8cb7fe78SPablo de Lara (ISAL_SHA1_HASH_CTX *) (*ctx_out)->error != ISAL_HASH_CTX_ERROR_NONE) {
780106da91SPablo de Lara ISAL_SHA1_HASH_CTX *cp = (ISAL_SHA1_HASH_CTX *) (*ctx_out);
798c5795a3SMarcel Cornu
80*8cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_INVALID_FLAGS)
818c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_INVALID_FLAGS;
82*8cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_ALREADY_PROCESSING)
838c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_ALREADY_PROCESSING;
84*8cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_ALREADY_COMPLETED)
858c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_ALREADY_COMPLETED;
868c5795a3SMarcel Cornu }
878c5795a3SMarcel Cornu #endif
888c5795a3SMarcel Cornu return 0;
898c5795a3SMarcel Cornu }
908c5795a3SMarcel Cornu
91868f05eaSMarcel Cornu int
isal_sha1_ctx_mgr_flush(ISAL_SHA1_HASH_CTX_MGR * mgr,ISAL_SHA1_HASH_CTX ** ctx_out)920106da91SPablo de Lara isal_sha1_ctx_mgr_flush(ISAL_SHA1_HASH_CTX_MGR *mgr, ISAL_SHA1_HASH_CTX **ctx_out)
938c5795a3SMarcel Cornu {
948c5795a3SMarcel Cornu #ifdef SAFE_PARAM
958c5795a3SMarcel Cornu if (mgr == NULL)
968c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
978c5795a3SMarcel Cornu if (ctx_out == NULL)
988c5795a3SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_CTX;
998c5795a3SMarcel Cornu #endif
1008c5795a3SMarcel Cornu
101848eb47cSPablo de Lara #ifdef FIPS_MODE
102848eb47cSPablo de Lara if (isal_self_tests())
103848eb47cSPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
104848eb47cSPablo de Lara #endif
105848eb47cSPablo de Lara
1067f87eab4SPablo de Lara *ctx_out = _sha1_ctx_mgr_flush(mgr);
1078c5795a3SMarcel Cornu
1088c5795a3SMarcel Cornu return 0;
1098c5795a3SMarcel Cornu }
1107f87eab4SPablo de Lara
1117f87eab4SPablo de Lara /*
1127f87eab4SPablo de Lara * =============================================================================
1137f87eab4SPablo de Lara * LEGACY / DEPRECATED API
1147f87eab4SPablo de Lara * =============================================================================
1157f87eab4SPablo de Lara */
1167f87eab4SPablo de Lara
1177f87eab4SPablo de Lara void
sha1_ctx_mgr_init(ISAL_SHA1_HASH_CTX_MGR * mgr)1180106da91SPablo de Lara sha1_ctx_mgr_init(ISAL_SHA1_HASH_CTX_MGR *mgr)
1197f87eab4SPablo de Lara {
1207f87eab4SPablo de Lara _sha1_ctx_mgr_init(mgr);
1217f87eab4SPablo de Lara }
1227f87eab4SPablo de Lara
1230106da91SPablo de Lara ISAL_SHA1_HASH_CTX *
sha1_ctx_mgr_submit(ISAL_SHA1_HASH_CTX_MGR * mgr,ISAL_SHA1_HASH_CTX * ctx,const void * buffer,uint32_t len,ISAL_HASH_CTX_FLAG flags)1240106da91SPablo de Lara sha1_ctx_mgr_submit(ISAL_SHA1_HASH_CTX_MGR *mgr, ISAL_SHA1_HASH_CTX *ctx, const void *buffer,
125*8cb7fe78SPablo de Lara uint32_t len, ISAL_HASH_CTX_FLAG flags)
1267f87eab4SPablo de Lara {
1277f87eab4SPablo de Lara return _sha1_ctx_mgr_submit(mgr, ctx, buffer, len, flags);
1287f87eab4SPablo de Lara }
1297f87eab4SPablo de Lara
1300106da91SPablo de Lara ISAL_SHA1_HASH_CTX *
sha1_ctx_mgr_flush(ISAL_SHA1_HASH_CTX_MGR * mgr)1310106da91SPablo de Lara sha1_ctx_mgr_flush(ISAL_SHA1_HASH_CTX_MGR *mgr)
1327f87eab4SPablo de Lara {
1337f87eab4SPablo de Lara return _sha1_ctx_mgr_flush(mgr);
1347f87eab4SPablo de Lara }
135