xref: /isa-l_crypto/sm3_mb/sm3_mb_test.c (revision 6801b27bd9295090e36d2864110576f428efdf61)
1aab03b45SJerry Yu /**********************************************************************
2aab03b45SJerry Yu   Copyright(c) 2020 Arm Corporation All rights reserved.
3aab03b45SJerry Yu 
4aab03b45SJerry Yu   Redistribution and use in source and binary forms, with or without
5aab03b45SJerry Yu   modification, are permitted provided that the following conditions
6aab03b45SJerry Yu   are met:
7aab03b45SJerry Yu     * Redistributions of source code must retain the above copyright
8aab03b45SJerry Yu       notice, this list of conditions and the following disclaimer.
9aab03b45SJerry Yu     * Redistributions in binary form must reproduce the above copyright
10aab03b45SJerry Yu       notice, this list of conditions and the following disclaimer in
11aab03b45SJerry Yu       the documentation and/or other materials provided with the
12aab03b45SJerry Yu       distribution.
13aab03b45SJerry Yu     * Neither the name of Arm Corporation nor the names of its
14aab03b45SJerry Yu       contributors may be used to endorse or promote products derived
15aab03b45SJerry Yu       from this software without specific prior written permission.
16aab03b45SJerry Yu 
17aab03b45SJerry Yu   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18aab03b45SJerry Yu   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19aab03b45SJerry Yu   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20aab03b45SJerry Yu   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21aab03b45SJerry Yu   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22aab03b45SJerry Yu   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23aab03b45SJerry Yu   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24aab03b45SJerry Yu   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25aab03b45SJerry Yu   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26aab03b45SJerry Yu   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27aab03b45SJerry Yu   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28aab03b45SJerry Yu **********************************************************************/
29aab03b45SJerry Yu 
30aab03b45SJerry Yu #include <stdio.h>
31aab03b45SJerry Yu #include <stdlib.h>
32aab03b45SJerry Yu #include <string.h>
33*6801b27bSTomasz Kantecki 
34*6801b27bSTomasz Kantecki #ifndef FIPS_MODE
35aab03b45SJerry Yu #include "sm3_mb.h"
36aab03b45SJerry Yu 
37aab03b45SJerry Yu typedef struct {
38aab03b45SJerry Yu         const char *msg;
39*6801b27bSTomasz Kantecki         uint32_t resultDigest[ISAL_SM3_DIGEST_NWORDS];
40aab03b45SJerry Yu } TestData;
41aab03b45SJerry Yu 
42aab03b45SJerry Yu static TestData test_data[] = {
43b923697dSMarcel Cornu         { .msg = "abc",
44b923697dSMarcel Cornu           .resultDigest = { 0xf4f0c766, 0xd9edee62, 0x6bd4f2d1, 0xe2e410dc, 0x87c46741, 0xa2f7f25c,
45b923697dSMarcel Cornu                             0x2ba07d29, 0xe0a84b8f } },
46b923697dSMarcel Cornu         { .msg = "abcdabcdabcdabcdabcdabcdabcdabcd"
47b923697dSMarcel Cornu                  "abcdabcdabcdabcdabcdabcdabcdabcd",
48b923697dSMarcel Cornu           .resultDigest = { 0xf99fbede, 0xa1b87522, 0x89486038, 0x4d5a8ec1, 0xe570db6f, 0x65577e38,
49b923697dSMarcel Cornu                             0xa3cb3d29, 0x32570c9c }
50aab03b45SJerry Yu 
51aab03b45SJerry Yu         },
52b923697dSMarcel Cornu         { .msg = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
53b923697dSMarcel Cornu           .resultDigest = { 0xc56c9b63, 0x379e4de6, 0x92b190a3, 0xeaa14fdf, 0x74ab2007, 0xb992f67f,
54b923697dSMarcel Cornu                             0x664e8cf3, 0x058c7bad } },
55aab03b45SJerry Yu 
56aab03b45SJerry Yu         { .msg = "0123456789:;<=>?@ABCDEFGHIJKLMNO",
57b923697dSMarcel Cornu           .resultDigest = { 0x076833d0, 0xd089ec39, 0xad857685, 0x8089797a, 0x9df9e8fd, 0x4126eb9a,
58b923697dSMarcel Cornu                             0xf38c22e8, 0x054bb846 } },
59b923697dSMarcel Cornu         { .msg = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
60aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
61b923697dSMarcel Cornu                  "0123456789:;<",
62b923697dSMarcel Cornu           .resultDigest = { 0x6cb9d38e, 0x846ac99e, 0x6d05634b, 0x3fe1bb26, 0x90368c4b, 0xee8c4299,
63b923697dSMarcel Cornu                             0x08c0e96a, 0x2233cdc7 } },
64b923697dSMarcel Cornu         { .msg = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
65b923697dSMarcel Cornu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
66b923697dSMarcel Cornu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
67b923697dSMarcel Cornu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQR",
68b923697dSMarcel Cornu           .resultDigest = { 0x83758189, 0x050f14d1, 0x91d8a730, 0x4a2825e4, 0x11723273, 0x2114ee3f,
69b923697dSMarcel Cornu                             0x18cac172, 0xa9c5b07a } },
70b923697dSMarcel Cornu         {
71b923697dSMarcel Cornu                 .msg = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
72b923697dSMarcel Cornu                        "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
73b923697dSMarcel Cornu                        "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
74b923697dSMarcel Cornu                        "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
75b923697dSMarcel Cornu                        "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
76b923697dSMarcel Cornu                        "0123456789:;<=>?",
77b923697dSMarcel Cornu                 .resultDigest = { 0xb80f8aba, 0x55e96119, 0x851ac77b, 0xae31b3a5, 0x1333e764,
78b923697dSMarcel Cornu                                   0xc86ac40d, 0x34878db1, 0x7da873f6 },
79aab03b45SJerry Yu         },
80b923697dSMarcel Cornu         { .msg = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
81aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
82aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
83aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
84aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
85aab03b45SJerry Yu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
86b923697dSMarcel Cornu                  "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU",
87b923697dSMarcel Cornu           .resultDigest = { 0xbd5736a7, 0x55977d13, 0xa950c78a, 0x71eeb7cb, 0xe9ef0ba5, 0x95a9302e,
88b923697dSMarcel Cornu                             0x155e5c33, 0xad96ce3c } },
89b923697dSMarcel Cornu         { .msg = "",
90b923697dSMarcel Cornu           .resultDigest = { 0x831db21a, 0x7fa1cf55, 0x4819618e, 0x8f1ae831, 0xc7c8be22, 0x74fbfe28,
91b923697dSMarcel Cornu                             0xeb35d07e, 0x2baa8250 }
92aab03b45SJerry Yu 
93aab03b45SJerry Yu         },
94aab03b45SJerry Yu 
95aab03b45SJerry Yu };
96aab03b45SJerry Yu 
97aab03b45SJerry Yu #define MSGS     sizeof(test_data) / sizeof(TestData)
98aab03b45SJerry Yu #define NUM_JOBS 1000
99aab03b45SJerry Yu 
100aab03b45SJerry Yu #define PSEUDO_RANDOM_NUM(seed) ((seed) * 5 + ((seed) * (seed)) / 64) % MSGS
101aab03b45SJerry Yu 
102ba178e5cSJerry Yu #define NUM_CHUNKS   4
103ba178e5cSJerry Yu #define DATA_BUF_LEN 4096
104b923697dSMarcel Cornu int
non_blocksize_updates_test(ISAL_SM3_HASH_CTX_MGR * mgr)105*6801b27bSTomasz Kantecki non_blocksize_updates_test(ISAL_SM3_HASH_CTX_MGR *mgr)
106ba178e5cSJerry Yu {
107*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX ctx_refer;
108*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX ctx_pool[NUM_CHUNKS];
109*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX *ctx = NULL;
110ba178e5cSJerry Yu 
111ba178e5cSJerry Yu         const int update_chunks[NUM_CHUNKS] = { 32, 64, 128, 256 };
112ba178e5cSJerry Yu         unsigned char data_buf[DATA_BUF_LEN];
113ba178e5cSJerry Yu 
114ba178e5cSJerry Yu         memset(data_buf, 0xA, DATA_BUF_LEN);
115ba178e5cSJerry Yu 
116ba178e5cSJerry Yu         // Init contexts before first use
1178cb7fe78SPablo de Lara         isal_hash_ctx_init(&ctx_refer);
118ba178e5cSJerry Yu 
119*6801b27bSTomasz Kantecki         if (isal_sm3_ctx_mgr_submit(mgr, &ctx_refer, &ctx, data_buf, DATA_BUF_LEN,
120*6801b27bSTomasz Kantecki                                     ISAL_HASH_ENTIRE) != 0)
121ba178e5cSJerry Yu                 return -1;
122*6801b27bSTomasz Kantecki 
123*6801b27bSTomasz Kantecki         if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
124ba178e5cSJerry Yu                 return -1;
125ba178e5cSJerry Yu 
126ba178e5cSJerry Yu         for (int c = 0; c < NUM_CHUNKS; c++) {
127*6801b27bSTomasz Kantecki                 const int chunk = update_chunks[c];
128*6801b27bSTomasz Kantecki 
1298cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctx_pool[c]);
130ba178e5cSJerry Yu                 for (int i = 0; i * chunk < DATA_BUF_LEN; i++) {
131*6801b27bSTomasz Kantecki                         const ISAL_HASH_CTX_FLAG flags =
132*6801b27bSTomasz Kantecki                                 (i == 0) ? ISAL_HASH_FIRST : ISAL_HASH_UPDATE;
133*6801b27bSTomasz Kantecki 
134*6801b27bSTomasz Kantecki                         if (isal_sm3_ctx_mgr_submit(mgr, &ctx_pool[c], &ctx, data_buf + i * chunk,
135*6801b27bSTomasz Kantecki                                                     chunk, flags) != 0)
136ba178e5cSJerry Yu                                 return -1;
137*6801b27bSTomasz Kantecki                         if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
138ba178e5cSJerry Yu                                 return -1;
139ba178e5cSJerry Yu                 }
140ba178e5cSJerry Yu         }
141ba178e5cSJerry Yu 
142ba178e5cSJerry Yu         for (int c = 0; c < NUM_CHUNKS; c++) {
143*6801b27bSTomasz Kantecki                 if (isal_sm3_ctx_mgr_submit(mgr, &ctx_pool[c], &ctx, NULL, 0, ISAL_HASH_LAST) != 0)
144ba178e5cSJerry Yu                         return -1;
145*6801b27bSTomasz Kantecki                 if (isal_sm3_ctx_mgr_flush(mgr, &ctx) != 0)
146ba178e5cSJerry Yu                         return -1;
147*6801b27bSTomasz Kantecki                 if (ctx_pool[c].status != ISAL_HASH_CTX_STS_COMPLETE)
148ba178e5cSJerry Yu                         return -1;
149*6801b27bSTomasz Kantecki                 for (int i = 0; i < ISAL_SM3_DIGEST_NWORDS; i++) {
150ba178e5cSJerry Yu                         if (ctx_refer.job.result_digest[i] != ctx_pool[c].job.result_digest[i]) {
151b923697dSMarcel Cornu                                 printf("sm3 calc error! chunk %d, digest[%d], (%d) != (%d)\n",
152ba178e5cSJerry Yu                                        update_chunks[c], i, ctx_refer.job.result_digest[i],
153ba178e5cSJerry Yu                                        ctx_pool[c].job.result_digest[i]);
154ba178e5cSJerry Yu                                 return -2;
155ba178e5cSJerry Yu                         }
156ba178e5cSJerry Yu                 }
157ba178e5cSJerry Yu         }
158ba178e5cSJerry Yu         return 0;
159ba178e5cSJerry Yu }
160*6801b27bSTomasz Kantecki #endif /* !FIPS_MODE */
161ba178e5cSJerry Yu 
162b923697dSMarcel Cornu int
main(void)163b923697dSMarcel Cornu main(void)
164aab03b45SJerry Yu {
165*6801b27bSTomasz Kantecki #ifndef FIPS_MODE
166*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX_MGR *mgr = NULL;
167*6801b27bSTomasz Kantecki         ISAL_SM3_HASH_CTX ctxpool[NUM_JOBS], *ctx = NULL;
168aab03b45SJerry Yu         uint32_t i, j, k, t, checked = 0;
169aab03b45SJerry Yu         uint32_t *good;
170f5954796SMarcel Cornu         int rc, ret = -1;
171*6801b27bSTomasz Kantecki         rc = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SM3_HASH_CTX_MGR));
172f5954796SMarcel Cornu         if (rc) {
173aab03b45SJerry Yu                 printf("alloc error: Fail");
174aab03b45SJerry Yu                 return -1;
175aab03b45SJerry Yu         }
176*6801b27bSTomasz Kantecki         isal_sm3_ctx_mgr_init(mgr);
177aab03b45SJerry Yu         // Init contexts before first use
178aab03b45SJerry Yu         for (i = 0; i < MSGS; i++) {
1798cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
180aab03b45SJerry Yu                 ctxpool[i].user_data = (void *) ((uint64_t) i);
181aab03b45SJerry Yu         }
182aab03b45SJerry Yu 
183aab03b45SJerry Yu         for (i = 0; i < MSGS; i++) {
184*6801b27bSTomasz Kantecki                 const int errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, test_data[i].msg,
185*6801b27bSTomasz Kantecki                                                          strlen((char *) test_data[i].msg),
186*6801b27bSTomasz Kantecki                                                          ISAL_HASH_ENTIRE);
187*6801b27bSTomasz Kantecki 
188*6801b27bSTomasz Kantecki                 if (errc == 0) {
189*6801b27bSTomasz Kantecki                         if (ctx != NULL) {
19087dde3adSTomasz Kantecki                                 t = (unsigned long) (uintptr_t) (ctx->user_data);
191aab03b45SJerry Yu                                 good = test_data[t].resultDigest;
192aab03b45SJerry Yu                                 checked++;
193*6801b27bSTomasz Kantecki                                 for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
194aab03b45SJerry Yu                                         if (good[j] != ctxpool[t].job.result_digest[j]) {
195*6801b27bSTomasz Kantecki                                                 printf("Test %d, digest %d is %08X, should be "
196*6801b27bSTomasz Kantecki                                                        "%08X\n",
197*6801b27bSTomasz Kantecki                                                        t, j, ctxpool[t].job.result_digest[j],
198*6801b27bSTomasz Kantecki                                                        good[j]);
199f5954796SMarcel Cornu                                                 goto end;
200aab03b45SJerry Yu                                         }
201aab03b45SJerry Yu                                 }
202aab03b45SJerry Yu                         }
203*6801b27bSTomasz Kantecki                 } else {
204*6801b27bSTomasz Kantecki                         printf("Something bad happened during the submit. Error code: %d", errc);
205*6801b27bSTomasz Kantecki                         goto end;
206aab03b45SJerry Yu                 }
207aab03b45SJerry Yu         }
208aab03b45SJerry Yu 
209aab03b45SJerry Yu         while (1) {
210*6801b27bSTomasz Kantecki                 const int errc = isal_sm3_ctx_mgr_flush(mgr, &ctx);
211*6801b27bSTomasz Kantecki 
212*6801b27bSTomasz Kantecki                 if (errc == 0) {
213*6801b27bSTomasz Kantecki                         if (ctx == NULL)
214*6801b27bSTomasz Kantecki                                 break;
215*6801b27bSTomasz Kantecki 
21687dde3adSTomasz Kantecki                         t = (unsigned long) (uintptr_t) (ctx->user_data);
217aab03b45SJerry Yu                         good = test_data[t].resultDigest;
218aab03b45SJerry Yu                         checked++;
219*6801b27bSTomasz Kantecki                         for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
220aab03b45SJerry Yu                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
221b923697dSMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
222b923697dSMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
223f5954796SMarcel Cornu                                         goto end;
224aab03b45SJerry Yu                                 }
225aab03b45SJerry Yu                         }
226aab03b45SJerry Yu                 } else {
227*6801b27bSTomasz Kantecki                         printf("Something bad happened during the flush. Error code: %d", errc);
228*6801b27bSTomasz Kantecki                         goto end;
229aab03b45SJerry Yu                 }
230aab03b45SJerry Yu         }
231aab03b45SJerry Yu 
232aab03b45SJerry Yu         // do larger test in pseudo-random order
233aab03b45SJerry Yu 
234aab03b45SJerry Yu         // Init contexts before first use
235aab03b45SJerry Yu         for (i = 0; i < NUM_JOBS; i++) {
2368cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
237aab03b45SJerry Yu                 ctxpool[i].user_data = (void *) ((uint64_t) i);
238aab03b45SJerry Yu         }
239aab03b45SJerry Yu 
240aab03b45SJerry Yu         checked = 0;
241aab03b45SJerry Yu         for (i = 0; i < NUM_JOBS; i++) {
242aab03b45SJerry Yu                 j = PSEUDO_RANDOM_NUM(i);
243*6801b27bSTomasz Kantecki 
244*6801b27bSTomasz Kantecki                 const int errc = isal_sm3_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, test_data[j].msg,
245*6801b27bSTomasz Kantecki                                                          strlen((char *) test_data[j].msg),
246*6801b27bSTomasz Kantecki                                                          ISAL_HASH_ENTIRE);
247*6801b27bSTomasz Kantecki                 if (errc == 0) {
248*6801b27bSTomasz Kantecki                         if (ctx != NULL) {
24987dde3adSTomasz Kantecki                                 t = (unsigned long) (uintptr_t) (ctx->user_data);
250aab03b45SJerry Yu                                 k = PSEUDO_RANDOM_NUM(t);
251aab03b45SJerry Yu                                 good = test_data[k].resultDigest;
252aab03b45SJerry Yu                                 checked++;
253*6801b27bSTomasz Kantecki                                 for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
254aab03b45SJerry Yu                                         if (good[j] != ctxpool[t].job.result_digest[j]) {
255*6801b27bSTomasz Kantecki                                                 printf("Test %d, digest %d is %08X, should be "
256*6801b27bSTomasz Kantecki                                                        "%08X\n",
257*6801b27bSTomasz Kantecki                                                        t, j, ctxpool[t].job.result_digest[j],
258*6801b27bSTomasz Kantecki                                                        good[j]);
259f5954796SMarcel Cornu                                                 goto end;
260aab03b45SJerry Yu                                         }
261aab03b45SJerry Yu                                 }
262aab03b45SJerry Yu                         }
263*6801b27bSTomasz Kantecki                 } else {
264*6801b27bSTomasz Kantecki                         printf("Something bad happened during the submit. Error code: %d", errc);
265*6801b27bSTomasz Kantecki                         goto end;
266aab03b45SJerry Yu                 }
267aab03b45SJerry Yu         }
268aab03b45SJerry Yu         while (1) {
269*6801b27bSTomasz Kantecki                 const int errc = isal_sm3_ctx_mgr_flush(mgr, &ctx);
270*6801b27bSTomasz Kantecki 
271*6801b27bSTomasz Kantecki                 if (errc == 0) {
272*6801b27bSTomasz Kantecki                         if (ctx == NULL)
273*6801b27bSTomasz Kantecki                                 break;
274*6801b27bSTomasz Kantecki 
27587dde3adSTomasz Kantecki                         t = (unsigned long) (uintptr_t) (ctx->user_data);
276aab03b45SJerry Yu                         k = PSEUDO_RANDOM_NUM(t);
277aab03b45SJerry Yu                         good = test_data[k].resultDigest;
278aab03b45SJerry Yu                         checked++;
279*6801b27bSTomasz Kantecki                         for (j = 0; j < ISAL_SM3_DIGEST_NWORDS; j++) {
280aab03b45SJerry Yu                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
281b923697dSMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
282b923697dSMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
283f5954796SMarcel Cornu                                         goto end;
284aab03b45SJerry Yu                                 }
285aab03b45SJerry Yu                         }
286aab03b45SJerry Yu                 } else {
287*6801b27bSTomasz Kantecki                         printf("Something bad happened during the flush. Error code: %d", errc);
288*6801b27bSTomasz Kantecki                         goto end;
289aab03b45SJerry Yu                 }
290aab03b45SJerry Yu         }
291aab03b45SJerry Yu 
292aab03b45SJerry Yu         if (checked != NUM_JOBS) {
293aab03b45SJerry Yu                 printf("only tested %d rather than %d\n", checked, NUM_JOBS);
294f5954796SMarcel Cornu                 goto end;
295aab03b45SJerry Yu         }
296aab03b45SJerry Yu 
297f5954796SMarcel Cornu         rc = non_blocksize_updates_test(mgr);
298ba178e5cSJerry Yu         if (rc) {
299ba178e5cSJerry Yu                 printf("multi updates test fail %d\n", rc);
300f5954796SMarcel Cornu                 goto end;
301ba178e5cSJerry Yu         }
302f5954796SMarcel Cornu         ret = 0;
303ba178e5cSJerry Yu 
304aab03b45SJerry Yu         printf(" multibinary_sm3 test: Pass\n");
305f5954796SMarcel Cornu end:
306f5954796SMarcel Cornu         aligned_free(mgr);
307f5954796SMarcel Cornu 
308f5954796SMarcel Cornu         return ret;
309*6801b27bSTomasz Kantecki #else
310*6801b27bSTomasz Kantecki         printf("Not Executed\n");
311*6801b27bSTomasz Kantecki         return 0;
312*6801b27bSTomasz Kantecki #endif /* FIPS_MODE */
313aab03b45SJerry Yu }
314