xref: /isa-l_crypto/sha512_mb/sha512_mb.c (revision 371c22bef8122d95ed1edbb3e0c50661f6d8f897)
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