1f69ff2b8SMarcel Cornu /**********************************************************************
2f69ff2b8SMarcel Cornu Copyright(c) 2024 Intel Corporation All rights reserved.
3f69ff2b8SMarcel Cornu
4f69ff2b8SMarcel Cornu Redistribution and use in source and binary forms, with or without
5f69ff2b8SMarcel Cornu modification, are permitted provided that the following conditions
6f69ff2b8SMarcel Cornu are met:
7f69ff2b8SMarcel Cornu * Redistributions of source code must retain the above copyright
8f69ff2b8SMarcel Cornu notice, this list of conditions and the following disclaimer.
9f69ff2b8SMarcel Cornu * Redistributions in binary form must reproduce the above copyright
10f69ff2b8SMarcel Cornu notice, this list of conditions and the following disclaimer in
11f69ff2b8SMarcel Cornu the documentation and/or other materials provided with the
12f69ff2b8SMarcel Cornu distribution.
13f69ff2b8SMarcel Cornu * Neither the name of Intel Corporation nor the names of its
14f69ff2b8SMarcel Cornu contributors may be used to endorse or promote products derived
15f69ff2b8SMarcel Cornu from this software without specific prior written permission.
16f69ff2b8SMarcel Cornu
17f69ff2b8SMarcel Cornu THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18f69ff2b8SMarcel Cornu "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19f69ff2b8SMarcel Cornu LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20f69ff2b8SMarcel Cornu A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21f69ff2b8SMarcel Cornu OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22f69ff2b8SMarcel Cornu SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23f69ff2b8SMarcel Cornu LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24f69ff2b8SMarcel Cornu DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25f69ff2b8SMarcel Cornu THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26f69ff2b8SMarcel Cornu (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27f69ff2b8SMarcel Cornu OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28f69ff2b8SMarcel Cornu **********************************************************************/
29f69ff2b8SMarcel Cornu
30*371c22beSPablo de Lara #include "sha512_mb_internal.h"
31f69ff2b8SMarcel Cornu #include "isal_crypto_api.h"
32f69ff2b8SMarcel Cornu #include "multi_buffer.h"
33f69ff2b8SMarcel Cornu
343fb7b5f1SMarcel Cornu int
isal_sha512_ctx_mgr_init(ISAL_SHA512_HASH_CTX_MGR * mgr)35592e639eSPablo de Lara isal_sha512_ctx_mgr_init(ISAL_SHA512_HASH_CTX_MGR *mgr)
36f69ff2b8SMarcel Cornu {
37f69ff2b8SMarcel Cornu #ifdef SAFE_PARAM
38f69ff2b8SMarcel Cornu if (mgr == NULL)
39f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
40f69ff2b8SMarcel Cornu #endif
414ecb86c3SPablo de Lara
424ecb86c3SPablo de Lara #ifdef FIPS_MODE
434ecb86c3SPablo de Lara if (isal_self_tests())
444ecb86c3SPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
454ecb86c3SPablo de Lara #endif
464ecb86c3SPablo de Lara
47*371c22beSPablo de Lara _sha512_ctx_mgr_init(mgr);
48f69ff2b8SMarcel Cornu
49f69ff2b8SMarcel Cornu return 0;
50f69ff2b8SMarcel Cornu }
51f69ff2b8SMarcel Cornu
523fb7b5f1SMarcel Cornu int
isal_sha512_ctx_mgr_submit(ISAL_SHA512_HASH_CTX_MGR * mgr,ISAL_SHA512_HASH_CTX * ctx_in,ISAL_SHA512_HASH_CTX ** ctx_out,const void * buffer,const uint32_t len,const ISAL_HASH_CTX_FLAG flags)53592e639eSPablo de Lara isal_sha512_ctx_mgr_submit(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx_in,
54592e639eSPablo de Lara ISAL_SHA512_HASH_CTX **ctx_out, const void *buffer, const uint32_t len,
558cb7fe78SPablo de Lara const ISAL_HASH_CTX_FLAG flags)
56f69ff2b8SMarcel Cornu {
57f69ff2b8SMarcel Cornu #ifdef SAFE_PARAM
58f69ff2b8SMarcel Cornu if (mgr == NULL)
59f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
60f69ff2b8SMarcel Cornu if (ctx_in == NULL || ctx_out == NULL)
61f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_CTX;
6243ae3272SPablo de Lara /* OK to have NULL source buffer when flags is HASH_FIRST or HASH_LAST */
6343ae3272SPablo de Lara if (buffer == NULL && (flags == ISAL_HASH_UPDATE || flags == ISAL_HASH_ENTIRE))
64f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_SRC;
65f69ff2b8SMarcel Cornu #endif
66f69ff2b8SMarcel Cornu
674ecb86c3SPablo de Lara #ifdef FIPS_MODE
684ecb86c3SPablo de Lara if (isal_self_tests())
694ecb86c3SPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
704ecb86c3SPablo de Lara #endif
714ecb86c3SPablo de Lara
72*371c22beSPablo de Lara *ctx_out = _sha512_ctx_mgr_submit(mgr, ctx_in, buffer, len, flags);
73f69ff2b8SMarcel Cornu
74f69ff2b8SMarcel Cornu #ifdef SAFE_PARAM
75592e639eSPablo de Lara if (*ctx_out != NULL &&
76592e639eSPablo de Lara (ISAL_SHA512_HASH_CTX *) (*ctx_out)->error != ISAL_HASH_CTX_ERROR_NONE) {
77592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *cp = (ISAL_SHA512_HASH_CTX *) (*ctx_out);
78f69ff2b8SMarcel Cornu
798cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_INVALID_FLAGS)
80f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_INVALID_FLAGS;
818cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_ALREADY_PROCESSING)
82f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_ALREADY_PROCESSING;
838cb7fe78SPablo de Lara if (cp->error == ISAL_HASH_CTX_ERROR_ALREADY_COMPLETED)
84f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_ALREADY_COMPLETED;
85f69ff2b8SMarcel Cornu }
86f69ff2b8SMarcel Cornu #endif
87f69ff2b8SMarcel Cornu return 0;
88f69ff2b8SMarcel Cornu }
89f69ff2b8SMarcel Cornu
903fb7b5f1SMarcel Cornu int
isal_sha512_ctx_mgr_flush(ISAL_SHA512_HASH_CTX_MGR * mgr,ISAL_SHA512_HASH_CTX ** ctx_out)91592e639eSPablo de Lara isal_sha512_ctx_mgr_flush(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX **ctx_out)
92f69ff2b8SMarcel Cornu {
93f69ff2b8SMarcel Cornu #ifdef SAFE_PARAM
94f69ff2b8SMarcel Cornu if (mgr == NULL)
95f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_MGR;
96f69ff2b8SMarcel Cornu if (ctx_out == NULL)
97f69ff2b8SMarcel Cornu return ISAL_CRYPTO_ERR_NULL_CTX;
98f69ff2b8SMarcel Cornu #endif
99f69ff2b8SMarcel Cornu
1004ecb86c3SPablo de Lara #ifdef FIPS_MODE
1014ecb86c3SPablo de Lara if (isal_self_tests())
1024ecb86c3SPablo de Lara return ISAL_CRYPTO_ERR_SELF_TEST;
1034ecb86c3SPablo de Lara #endif
1044ecb86c3SPablo de Lara
105*371c22beSPablo de Lara *ctx_out = _sha512_ctx_mgr_flush(mgr);
106f69ff2b8SMarcel Cornu
107f69ff2b8SMarcel Cornu return 0;
108f69ff2b8SMarcel Cornu }
109*371c22beSPablo de Lara
110*371c22beSPablo de Lara /*
111*371c22beSPablo de Lara * =============================================================================
112*371c22beSPablo de Lara * LEGACY / DEPRECATED API
113*371c22beSPablo de Lara * =============================================================================
114*371c22beSPablo de Lara */
115*371c22beSPablo de Lara
116*371c22beSPablo de Lara void
sha512_ctx_mgr_init(ISAL_SHA512_HASH_CTX_MGR * mgr)117*371c22beSPablo de Lara sha512_ctx_mgr_init(ISAL_SHA512_HASH_CTX_MGR *mgr)
118*371c22beSPablo de Lara {
119*371c22beSPablo de Lara _sha512_ctx_mgr_init(mgr);
120*371c22beSPablo de Lara }
121*371c22beSPablo de Lara
122*371c22beSPablo de Lara ISAL_SHA512_HASH_CTX *
sha512_ctx_mgr_submit(ISAL_SHA512_HASH_CTX_MGR * mgr,ISAL_SHA512_HASH_CTX * ctx,const void * buffer,uint32_t len,ISAL_HASH_CTX_FLAG flags)123*371c22beSPablo de Lara sha512_ctx_mgr_submit(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx, const void *buffer,
124*371c22beSPablo de Lara uint32_t len, ISAL_HASH_CTX_FLAG flags)
125*371c22beSPablo de Lara {
126*371c22beSPablo de Lara return _sha512_ctx_mgr_submit(mgr, ctx, buffer, len, flags);
127*371c22beSPablo de Lara }
128*371c22beSPablo de Lara
129*371c22beSPablo de Lara ISAL_SHA512_HASH_CTX *
sha512_ctx_mgr_flush(ISAL_SHA512_HASH_CTX_MGR * mgr)130*371c22beSPablo de Lara sha512_ctx_mgr_flush(ISAL_SHA512_HASH_CTX_MGR *mgr)
131*371c22beSPablo de Lara {
132*371c22beSPablo de Lara return _sha512_ctx_mgr_flush(mgr);
133*371c22beSPablo de Lara }
134