xref: /isa-l_crypto/include/md5_mb.h (revision 2d00dcb6f8eedd5c7eff746d841010e30d1dba3d)
16df3ef80SGreg Tucker /**********************************************************************
29475391eSMarcel Cornu   Copyright(c) 2011-2024 Intel Corporation All rights reserved.
36df3ef80SGreg Tucker 
46df3ef80SGreg Tucker   Redistribution and use in source and binary forms, with or without
56df3ef80SGreg Tucker   modification, are permitted provided that the following conditions
66df3ef80SGreg Tucker   are met:
76df3ef80SGreg Tucker     * Redistributions of source code must retain the above copyright
86df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer.
96df3ef80SGreg Tucker     * Redistributions in binary form must reproduce the above copyright
106df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer in
116df3ef80SGreg Tucker       the documentation and/or other materials provided with the
126df3ef80SGreg Tucker       distribution.
136df3ef80SGreg Tucker     * Neither the name of Intel Corporation nor the names of its
146df3ef80SGreg Tucker       contributors may be used to endorse or promote products derived
156df3ef80SGreg Tucker       from this software without specific prior written permission.
166df3ef80SGreg Tucker 
176df3ef80SGreg Tucker   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186df3ef80SGreg Tucker   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196df3ef80SGreg Tucker   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206df3ef80SGreg Tucker   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216df3ef80SGreg Tucker   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226df3ef80SGreg Tucker   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236df3ef80SGreg Tucker   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246df3ef80SGreg Tucker   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256df3ef80SGreg Tucker   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266df3ef80SGreg Tucker   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276df3ef80SGreg Tucker   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286df3ef80SGreg Tucker **********************************************************************/
296df3ef80SGreg Tucker 
306df3ef80SGreg Tucker #ifndef _MD5_MB_H_
316df3ef80SGreg Tucker #define _MD5_MB_H_
326df3ef80SGreg Tucker 
336df3ef80SGreg Tucker /**
346df3ef80SGreg Tucker  *  @file md5_mb.h
356df3ef80SGreg Tucker  *  @brief Multi-buffer CTX API MD5 function prototypes and structures
36070644e4SPablo de Lara  *  @warning: MD5 is considered unsafe, so it is recommended to use SHA256 instead.
376df3ef80SGreg Tucker  *
386df3ef80SGreg Tucker  * Interface for multi-buffer MD5 functions
396df3ef80SGreg Tucker  *
406df3ef80SGreg Tucker  * <b> Multi-buffer MD5  Entire or First-Update..Update-Last </b>
416df3ef80SGreg Tucker  *
426df3ef80SGreg Tucker  * The interface to this multi-buffer hashing code is carried out through the
43cca1040dSPablo de Lara  * context-level (CTX) init, submit and flush functions and the ISAL_MD5_HASH_CTX_MGR and
44cca1040dSPablo de Lara  * ISAL_MD5_HASH_CTX objects. Numerous ISAL_MD5_HASH_CTX objects may be instantiated by the
45cca1040dSPablo de Lara  * application for use with a single ISAL_MD5_HASH_CTX_MGR.
466df3ef80SGreg Tucker  *
476df3ef80SGreg Tucker  * The CTX interface functions carry out the initialization and padding of the jobs
486df3ef80SGreg Tucker  * entered by the user and add them to the multi-buffer manager. The lower level "scheduler"
496df3ef80SGreg Tucker  * layer then processes the jobs in an out-of-order manner. The scheduler layer functions
506df3ef80SGreg Tucker  * are internal and are not intended to be invoked directly. Jobs can be submitted
518cb7fe78SPablo de Lara  * to a CTX as a complete buffer to be hashed, using the ISAL_HASH_ENTIRE flag, or as partial
528cb7fe78SPablo de Lara  * jobs which can be started using the ISAL_HASH_FIRST flag, and later resumed or finished
538cb7fe78SPablo de Lara  * using the ISAL_HASH_UPDATE and ISAL_HASH_LAST flags respectively.
546df3ef80SGreg Tucker  *
556df3ef80SGreg Tucker  * <b>Note:</b> The submit function does not require data buffers to be block sized.
566df3ef80SGreg Tucker  *
576df3ef80SGreg Tucker  * The MD5 CTX interface functions are available for 4 architectures: SSE, AVX, AVX2 and
586df3ef80SGreg Tucker  * AVX512. In addition, a multibinary interface is provided, which selects the appropriate
596df3ef80SGreg Tucker  * architecture-specific function at runtime.
606df3ef80SGreg Tucker  *
61cca1040dSPablo de Lara  * <b>Usage:</b> The application creates a ISAL_MD5_HASH_CTX_MGR object and initializes it
626df3ef80SGreg Tucker  * with a call to md5_ctx_mgr_init*() function, where henceforth "*" stands for the
636df3ef80SGreg Tucker  * relevant suffix for each architecture; _sse, _avx, _avx2, _avx512 (or no suffix for the
64cca1040dSPablo de Lara  * multibinary version). The ISAL_MD5_HASH_CTX_MGR object will be used to schedule processor
65cca1040dSPablo de Lara  * resources, with up to 8 ISAL_MD5_HASH_CTX objects (or 16 in AVX2 case, 32 in AVX512 case)
666df3ef80SGreg Tucker  * being processed at a time.
676df3ef80SGreg Tucker  *
68cca1040dSPablo de Lara  * Each ISAL_MD5_HASH_CTX must be initialized before first use by the isal_hash_ctx_init macro
696df3ef80SGreg Tucker  * defined in multi_buffer.h. After initialization, the application may begin computing
70cca1040dSPablo de Lara  * a hash by giving the ISAL_MD5_HASH_CTX to a ISAL_MD5_HASH_CTX_MGR using the submit functions
71cca1040dSPablo de Lara  * md5_ctx_mgr_submit*() with the ISAL_HASH_FIRST flag set. When the ISAL_MD5_HASH_CTX is
726df3ef80SGreg Tucker  * returned to the application (via this or a later call to md5_ctx_mgr_submit*() or
736df3ef80SGreg Tucker  * md5_ctx_mgr_flush*()), the application can then re-submit it with another call to
748cb7fe78SPablo de Lara  * md5_ctx_mgr_submit*(), but without the ISAL_HASH_FIRST flag set.
756df3ef80SGreg Tucker  *
766df3ef80SGreg Tucker  * Ideally, on the last buffer for that hash, md5_ctx_mgr_submit_sse is called with
778cb7fe78SPablo de Lara  * ISAL_HASH_LAST, although it is also possible to submit the hash with ISAL_HASH_LAST and a zero
78cca1040dSPablo de Lara  * length if necessary. When a ISAL_MD5_HASH_CTX is returned after having been submitted with
79cca1040dSPablo de Lara  * ISAL_HASH_LAST, it will contain a valid hash. The ISAL_MD5_HASH_CTX can be reused immediately
808cb7fe78SPablo de Lara  * by submitting with ISAL_HASH_FIRST.
816df3ef80SGreg Tucker  *
826df3ef80SGreg Tucker  * For example, you would submit hashes with the following flags for the following numbers
836df3ef80SGreg Tucker  * of buffers:
846df3ef80SGreg Tucker  * <ul>
858cb7fe78SPablo de Lara  *  <li> one buffer: ISAL_HASH_FIRST | ISAL_HASH_LAST  (or, equivalently, ISAL_HASH_ENTIRE)
868cb7fe78SPablo de Lara  *  <li> two buffers: ISAL_HASH_FIRST, ISAL_HASH_LAST
878cb7fe78SPablo de Lara  *  <li> three buffers: ISAL_HASH_FIRST, ISAL_HASH_UPDATE, ISAL_HASH_LAST
886df3ef80SGreg Tucker  * etc.
896df3ef80SGreg Tucker  * </ul>
906df3ef80SGreg Tucker  *
916df3ef80SGreg Tucker  * The order in which MD5_CTX objects are returned is in general different from the order
926df3ef80SGreg Tucker  * in which they are submitted.
936df3ef80SGreg Tucker  *
946df3ef80SGreg Tucker  * A few possible error conditions exist:
956df3ef80SGreg Tucker  * <ul>
966df3ef80SGreg Tucker  *  <li> Submitting flags other than the allowed entire/first/update/last values
97cca1040dSPablo de Lara  *  <li> Submitting a context that is currently being managed by a ISAL_MD5_HASH_CTX_MGR.
988cb7fe78SPablo de Lara  *  <li> Submitting a context after ISAL_HASH_LAST is used but before ISAL_HASH_FIRST is set.
996df3ef80SGreg Tucker  * </ul>
1006df3ef80SGreg Tucker  *
101cca1040dSPablo de Lara  *  These error conditions are reported by returning the ISAL_MD5_HASH_CTX immediately after
1026df3ef80SGreg Tucker  *  a submit with its error member set to a non-zero error code (defined in
103cca1040dSPablo de Lara  *  multi_buffer.h). No changes are made to the ISAL_MD5_HASH_CTX_MGR in the case of an
1046df3ef80SGreg Tucker  *  error; no processing is done for other hashes.
1056df3ef80SGreg Tucker  *
1066df3ef80SGreg Tucker  */
1076df3ef80SGreg Tucker 
1086df3ef80SGreg Tucker #include <stdint.h>
109fabd0c36SMarcel Cornu #include <string.h>
1106df3ef80SGreg Tucker #include "multi_buffer.h"
1116df3ef80SGreg Tucker #include "types.h"
1126df3ef80SGreg Tucker 
1136df3ef80SGreg Tucker #ifdef __cplusplus
1146df3ef80SGreg Tucker extern "C" {
1156df3ef80SGreg Tucker #endif
1166df3ef80SGreg Tucker 
117b1952c63SMarcel Cornu /*
118b1952c63SMarcel Cornu  * Define enums from API v2.24, so applications that were using this version
119b1952c63SMarcel Cornu  * will still be compiled successfully.
120b1952c63SMarcel Cornu  * This list does not need to be extended for new definitions.
121b1952c63SMarcel Cornu  */
122b1952c63SMarcel Cornu #ifndef NO_COMPAT_ISAL_CRYPTO_API_2_24
123b1952c63SMarcel Cornu /***** Previous hash constants and typedefs *****/
124b1952c63SMarcel Cornu #define MD5_DIGEST_NWORDS       ISAL_MD5_DIGEST_NWORDS
125b1952c63SMarcel Cornu #define MD5_MAX_LANES           ISAL_MD5_MAX_LANES
126b1952c63SMarcel Cornu #define MD5_MIN_LANES           ISAL_MD5_MIN_LANES
127b1952c63SMarcel Cornu #define MD5_BLOCK_SIZE          ISAL_MD5_BLOCK_SIZE
128b1952c63SMarcel Cornu #define MD5_PADLENGTHFIELD_SIZE ISAL_MD5_PADLENGTHFIELD_SIZE
129b1952c63SMarcel Cornu 
130b1952c63SMarcel Cornu #define MD5_HASH_CTX     ISAL_MD5_HASH_CTX
131b1952c63SMarcel Cornu #define md5_digest_array isal_md5_digest_array
132b1952c63SMarcel Cornu 
133b1952c63SMarcel Cornu #define MD5_HASH_CTX_MGR ISAL_MD5_HASH_CTX_MGR
134b1952c63SMarcel Cornu #define MD5_JOB          ISAL_MD5_JOB
135b1952c63SMarcel Cornu #define MD5_WORD_T       ISAL_MD5_WORD_T
136b1952c63SMarcel Cornu #define MD5_MB_ARGS_X32  ISAL_MD5_MB_ARGS_X32
137b1952c63SMarcel Cornu #define MD5_LANE_DATA    ISAL_MD5_LANE_DATA
138b1952c63SMarcel Cornu #define MD5_MB_JOB_MGR   ISAL_MD5_MB_JOB_MGR
139b1952c63SMarcel Cornu #endif /* !NO_COMPAT_ISAL_CRYPTO_API_2_24 */
140b1952c63SMarcel Cornu 
1416df3ef80SGreg Tucker // Hash Constants and Typedefs
142cca1040dSPablo de Lara #define ISAL_MD5_DIGEST_NWORDS       4
143cca1040dSPablo de Lara #define ISAL_MD5_MAX_LANES           32
144cca1040dSPablo de Lara #define ISAL_MD5_MIN_LANES           8
145cca1040dSPablo de Lara #define ISAL_MD5_BLOCK_SIZE          64
146cca1040dSPablo de Lara #define ISAL_MD5_PADLENGTHFIELD_SIZE 8
1476df3ef80SGreg Tucker 
148b1952c63SMarcel Cornu typedef uint32_t isal_md5_digest_array[ISAL_MD5_DIGEST_NWORDS][ISAL_MD5_MAX_LANES];
149cca1040dSPablo de Lara typedef uint32_t ISAL_MD5_WORD_T;
1506df3ef80SGreg Tucker 
1516df3ef80SGreg Tucker /** @brief Scheduler layer - Holds info describing a single MD5 job for the multi-buffer manager */
1526df3ef80SGreg Tucker 
1536df3ef80SGreg Tucker typedef struct {
1546df3ef80SGreg Tucker         uint8_t *buffer; //!< pointer to data buffer for this job
1556df3ef80SGreg Tucker         uint32_t len;    //!< length of buffer for this job in blocks.
156cca1040dSPablo de Lara         DECLARE_ALIGNED(uint32_t result_digest[ISAL_MD5_DIGEST_NWORDS], 64);
157*2d00dcb6SPablo de Lara         //!< Digest output (in array of little-endian double words, different than SHA's).
1588cb7fe78SPablo de Lara         ISAL_JOB_STS status; //!< output job status
1596df3ef80SGreg Tucker         void *user_data;     //!< pointer for user's job-related data
160cca1040dSPablo de Lara } ISAL_MD5_JOB;
1616df3ef80SGreg Tucker 
1626df3ef80SGreg Tucker /** @brief Scheduler layer -  Holds arguments for submitted MD5 job */
1636df3ef80SGreg Tucker 
1646df3ef80SGreg Tucker typedef struct {
165b1952c63SMarcel Cornu         isal_md5_digest_array digest;
166cca1040dSPablo de Lara         uint8_t *data_ptr[ISAL_MD5_MAX_LANES];
167b1952c63SMarcel Cornu } ISAL_MD5_MB_ARGS_X32;
1686df3ef80SGreg Tucker 
1696df3ef80SGreg Tucker /** @brief Scheduler layer - Lane data */
1706df3ef80SGreg Tucker 
1716df3ef80SGreg Tucker typedef struct {
172cca1040dSPablo de Lara         ISAL_MD5_JOB *job_in_lane;
173cca1040dSPablo de Lara } ISAL_MD5_LANE_DATA;
1746df3ef80SGreg Tucker 
1756df3ef80SGreg Tucker /** @brief Scheduler layer - Holds state for multi-buffer MD5 jobs */
1766df3ef80SGreg Tucker 
1776df3ef80SGreg Tucker typedef struct {
178b1952c63SMarcel Cornu         ISAL_MD5_MB_ARGS_X32 args;
179cca1040dSPablo de Lara         uint32_t lens[ISAL_MD5_MAX_LANES];
1806df3ef80SGreg Tucker         uint64_t unused_lanes[4]; //!< each byte or nibble is index (0...31 or 15) of unused lanes.
181cca1040dSPablo de Lara         ISAL_MD5_LANE_DATA ldata[ISAL_MD5_MAX_LANES];
1826df3ef80SGreg Tucker         uint32_t num_lanes_inuse;
183cca1040dSPablo de Lara } ISAL_MD5_MB_JOB_MGR;
1846df3ef80SGreg Tucker 
1856df3ef80SGreg Tucker /** @brief Context layer - Holds state for multi-buffer MD5 jobs */
1866df3ef80SGreg Tucker 
1876df3ef80SGreg Tucker typedef struct {
188cca1040dSPablo de Lara         ISAL_MD5_MB_JOB_MGR mgr;
189cca1040dSPablo de Lara } ISAL_MD5_HASH_CTX_MGR;
1906df3ef80SGreg Tucker 
1911de5344dSMarcel Cornu /** @brief Context layer - Holds info describing a single MD5 job for the multi-buffer CTX manager
1921de5344dSMarcel Cornu  */
1936df3ef80SGreg Tucker 
1946df3ef80SGreg Tucker typedef struct {
195cca1040dSPablo de Lara         ISAL_MD5_JOB job;                // Must be at struct offset 0.
1968cb7fe78SPablo de Lara         ISAL_HASH_CTX_STS status;        //!< Context status flag
1978cb7fe78SPablo de Lara         ISAL_HASH_CTX_ERROR error;       //!< Context error flag
1985892c34bSChunyang Hui         uint64_t total_length;           //!< Running counter of length processed for this CTX's job
1996df3ef80SGreg Tucker         const void *incoming_buffer;     //!< pointer to data input buffer for this CTX's job
2006df3ef80SGreg Tucker         uint32_t incoming_buffer_length; //!< length of buffer for this job in bytes.
201cca1040dSPablo de Lara         uint8_t partial_block_buffer[ISAL_MD5_BLOCK_SIZE * 2]; //!< CTX partial blocks
2026df3ef80SGreg Tucker         uint32_t partial_block_buffer_length;
2036df3ef80SGreg Tucker         void *user_data; //!< pointer for user to keep any job-related data
204cca1040dSPablo de Lara } ISAL_MD5_HASH_CTX;
2056df3ef80SGreg Tucker 
2066df3ef80SGreg Tucker /******************** multibinary function prototypes **********************/
2076df3ef80SGreg Tucker 
2086df3ef80SGreg Tucker /**
2096df3ef80SGreg Tucker  * @brief Initialize the MD5 multi-buffer manager structure.
2106df3ef80SGreg Tucker  * @requires SSE4.1 or AVX or AVX2 or AVX512
2110b8ee81fSPablo de Lara  * @deprecated Please use isal_md5_ctx_mgr_init() instead.
2126df3ef80SGreg Tucker  *
2136df3ef80SGreg Tucker  * @param mgr	Structure holding context level state info
2146df3ef80SGreg Tucker  * @returns void
2156df3ef80SGreg Tucker  */
2160b8ee81fSPablo de Lara ISAL_DEPRECATED("Please use isal_md5_ctx_mgr_init() instead")
2171de5344dSMarcel Cornu void
218cca1040dSPablo de Lara md5_ctx_mgr_init(ISAL_MD5_HASH_CTX_MGR *mgr);
2196df3ef80SGreg Tucker 
2206df3ef80SGreg Tucker /**
2216df3ef80SGreg Tucker  * @brief  Submit a new MD5 job to the multi-buffer manager.
2226df3ef80SGreg Tucker  * @requires SSE4.1 or AVX or AVX2 or AVX512
2230b8ee81fSPablo de Lara  * @deprecated Please use isal_md5_ctx_mgr_submit() instead.
2246df3ef80SGreg Tucker  *
2256df3ef80SGreg Tucker  * @param  mgr Structure holding context level state info
2266df3ef80SGreg Tucker  * @param  ctx Structure holding ctx job info
2276df3ef80SGreg Tucker  * @param  buffer Pointer to buffer to be processed
2286df3ef80SGreg Tucker  * @param  len Length of buffer (in bytes) to be processed
2296df3ef80SGreg Tucker  * @param  flags Input flag specifying job type (first, update, last or entire)
2306df3ef80SGreg Tucker  * @returns NULL if no jobs complete or pointer to jobs structure.
2316df3ef80SGreg Tucker  */
2320b8ee81fSPablo de Lara ISAL_DEPRECATED("Please use isal_md5_ctx_mgr_submit() instead")
233cca1040dSPablo de Lara ISAL_MD5_HASH_CTX *
234cca1040dSPablo de Lara md5_ctx_mgr_submit(ISAL_MD5_HASH_CTX_MGR *mgr, ISAL_MD5_HASH_CTX *ctx, const void *buffer,
235cca1040dSPablo de Lara                    uint32_t len, ISAL_HASH_CTX_FLAG flags);
2366df3ef80SGreg Tucker 
2376df3ef80SGreg Tucker /**
2386df3ef80SGreg Tucker  * @brief Finish all submitted MD5 jobs and return when complete.
2396df3ef80SGreg Tucker  * @requires SSE4.1 or AVX or AVX2 or AVX512
2400b8ee81fSPablo de Lara  * @deprecated Please use isal_md5_ctx_mgr_submit() instead.
2416df3ef80SGreg Tucker  *
2426df3ef80SGreg Tucker  * @param mgr	Structure holding context level state info
2436df3ef80SGreg Tucker  * @returns NULL if no jobs to complete or pointer to jobs structure.
2446df3ef80SGreg Tucker  */
2450b8ee81fSPablo de Lara ISAL_DEPRECATED("Please use isal_md5_ctx_mgr_submit() instead")
246cca1040dSPablo de Lara ISAL_MD5_HASH_CTX *
247cca1040dSPablo de Lara md5_ctx_mgr_flush(ISAL_MD5_HASH_CTX_MGR *mgr);
2486df3ef80SGreg Tucker 
2499475391eSMarcel Cornu /**
2509475391eSMarcel Cornu  * @brief Initialize the MD5 multi-buffer manager structure.
2519475391eSMarcel Cornu  * @requires SSE4.1 for x86 or ASIMD for ARM
2529475391eSMarcel Cornu  *
2539475391eSMarcel Cornu  * @param[in] mgr Structure holding context level state info
2549475391eSMarcel Cornu  * @return Operation status
2559475391eSMarcel Cornu  * @retval 0 on success
2569475391eSMarcel Cornu  * @retval Non-zero \a ISAL_CRYPTO_ERR on failure
2579475391eSMarcel Cornu  */
2581de5344dSMarcel Cornu int
259cca1040dSPablo de Lara isal_md5_ctx_mgr_init(ISAL_MD5_HASH_CTX_MGR *mgr);
2609475391eSMarcel Cornu 
2619475391eSMarcel Cornu /**
2629475391eSMarcel Cornu  * @brief Submit a new MD5 job to the multi-buffer manager.
2639475391eSMarcel Cornu  * @requires SSE4.1 for x86 or ASIMD for ARM
2649475391eSMarcel Cornu  *
2659475391eSMarcel Cornu  * @param[in] mgr Structure holding context level state info
2669475391eSMarcel Cornu  * @param[in] ctx_in Pointer to structure holding input job ctx info
2679475391eSMarcel Cornu  * @param[out] ctx_out Pointer address to output job ctx info.
2689475391eSMarcel Cornu  *                     Modified to point to completed job structure or
2699475391eSMarcel Cornu  *                     NULL if no jobs completed.
2709475391eSMarcel Cornu  * @param[in] buffer Pointer to buffer to be processed
2719475391eSMarcel Cornu  * @param[in] len Length of buffer (in bytes) to be processed
2729475391eSMarcel Cornu  * @param[in] flags Input flag specifying job type (first, update, last or entire)
2739475391eSMarcel Cornu  * @return Operation status
2749475391eSMarcel Cornu  * @retval 0 on success
2759475391eSMarcel Cornu  * @retval Non-zero \a ISAL_CRYPTO_ERR on failure
2769475391eSMarcel Cornu  */
2771de5344dSMarcel Cornu int
278cca1040dSPablo de Lara isal_md5_ctx_mgr_submit(ISAL_MD5_HASH_CTX_MGR *mgr, ISAL_MD5_HASH_CTX *ctx_in,
279cca1040dSPablo de Lara                         ISAL_MD5_HASH_CTX **ctx_out, const void *buffer, const uint32_t len,
280cca1040dSPablo de Lara                         const ISAL_HASH_CTX_FLAG flags);
2819475391eSMarcel Cornu 
2829475391eSMarcel Cornu /**
2839475391eSMarcel Cornu  * @brief Finish all submitted MD5 jobs and return when complete.
2849475391eSMarcel Cornu  * @requires SSE4.1 for x86 or ASIMD for ARM
2859475391eSMarcel Cornu  *
2869475391eSMarcel Cornu  * @param[in] mgr Structure holding context level state info
2879475391eSMarcel Cornu  * @param[out] ctx_out Pointer address to output job ctx info.
2889475391eSMarcel Cornu  *                     Modified to point to completed job structure or NULL
2899475391eSMarcel Cornu  *                     if no jobs complete.
2909475391eSMarcel Cornu  * @return Operation status
2919475391eSMarcel Cornu  * @retval 0 on success
2929475391eSMarcel Cornu  * @retval Non-zero \a ISAL_CRYPTO_ERR on failure
2939475391eSMarcel Cornu  */
2941de5344dSMarcel Cornu int
295cca1040dSPablo de Lara isal_md5_ctx_mgr_flush(ISAL_MD5_HASH_CTX_MGR *mgr, ISAL_MD5_HASH_CTX **ctx_out);
2966df3ef80SGreg Tucker #ifdef __cplusplus
2976df3ef80SGreg Tucker }
2986df3ef80SGreg Tucker #endif
2996df3ef80SGreg Tucker 
3006df3ef80SGreg Tucker #endif // _MD5_MB_H_
301