xref: /isa-l_crypto/sm3_mb/sm3_mb_rand_update_test.c (revision 6801b27bd9295090e36d2864110576f428efdf61)
1f36dbb84SChunyang Hui /**********************************************************************
2f36dbb84SChunyang Hui   Copyright(c) 2011-2019 Intel Corporation All rights reserved.
3f36dbb84SChunyang Hui 
4f36dbb84SChunyang Hui   Redistribution and use in source and binary forms, with or without
5f36dbb84SChunyang Hui   modification, are permitted provided that the following conditions
6f36dbb84SChunyang Hui   are met:
7f36dbb84SChunyang Hui     * Redistributions of source code must retain the above copyright
8f36dbb84SChunyang Hui       notice, this list of conditions and the following disclaimer.
9f36dbb84SChunyang Hui     * Redistributions in binary form must reproduce the above copyright
10f36dbb84SChunyang Hui       notice, this list of conditions and the following disclaimer in
11f36dbb84SChunyang Hui       the documentation and/or other materials provided with the
12f36dbb84SChunyang Hui       distribution.
13f36dbb84SChunyang Hui     * Neither the name of Intel Corporation nor the names of its
14f36dbb84SChunyang Hui       contributors may be used to endorse or promote products derived
15f36dbb84SChunyang Hui       from this software without specific prior written permission.
16f36dbb84SChunyang Hui 
17f36dbb84SChunyang Hui   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18f36dbb84SChunyang Hui   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19f36dbb84SChunyang Hui   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20f36dbb84SChunyang Hui   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21f36dbb84SChunyang Hui   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22f36dbb84SChunyang Hui   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23f36dbb84SChunyang Hui   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24f36dbb84SChunyang Hui   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25f36dbb84SChunyang Hui   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26f36dbb84SChunyang Hui   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27f36dbb84SChunyang Hui   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28f36dbb84SChunyang Hui **********************************************************************/
29a8b637dbSGreg Tucker #define ISAL_UNIT_TEST
30f36dbb84SChunyang Hui #include <stdio.h>
31f36dbb84SChunyang Hui #include <stdlib.h>
32*6801b27bSTomasz Kantecki 
33*6801b27bSTomasz Kantecki #ifndef FIPS_MODE
34f36dbb84SChunyang Hui #include "sm3_mb.h"
3592aa5aa4SGreg Tucker #include "endian_helper.h"
36f36dbb84SChunyang Hui 
37f36dbb84SChunyang Hui #define TEST_LEN  (1024 * 1024)
38f36dbb84SChunyang Hui #define TEST_BUFS 100
39f36dbb84SChunyang Hui #ifndef RANDOMS
40f36dbb84SChunyang Hui #define RANDOMS 10
41f36dbb84SChunyang Hui #endif
42f36dbb84SChunyang Hui #ifndef TEST_SEED
43f36dbb84SChunyang Hui #define TEST_SEED 0x1234
44f36dbb84SChunyang Hui #endif
45f36dbb84SChunyang Hui 
46*6801b27bSTomasz Kantecki #define UPDATE_SIZE            13 * ISAL_SM3_BLOCK_SIZE
47*6801b27bSTomasz Kantecki #define MAX_RAND_UPDATE_BLOCKS (TEST_LEN / (16 * ISAL_SM3_BLOCK_SIZE))
48f36dbb84SChunyang Hui 
49f36dbb84SChunyang Hui #ifdef DEBUG
50f36dbb84SChunyang Hui #define debug_char(x) putchar(x)
51f36dbb84SChunyang Hui #else
52b923697dSMarcel Cornu #define debug_char(x)                                                                              \
53b923697dSMarcel Cornu         do {                                                                                       \
54b923697dSMarcel Cornu         } while (0)
55f36dbb84SChunyang Hui #endif
56f36dbb84SChunyang Hui 
57f36dbb84SChunyang Hui /* Reference digest global to reduce stack usage */
58*6801b27bSTomasz Kantecki static uint8_t digest_ref[TEST_BUFS][4 * ISAL_SM3_DIGEST_NWORDS];
59b923697dSMarcel Cornu extern void
60b923697dSMarcel Cornu sm3_ossl(const unsigned char *buf, size_t length, unsigned char *digest);
61f36dbb84SChunyang Hui 
62f36dbb84SChunyang Hui // Generates pseudo-random data
63b923697dSMarcel Cornu static void
rand_buffer(unsigned char * buf,const long buffer_size)64b923697dSMarcel Cornu rand_buffer(unsigned char *buf, const long buffer_size)
65f36dbb84SChunyang Hui {
66f36dbb84SChunyang Hui         long i;
67f36dbb84SChunyang Hui         for (i = 0; i < buffer_size; i++)
68f36dbb84SChunyang Hui                 buf[i] = rand();
69f36dbb84SChunyang Hui }
70*6801b27bSTomasz Kantecki #endif /* !FIPS_MODE */
71f36dbb84SChunyang Hui 
72b923697dSMarcel Cornu int
main(void)73b923697dSMarcel Cornu main(void)
74f36dbb84SChunyang Hui {
75*6801b27bSTomasz Kantecki #ifndef FIPS_MODE
76*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX_MGR *mgr = NULL;
77*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX ctxpool[TEST_BUFS], *ctx = NULL;
78f36dbb84SChunyang Hui         uint32_t i, j, fail = 0;
79f36dbb84SChunyang Hui         int len_done, len_rem, len_rand;
80f36dbb84SChunyang Hui         unsigned char *bufs[TEST_BUFS];
81f36dbb84SChunyang Hui         unsigned char *buf_ptr[TEST_BUFS];
82f36dbb84SChunyang Hui         uint32_t lens[TEST_BUFS];
83f36dbb84SChunyang Hui         unsigned int joblen, jobs, t;
84c91caf97STom Cosgrove         int ret;
85f36dbb84SChunyang Hui 
86b923697dSMarcel Cornu         printf("multibinary_sm3_update test, %d sets of %dx%d max: ", RANDOMS, TEST_BUFS, TEST_LEN);
87f36dbb84SChunyang Hui 
88f36dbb84SChunyang Hui         srand(TEST_SEED);
89f36dbb84SChunyang Hui 
90*6801b27bSTomasz Kantecki         ret = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SM3_HASH_CTX_MGR));
91c91caf97STom Cosgrove         if ((ret != 0) || (mgr == NULL)) {
92c91caf97STom Cosgrove                 printf("posix_memalign failed test aborted\n");
93c91caf97STom Cosgrove                 return 1;
94c91caf97STom Cosgrove         }
95c91caf97STom Cosgrove 
96*6801b27bSTomasz Kantecki         isal_sm3_ctx_mgr_init(mgr);
97f36dbb84SChunyang Hui 
98f36dbb84SChunyang Hui         for (i = 0; i < TEST_BUFS; i++) {
9986058544SPablo de Lara                 // Allocate and fill buffer
100f36dbb84SChunyang Hui                 bufs[i] = (unsigned char *) malloc(TEST_LEN);
101f36dbb84SChunyang Hui                 buf_ptr[i] = bufs[i];
102f36dbb84SChunyang Hui                 if (bufs[i] == NULL) {
103f36dbb84SChunyang Hui                         printf("malloc failed test aborted\n");
104f36dbb84SChunyang Hui                         return 1;
105f36dbb84SChunyang Hui                 }
106f36dbb84SChunyang Hui                 rand_buffer(bufs[i], TEST_LEN);
107f36dbb84SChunyang Hui 
108f36dbb84SChunyang Hui                 // Init ctx contents
1098cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
110f36dbb84SChunyang Hui                 ctxpool[i].user_data = (void *) ((uint64_t) i);
111f36dbb84SChunyang Hui 
112f36dbb84SChunyang Hui                 // Run reference test
113f36dbb84SChunyang Hui                 sm3_ossl(bufs[i], TEST_LEN, digest_ref[i]);
114f36dbb84SChunyang Hui         }
115f36dbb84SChunyang Hui 
116f36dbb84SChunyang Hui         // Run sb_sm3 tests
117f36dbb84SChunyang Hui         for (i = 0; i < TEST_BUFS;) {
11887dde3adSTomasz Kantecki                 len_done = (int) ((uintptr_t) buf_ptr[i] - (uintptr_t) bufs[i]);
119f36dbb84SChunyang Hui                 len_rem = TEST_LEN - len_done;
120f36dbb84SChunyang Hui 
121*6801b27bSTomasz Kantecki                 int errc = 0;
122*6801b27bSTomasz Kantecki 
123f36dbb84SChunyang Hui                 if (len_done == 0)
124*6801b27bSTomasz Kantecki                         errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
125*6801b27bSTomasz Kantecki                                                        UPDATE_SIZE, ISAL_HASH_FIRST);
126f36dbb84SChunyang Hui                 else if (len_rem <= UPDATE_SIZE)
127*6801b27bSTomasz Kantecki                         errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i], len_rem,
1288cb7fe78SPablo de Lara                                                        ISAL_HASH_LAST);
129f36dbb84SChunyang Hui                 else
130*6801b27bSTomasz Kantecki                         errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
131*6801b27bSTomasz Kantecki                                                        UPDATE_SIZE, ISAL_HASH_UPDATE);
132f36dbb84SChunyang Hui 
133f36dbb84SChunyang Hui                 // Add jobs while available or finished
134*6801b27bSTomasz Kantecki                 if ((errc == 0) && ((ctx == NULL) || isal_hash_ctx_complete(ctx))) {
135f36dbb84SChunyang Hui                         i++;
136f36dbb84SChunyang Hui                         continue;
137f36dbb84SChunyang Hui                 }
138f36dbb84SChunyang Hui                 // Resubmit unfinished job
13987dde3adSTomasz Kantecki                 i = (unsigned long) (uintptr_t) (ctx->user_data);
140f36dbb84SChunyang Hui                 buf_ptr[i] += UPDATE_SIZE;
141f36dbb84SChunyang Hui         }
142f36dbb84SChunyang Hui 
143f36dbb84SChunyang Hui         // Start flushing finished jobs, end on last flushed
144*6801b27bSTomasz Kantecki         isal_sm3_ctx_mgr_flush(mgr, &ctx);
145*6801b27bSTomasz Kantecki 
146f36dbb84SChunyang Hui         while (ctx) {
1478cb7fe78SPablo de Lara                 if (isal_hash_ctx_complete(ctx)) {
148f36dbb84SChunyang Hui                         debug_char('-');
149*6801b27bSTomasz Kantecki                         isal_sm3_ctx_mgr_flush(mgr, &ctx);
150f36dbb84SChunyang Hui                         continue;
151f36dbb84SChunyang Hui                 }
152f36dbb84SChunyang Hui                 // Resubmit unfinished job
15387dde3adSTomasz Kantecki                 i = (unsigned long) (uintptr_t) (ctx->user_data);
154f36dbb84SChunyang Hui                 buf_ptr[i] += UPDATE_SIZE;
155f36dbb84SChunyang Hui 
15687dde3adSTomasz Kantecki                 len_done = (int) ((uintptr_t) buf_ptr[i] - (uintptr_t) bufs[i]);
157f36dbb84SChunyang Hui                 len_rem = TEST_LEN - len_done;
158f36dbb84SChunyang Hui 
159*6801b27bSTomasz Kantecki                 int errc = 0;
160*6801b27bSTomasz Kantecki 
161f36dbb84SChunyang Hui                 if (len_rem <= UPDATE_SIZE)
162*6801b27bSTomasz Kantecki                         errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i], len_rem,
1638cb7fe78SPablo de Lara                                                        ISAL_HASH_LAST);
164f36dbb84SChunyang Hui                 else
165*6801b27bSTomasz Kantecki                         errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
166*6801b27bSTomasz Kantecki                                                        UPDATE_SIZE, ISAL_HASH_UPDATE);
167f36dbb84SChunyang Hui 
168*6801b27bSTomasz Kantecki                 if (errc == 0 && ctx == NULL)
169*6801b27bSTomasz Kantecki                         isal_sm3_ctx_mgr_flush(mgr, &ctx);
170f36dbb84SChunyang Hui         }
171f36dbb84SChunyang Hui 
172f36dbb84SChunyang Hui         // Check digests
173f36dbb84SChunyang Hui         for (i = 0; i < TEST_BUFS; i++) {
174*6801b27bSTomasz Kantecki                 for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
175e3f7d4fbSUlrich Weigand                         if (ctxpool[i].job.result_digest[j] !=
176e3f7d4fbSUlrich Weigand                             to_le32(((uint32_t *) digest_ref[i])[j])) {
177f36dbb84SChunyang Hui                                 fail++;
178b923697dSMarcel Cornu                                 printf("Test%d fixed size, digest%d fail %8X <=> %8X", i, j,
179b923697dSMarcel Cornu                                        ctxpool[i].job.result_digest[j],
180e3f7d4fbSUlrich Weigand                                        to_le32(((uint32_t *) digest_ref[i])[j]));
181f36dbb84SChunyang Hui                         }
182f36dbb84SChunyang Hui                 }
183f36dbb84SChunyang Hui         }
184f36dbb84SChunyang Hui         putchar('.');
185f36dbb84SChunyang Hui 
186f36dbb84SChunyang Hui         // Run tests with random size and number of jobs
187f36dbb84SChunyang Hui         for (t = 0; t < RANDOMS; t++) {
188f36dbb84SChunyang Hui                 jobs = rand() % (TEST_BUFS);
189f36dbb84SChunyang Hui 
190f36dbb84SChunyang Hui                 for (i = 0; i < jobs; i++) {
191f36dbb84SChunyang Hui                         joblen = rand() % (TEST_LEN);
192f36dbb84SChunyang Hui                         rand_buffer(bufs[i], joblen);
193f36dbb84SChunyang Hui                         lens[i] = joblen;
194f36dbb84SChunyang Hui                         buf_ptr[i] = bufs[i];
195f36dbb84SChunyang Hui                         sm3_ossl(bufs[i], lens[i], digest_ref[i]);
196f36dbb84SChunyang Hui                 }
197f36dbb84SChunyang Hui 
198*6801b27bSTomasz Kantecki                 isal_sm3_ctx_mgr_init(mgr);
199f36dbb84SChunyang Hui 
200f36dbb84SChunyang Hui                 // Run sm3_sb jobs
201f36dbb84SChunyang Hui                 i = 0;
202f36dbb84SChunyang Hui                 while (i < jobs) {
203f36dbb84SChunyang Hui                         // Submit a new job
204*6801b27bSTomasz Kantecki                         len_rand = ISAL_SM3_BLOCK_SIZE +
205*6801b27bSTomasz Kantecki                                    ISAL_SM3_BLOCK_SIZE * (rand() % MAX_RAND_UPDATE_BLOCKS);
206*6801b27bSTomasz Kantecki 
207*6801b27bSTomasz Kantecki                         int errc = 0;
208f36dbb84SChunyang Hui 
209f36dbb84SChunyang Hui                         if (lens[i] > len_rand)
210*6801b27bSTomasz Kantecki                                 errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
211*6801b27bSTomasz Kantecki                                                                len_rand, ISAL_HASH_FIRST);
212f36dbb84SChunyang Hui                         else
213*6801b27bSTomasz Kantecki                                 errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
214*6801b27bSTomasz Kantecki                                                                lens[i], ISAL_HASH_ENTIRE);
215f36dbb84SChunyang Hui 
216f36dbb84SChunyang Hui                         // Returned ctx could be:
217b923697dSMarcel Cornu                         //  - null context (we are just getting started and lanes aren't full yet),
218b923697dSMarcel Cornu                         //  or
219b923697dSMarcel Cornu                         //  - finished already (an ENTIRE we submitted or a previous LAST is
220b923697dSMarcel Cornu                         //  returned), or
221f36dbb84SChunyang Hui                         //  - an unfinished ctx, we will resubmit
222f36dbb84SChunyang Hui 
223*6801b27bSTomasz Kantecki                         if ((errc == 0) && ((ctx == NULL) || isal_hash_ctx_complete(ctx))) {
224f36dbb84SChunyang Hui                                 i++;
225f36dbb84SChunyang Hui                                 continue;
226f36dbb84SChunyang Hui                         } else {
227b923697dSMarcel Cornu                                 // unfinished ctx returned, choose another random update length and
228b923697dSMarcel Cornu                                 // submit either UPDATE or LAST depending on the amount of buffer
229b923697dSMarcel Cornu                                 // remaining
2308cb7fe78SPablo de Lara                                 while ((ctx != NULL) && !(isal_hash_ctx_complete(ctx))) {
231*6801b27bSTomasz Kantecki                                         // Get index of the returned ctx
232*6801b27bSTomasz Kantecki                                         j = (unsigned long) (uintptr_t) (ctx->user_data);
233f36dbb84SChunyang Hui                                         buf_ptr[j] = bufs[j] + ctx->total_length;
234*6801b27bSTomasz Kantecki                                         len_rand = (rand() % ISAL_SM3_BLOCK_SIZE) *
235b923697dSMarcel Cornu                                                    (rand() % MAX_RAND_UPDATE_BLOCKS);
236f36dbb84SChunyang Hui                                         len_rem = lens[j] - ctx->total_length;
237f36dbb84SChunyang Hui 
238*6801b27bSTomasz Kantecki                                         if (len_rem <= len_rand)
239*6801b27bSTomasz Kantecki                                                 // submit the rest of the job as LAST
240*6801b27bSTomasz Kantecki                                                 errc = isal_sm3_ctx_mgr_submit(
241*6801b27bSTomasz Kantecki                                                         mgr, &ctxpool[j], &ctx, buf_ptr[j], len_rem,
2428cb7fe78SPablo de Lara                                                         ISAL_HASH_LAST);
243f36dbb84SChunyang Hui                                         else // submit the random update length as UPDATE
244*6801b27bSTomasz Kantecki                                                 errc = isal_sm3_ctx_mgr_submit(
245*6801b27bSTomasz Kantecki                                                         mgr, &ctxpool[j], &ctx, buf_ptr[j],
246*6801b27bSTomasz Kantecki                                                         len_rand, ISAL_HASH_UPDATE);
247*6801b27bSTomasz Kantecki                                         if (errc)
248*6801b27bSTomasz Kantecki                                                 return 1;
249b923697dSMarcel Cornu                                 } // Either continue submitting any contexts returned here as
250b923697dSMarcel Cornu                                   // UPDATE/LAST, or
251f36dbb84SChunyang Hui                                 // go back to submitting new jobs using the index i.
252f36dbb84SChunyang Hui 
253f36dbb84SChunyang Hui                                 i++;
254f36dbb84SChunyang Hui                         }
255f36dbb84SChunyang Hui                 }
256f36dbb84SChunyang Hui 
257f36dbb84SChunyang Hui                 // Start flushing finished jobs, end on last flushed
258*6801b27bSTomasz Kantecki                 if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
259*6801b27bSTomasz Kantecki                         return 1;
260f36dbb84SChunyang Hui                 while (ctx) {
2618cb7fe78SPablo de Lara                         if (isal_hash_ctx_complete(ctx)) {
262f36dbb84SChunyang Hui                                 debug_char('-');
263*6801b27bSTomasz Kantecki                                 if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
264*6801b27bSTomasz Kantecki                                         return 1;
265f36dbb84SChunyang Hui                                 continue;
266f36dbb84SChunyang Hui                         }
267f36dbb84SChunyang Hui                         // Resubmit unfinished job
26887dde3adSTomasz Kantecki                         i = (unsigned long) (uintptr_t) (ctx->user_data);
269f36dbb84SChunyang Hui                         buf_ptr[i] = bufs[i] + ctx->total_length; // update buffer pointer
270f36dbb84SChunyang Hui                         len_rem = lens[i] - ctx->total_length;
271*6801b27bSTomasz Kantecki                         len_rand =
272*6801b27bSTomasz Kantecki                                 (rand() % ISAL_SM3_BLOCK_SIZE) * (rand() % MAX_RAND_UPDATE_BLOCKS);
273f36dbb84SChunyang Hui                         debug_char('+');
274f36dbb84SChunyang Hui 
275*6801b27bSTomasz Kantecki                         int errc = 0;
276*6801b27bSTomasz Kantecki 
277*6801b27bSTomasz Kantecki                         if (len_rem <= len_rand)
278*6801b27bSTomasz Kantecki                                 errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
279*6801b27bSTomasz Kantecki                                                                len_rem, ISAL_HASH_LAST);
280*6801b27bSTomasz Kantecki                         else
281*6801b27bSTomasz Kantecki                                 errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, buf_ptr[i],
282*6801b27bSTomasz Kantecki                                                                len_rand, ISAL_HASH_UPDATE);
283*6801b27bSTomasz Kantecki 
284*6801b27bSTomasz Kantecki                         if (errc)
285*6801b27bSTomasz Kantecki                                 return 1;
286f36dbb84SChunyang Hui                         if (ctx == NULL)
287*6801b27bSTomasz Kantecki                                 if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
288*6801b27bSTomasz Kantecki                                         return 1;
289f36dbb84SChunyang Hui                 }
290f36dbb84SChunyang Hui 
291f36dbb84SChunyang Hui                 // Check result digest
292f36dbb84SChunyang Hui                 for (i = 0; i < jobs; i++) {
293*6801b27bSTomasz Kantecki                         for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
294f36dbb84SChunyang Hui                                 if (ctxpool[i].job.result_digest[j] !=
295e3f7d4fbSUlrich Weigand                                     to_le32(((uint32_t *) digest_ref[i])[j])) {
296f36dbb84SChunyang Hui                                         fail++;
297b923697dSMarcel Cornu                                         printf("Test%d, digest%d fail %8X <=> %8X\n", i, j,
298b923697dSMarcel Cornu                                                ctxpool[i].job.result_digest[j],
299e3f7d4fbSUlrich Weigand                                                to_le32(((uint32_t *) digest_ref[i])[j]));
300f36dbb84SChunyang Hui                                 }
301f36dbb84SChunyang Hui                         }
302f36dbb84SChunyang Hui                 }
303f36dbb84SChunyang Hui                 if (fail) {
304f36dbb84SChunyang Hui                         printf("Test failed function check %d\n", fail);
305f36dbb84SChunyang Hui                         return fail;
306f36dbb84SChunyang Hui                 }
307f36dbb84SChunyang Hui 
308f36dbb84SChunyang Hui                 putchar('.');
309f36dbb84SChunyang Hui                 fflush(0);
310f36dbb84SChunyang Hui         } // random test t
311f36dbb84SChunyang Hui 
312f36dbb84SChunyang Hui         if (fail)
313f36dbb84SChunyang Hui                 printf("Test failed function check %d\n", fail);
314f36dbb84SChunyang Hui         else
315f36dbb84SChunyang Hui                 printf(" multibinary_sm3_update rand: Pass\n");
316f36dbb84SChunyang Hui 
317f36dbb84SChunyang Hui         return fail;
318*6801b27bSTomasz Kantecki #else
319*6801b27bSTomasz Kantecki         printf("Not Executed\n");
320*6801b27bSTomasz Kantecki         return 0;
321*6801b27bSTomasz Kantecki #endif /* FIPS_MODE */
322f36dbb84SChunyang Hui }
323