xref: /isa-l_crypto/include/sha512_mb_internal.h (revision 371c22bef8122d95ed1edbb3e0c50661f6d8f897)
1d57a697cSPablo de Lara /**********************************************************************
2d57a697cSPablo de Lara   Copyright(c) 2024 Intel Corporation All rights reserved.
3d57a697cSPablo de Lara 
4d57a697cSPablo de Lara   Redistribution and use in source and binary forms, with or without
5d57a697cSPablo de Lara   modification, are permitted provided that the following conditions
6d57a697cSPablo de Lara   are met:
7d57a697cSPablo de Lara     * Redistributions of source code must retain the above copyright
8d57a697cSPablo de Lara       notice, this list of conditions and the following disclaimer.
9d57a697cSPablo de Lara     * Redistributions in binary form must reproduce the above copyright
10d57a697cSPablo de Lara       notice, this list of conditions and the following disclaimer in
11d57a697cSPablo de Lara       the documentation and/or other materials provided with the
12d57a697cSPablo de Lara       distribution.
13d57a697cSPablo de Lara     * Neither the name of Intel Corporation nor the names of its
14d57a697cSPablo de Lara       contributors may be used to endorse or promote products derived
15d57a697cSPablo de Lara       from this software without specific prior written permission.
16d57a697cSPablo de Lara 
17d57a697cSPablo de Lara   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18d57a697cSPablo de Lara   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19d57a697cSPablo de Lara   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20d57a697cSPablo de Lara   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21d57a697cSPablo de Lara   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22d57a697cSPablo de Lara   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23d57a697cSPablo de Lara   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24d57a697cSPablo de Lara   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25d57a697cSPablo de Lara   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26d57a697cSPablo de Lara   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27d57a697cSPablo de Lara   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28d57a697cSPablo de Lara **********************************************************************/
29d57a697cSPablo de Lara 
30d57a697cSPablo de Lara #ifndef _SHA512_MB_INTERNAL_H_
31d57a697cSPablo de Lara #define _SHA512_MB_INTERNAL_H_
32d57a697cSPablo de Lara 
33d57a697cSPablo de Lara /**
34d57a697cSPablo de Lara  *  @file sha512_mb_internal.h
35d57a697cSPablo de Lara  *  @brief Multi-buffer CTX API function prototypes and structures
36d57a697cSPablo de Lara  *
37d57a697cSPablo de Lara  */
38d57a697cSPablo de Lara 
39d57a697cSPablo de Lara #include <stdint.h>
40d57a697cSPablo de Lara #include <string.h>
41d57a697cSPablo de Lara 
42d57a697cSPablo de Lara #include "sha512_mb.h"
43d57a697cSPablo de Lara #include "multi_buffer.h"
44d57a697cSPablo de Lara #include "types.h"
45d57a697cSPablo de Lara 
46d57a697cSPablo de Lara #ifdef __cplusplus
47d57a697cSPablo de Lara extern "C" {
48d57a697cSPablo de Lara #endif
49d57a697cSPablo de Lara 
50592e639eSPablo de Lara #define ISAL_SHA512_X4_LANES        4
51592e639eSPablo de Lara #define ISAL_SHA512_LOG2_BLOCK_SIZE 7
52592e639eSPablo de Lara #define ISAL_SHA512_INITIAL_DIGEST                                                                 \
534e73c0e8SPablo de Lara         0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,            \
544e73c0e8SPablo de Lara                 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
554e73c0e8SPablo de Lara 
56*371c22beSPablo de Lara /**
57*371c22beSPablo de Lara  * @brief Initialize the SHA512 multi-buffer manager structure.
58*371c22beSPablo de Lara  * @requires SSE4.1 or AVX or AVX2 or AVX512
59*371c22beSPablo de Lara  *
60*371c22beSPablo de Lara  * @param mgr	Structure holding context level state info
61*371c22beSPablo de Lara  * @returns void
62*371c22beSPablo de Lara  */
63*371c22beSPablo de Lara void
64*371c22beSPablo de Lara _sha512_ctx_mgr_init(ISAL_SHA512_HASH_CTX_MGR *mgr);
65*371c22beSPablo de Lara 
66*371c22beSPablo de Lara /**
67*371c22beSPablo de Lara  * @brief  Submit a new SHA512 job to the multi-buffer manager.
68*371c22beSPablo de Lara  * @requires SSE4.1 or AVX or AVX2 or AVX512
69*371c22beSPablo de Lara  *
70*371c22beSPablo de Lara  * @param  mgr Structure holding context level state info
71*371c22beSPablo de Lara  * @param  ctx Structure holding ctx job info
72*371c22beSPablo de Lara  * @param  buffer Pointer to buffer to be processed
73*371c22beSPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
74*371c22beSPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
75*371c22beSPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
76*371c22beSPablo de Lara  */
77*371c22beSPablo de Lara ISAL_SHA512_HASH_CTX *
78*371c22beSPablo de Lara _sha512_ctx_mgr_submit(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx, const void *buffer,
79*371c22beSPablo de Lara                        uint32_t len, ISAL_HASH_CTX_FLAG flags);
80*371c22beSPablo de Lara 
81*371c22beSPablo de Lara /**
82*371c22beSPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
83*371c22beSPablo de Lara  * @requires SSE4.1 or AVX or AVX2 or AVX512
84*371c22beSPablo de Lara  *
85*371c22beSPablo de Lara  * @param mgr	Structure holding context level state info
86*371c22beSPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
87*371c22beSPablo de Lara  */
88*371c22beSPablo de Lara ISAL_SHA512_HASH_CTX *
89*371c22beSPablo de Lara _sha512_ctx_mgr_flush(ISAL_SHA512_HASH_CTX_MGR *mgr);
90*371c22beSPablo de Lara 
91d57a697cSPablo de Lara /*******************************************************************
9298bffc31SPablo de Lara  * Context level API function prototypes
9398bffc31SPablo de Lara  ******************************************************************/
9498bffc31SPablo de Lara 
9598bffc31SPablo de Lara /**
9698bffc31SPablo de Lara  * @brief Initialize the context level SHA512 multi-buffer manager structure.
9798bffc31SPablo de Lara  * @requires SSE4.1
9898bffc31SPablo de Lara  *
9998bffc31SPablo de Lara  * @param mgr Structure holding context level state info
10098bffc31SPablo de Lara  * @returns void
10198bffc31SPablo de Lara  */
10298bffc31SPablo de Lara void
103592e639eSPablo de Lara _sha512_ctx_mgr_init_sse(ISAL_SHA512_HASH_CTX_MGR *mgr);
10498bffc31SPablo de Lara 
10598bffc31SPablo de Lara /**
10698bffc31SPablo de Lara  * @brief  Submit a new SHA512 job to the context level multi-buffer manager.
10798bffc31SPablo de Lara  * @requires SSE4.1
10898bffc31SPablo de Lara  *
10998bffc31SPablo de Lara  * @param  mgr Structure holding context level state info
11098bffc31SPablo de Lara  * @param  ctx Structure holding ctx job info
11198bffc31SPablo de Lara  * @param  buffer Pointer to buffer to be processed
11298bffc31SPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
11398bffc31SPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
11498bffc31SPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
11598bffc31SPablo de Lara  */
116592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
117592e639eSPablo de Lara _sha512_ctx_mgr_submit_sse(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx,
118592e639eSPablo de Lara                            const void *buffer, uint32_t len, ISAL_HASH_CTX_FLAG flags);
11998bffc31SPablo de Lara 
12098bffc31SPablo de Lara /**
12198bffc31SPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
12298bffc31SPablo de Lara  * @requires SSE4.1
12398bffc31SPablo de Lara  *
12498bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
12598bffc31SPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
12698bffc31SPablo de Lara  */
127592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
128592e639eSPablo de Lara _sha512_ctx_mgr_flush_sse(ISAL_SHA512_HASH_CTX_MGR *mgr);
12998bffc31SPablo de Lara 
13098bffc31SPablo de Lara /**
13198bffc31SPablo de Lara  * @brief Initialize the SHA512 multi-buffer manager structure.
13298bffc31SPablo de Lara  * @requires AVX
13398bffc31SPablo de Lara  *
13498bffc31SPablo de Lara  * @param mgr Structure holding context level state info
13598bffc31SPablo de Lara  * @returns void
13698bffc31SPablo de Lara  */
13798bffc31SPablo de Lara void
138592e639eSPablo de Lara _sha512_ctx_mgr_init_avx(ISAL_SHA512_HASH_CTX_MGR *mgr);
13998bffc31SPablo de Lara 
14098bffc31SPablo de Lara /**
14198bffc31SPablo de Lara  * @brief  Submit a new SHA512 job to the multi-buffer manager.
14298bffc31SPablo de Lara  * @requires AVX
14398bffc31SPablo de Lara  *
14498bffc31SPablo de Lara  * @param  mgr Structure holding context level state info
14598bffc31SPablo de Lara  * @param  ctx Structure holding ctx job info
14698bffc31SPablo de Lara  * @param  buffer Pointer to buffer to be processed
14798bffc31SPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
14898bffc31SPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
14998bffc31SPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
15098bffc31SPablo de Lara  */
151592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
152592e639eSPablo de Lara _sha512_ctx_mgr_submit_avx(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx,
153592e639eSPablo de Lara                            const void *buffer, uint32_t len, ISAL_HASH_CTX_FLAG flags);
15498bffc31SPablo de Lara 
15598bffc31SPablo de Lara /**
15698bffc31SPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
15798bffc31SPablo de Lara  * @requires AVX
15898bffc31SPablo de Lara  *
15998bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
16098bffc31SPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
16198bffc31SPablo de Lara  */
162592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
163592e639eSPablo de Lara _sha512_ctx_mgr_flush_avx(ISAL_SHA512_HASH_CTX_MGR *mgr);
16498bffc31SPablo de Lara 
16598bffc31SPablo de Lara /**
16698bffc31SPablo de Lara  * @brief Initialize the SHA512 multi-buffer manager structure.
16798bffc31SPablo de Lara  * @requires AVX2
16898bffc31SPablo de Lara  *
16998bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
17098bffc31SPablo de Lara  * @returns void
17198bffc31SPablo de Lara  */
17298bffc31SPablo de Lara void
173592e639eSPablo de Lara _sha512_ctx_mgr_init_avx2(ISAL_SHA512_HASH_CTX_MGR *mgr);
17498bffc31SPablo de Lara 
17598bffc31SPablo de Lara /**
17698bffc31SPablo de Lara  * @brief  Submit a new SHA512 job to the multi-buffer manager.
17798bffc31SPablo de Lara  * @requires AVX2
17898bffc31SPablo de Lara  *
17998bffc31SPablo de Lara  * @param  mgr Structure holding context level state info
18098bffc31SPablo de Lara  * @param  ctx Structure holding ctx job info
18198bffc31SPablo de Lara  * @param  buffer Pointer to buffer to be processed
18298bffc31SPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
18398bffc31SPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
18498bffc31SPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
18598bffc31SPablo de Lara  */
186592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
187592e639eSPablo de Lara _sha512_ctx_mgr_submit_avx2(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx,
188592e639eSPablo de Lara                             const void *buffer, uint32_t len, ISAL_HASH_CTX_FLAG flags);
18998bffc31SPablo de Lara 
19098bffc31SPablo de Lara /**
19198bffc31SPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
19298bffc31SPablo de Lara  * @requires AVX2
19398bffc31SPablo de Lara  *
19498bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
19598bffc31SPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
19698bffc31SPablo de Lara  */
197592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
198592e639eSPablo de Lara _sha512_ctx_mgr_flush_avx2(ISAL_SHA512_HASH_CTX_MGR *mgr);
19998bffc31SPablo de Lara 
20098bffc31SPablo de Lara /**
20198bffc31SPablo de Lara  * @brief Initialize the SHA512 multi-buffer manager structure.
20298bffc31SPablo de Lara  * @requires AVX512
20398bffc31SPablo de Lara  *
20498bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
20598bffc31SPablo de Lara  * @returns void
20698bffc31SPablo de Lara  */
20798bffc31SPablo de Lara void
208592e639eSPablo de Lara _sha512_ctx_mgr_init_avx512(ISAL_SHA512_HASH_CTX_MGR *mgr);
20998bffc31SPablo de Lara 
21098bffc31SPablo de Lara /**
21198bffc31SPablo de Lara  * @brief  Submit a new SHA512 job to the multi-buffer manager.
21298bffc31SPablo de Lara  * @requires AVX512
21398bffc31SPablo de Lara  *
21498bffc31SPablo de Lara  * @param  mgr Structure holding context level state info
21598bffc31SPablo de Lara  * @param  ctx Structure holding ctx job info
21698bffc31SPablo de Lara  * @param  buffer Pointer to buffer to be processed
21798bffc31SPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
21898bffc31SPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
21998bffc31SPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
22098bffc31SPablo de Lara  */
221592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
222592e639eSPablo de Lara _sha512_ctx_mgr_submit_avx512(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx,
223592e639eSPablo de Lara                               const void *buffer, uint32_t len, ISAL_HASH_CTX_FLAG flags);
22498bffc31SPablo de Lara 
22598bffc31SPablo de Lara /**
22698bffc31SPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
22798bffc31SPablo de Lara  * @requires AVX512
22898bffc31SPablo de Lara  *
22998bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
23098bffc31SPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
23198bffc31SPablo de Lara  */
232592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
233592e639eSPablo de Lara _sha512_ctx_mgr_flush_avx512(ISAL_SHA512_HASH_CTX_MGR *mgr);
23498bffc31SPablo de Lara 
23598bffc31SPablo de Lara /**
23698bffc31SPablo de Lara  * @brief Initialize the SHA512 multi-buffer manager structure.
23798bffc31SPablo de Lara  * @requires SSE4
23898bffc31SPablo de Lara  *
23998bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
24098bffc31SPablo de Lara  * @returns void
24198bffc31SPablo de Lara  */
24298bffc31SPablo de Lara void
243592e639eSPablo de Lara _sha512_ctx_mgr_init_sb_sse4(ISAL_SHA512_HASH_CTX_MGR *mgr);
24498bffc31SPablo de Lara 
24598bffc31SPablo de Lara /**
24698bffc31SPablo de Lara  * @brief  Submit a new SHA512 job to the multi-buffer manager.
24798bffc31SPablo de Lara  * @requires SSE4
24898bffc31SPablo de Lara  *
24998bffc31SPablo de Lara  * @param  mgr Structure holding context level state info
25098bffc31SPablo de Lara  * @param  ctx Structure holding ctx job info
25198bffc31SPablo de Lara  * @param  buffer Pointer to buffer to be processed
25298bffc31SPablo de Lara  * @param  len Length of buffer (in bytes) to be processed
25398bffc31SPablo de Lara  * @param  flags Input flag specifying job type (first, update, last or entire)
25498bffc31SPablo de Lara  * @returns NULL if no jobs complete or pointer to jobs structure.
25598bffc31SPablo de Lara  */
256592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
257592e639eSPablo de Lara _sha512_ctx_mgr_submit_sb_sse4(ISAL_SHA512_HASH_CTX_MGR *mgr, ISAL_SHA512_HASH_CTX *ctx,
258592e639eSPablo de Lara                                const void *buffer, uint32_t len, ISAL_HASH_CTX_FLAG flags);
25998bffc31SPablo de Lara 
26098bffc31SPablo de Lara /**
26198bffc31SPablo de Lara  * @brief Finish all submitted SHA512 jobs and return when complete.
26298bffc31SPablo de Lara  * @requires SSE4
26398bffc31SPablo de Lara  *
26498bffc31SPablo de Lara  * @param mgr	Structure holding context level state info
26598bffc31SPablo de Lara  * @returns NULL if no jobs to complete or pointer to jobs structure.
26698bffc31SPablo de Lara  */
267592e639eSPablo de Lara ISAL_SHA512_HASH_CTX *
268592e639eSPablo de Lara _sha512_ctx_mgr_flush_sb_sse4(ISAL_SHA512_HASH_CTX_MGR *mgr);
26998bffc31SPablo de Lara 
27098bffc31SPablo de Lara /*******************************************************************
271d57a697cSPablo de Lara  * Scheduler (internal) level out-of-order function prototypes
272d57a697cSPablo de Lara  ******************************************************************/
273d57a697cSPablo de Lara 
274d57a697cSPablo de Lara void
275592e639eSPablo de Lara _sha512_mb_mgr_init_sse(ISAL_SHA512_MB_JOB_MGR *state);
276592e639eSPablo de Lara ISAL_SHA512_JOB *
277592e639eSPablo de Lara _sha512_mb_mgr_submit_sse(ISAL_SHA512_MB_JOB_MGR *state, ISAL_SHA512_JOB *job);
278592e639eSPablo de Lara ISAL_SHA512_JOB *
279592e639eSPablo de Lara _sha512_mb_mgr_flush_sse(ISAL_SHA512_MB_JOB_MGR *state);
280d57a697cSPablo de Lara 
281d57a697cSPablo de Lara #define _sha512_mb_mgr_init_avx _sha512_mb_mgr_init_sse
282592e639eSPablo de Lara ISAL_SHA512_JOB *
283592e639eSPablo de Lara _sha512_mb_mgr_submit_avx(ISAL_SHA512_MB_JOB_MGR *state, ISAL_SHA512_JOB *job);
284592e639eSPablo de Lara ISAL_SHA512_JOB *
285592e639eSPablo de Lara _sha512_mb_mgr_flush_avx(ISAL_SHA512_MB_JOB_MGR *state);
286d57a697cSPablo de Lara 
287d57a697cSPablo de Lara void
288592e639eSPablo de Lara _sha512_mb_mgr_init_avx2(ISAL_SHA512_MB_JOB_MGR *state);
289592e639eSPablo de Lara ISAL_SHA512_JOB *
290592e639eSPablo de Lara _sha512_mb_mgr_submit_avx2(ISAL_SHA512_MB_JOB_MGR *state, ISAL_SHA512_JOB *job);
291592e639eSPablo de Lara ISAL_SHA512_JOB *
292592e639eSPablo de Lara _sha512_mb_mgr_flush_avx2(ISAL_SHA512_MB_JOB_MGR *state);
293d57a697cSPablo de Lara 
294d57a697cSPablo de Lara void
295592e639eSPablo de Lara _sha512_mb_mgr_init_avx512(ISAL_SHA512_MB_JOB_MGR *state);
296592e639eSPablo de Lara ISAL_SHA512_JOB *
297592e639eSPablo de Lara _sha512_mb_mgr_submit_avx512(ISAL_SHA512_MB_JOB_MGR *state, ISAL_SHA512_JOB *job);
298592e639eSPablo de Lara ISAL_SHA512_JOB *
299592e639eSPablo de Lara _sha512_mb_mgr_flush_avx512(ISAL_SHA512_MB_JOB_MGR *state);
300d57a697cSPablo de Lara 
301d57a697cSPablo de Lara // Single buffer SHA512 APIs, optimized for SLM.
302d57a697cSPablo de Lara void
303d57a697cSPablo de Lara _sha512_sse4(const void *M, void *D, uint64_t L);
304d57a697cSPablo de Lara // Note that these APIs comply with multi-buffer APIs' high level usage
305d57a697cSPablo de Lara void
306592e639eSPablo de Lara _sha512_sb_mgr_init_sse4(ISAL_SHA512_MB_JOB_MGR *state);
307592e639eSPablo de Lara ISAL_SHA512_JOB *
308592e639eSPablo de Lara _sha512_sb_mgr_submit_sse4(ISAL_SHA512_MB_JOB_MGR *state, ISAL_SHA512_JOB *job);
309592e639eSPablo de Lara ISAL_SHA512_JOB *
310592e639eSPablo de Lara _sha512_sb_mgr_flush_sse4(ISAL_SHA512_MB_JOB_MGR *state);
311d57a697cSPablo de Lara #ifdef __cplusplus
312d57a697cSPablo de Lara }
313d57a697cSPablo de Lara #endif
314d57a697cSPablo de Lara 
315d57a697cSPablo de Lara #endif // _SHA512_MB_INTERNAL_H_
316