xref: /isa-l_crypto/sha256_mb/sha256_mb_test.c (revision 487b772bd076f8313189acea961fedffe88eec4b)
16df3ef80SGreg Tucker /**********************************************************************
26df3ef80SGreg Tucker   Copyright(c) 2011-2016 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 #include <stdio.h>
316df3ef80SGreg Tucker #include <stdlib.h>
326df3ef80SGreg Tucker #include <string.h>
336df3ef80SGreg Tucker #include "sha256_mb.h"
346df3ef80SGreg Tucker 
350a437795SPablo de Lara typedef uint32_t DigestSHA256[ISAL_SHA256_DIGEST_NWORDS];
366df3ef80SGreg Tucker 
376df3ef80SGreg Tucker #define MSGS     7
386df3ef80SGreg Tucker #define NUM_JOBS 1000
396df3ef80SGreg Tucker 
406df3ef80SGreg Tucker #define PSEUDO_RANDOM_NUM(seed) ((seed) * 5 + ((seed) * (seed)) / 64) % MSGS
416df3ef80SGreg Tucker 
426df3ef80SGreg Tucker static uint8_t msg1[] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
436df3ef80SGreg Tucker static uint8_t msg2[] = "0123456789:;<=>?@ABCDEFGHIJKLMNO";
449ba6f238SMarcel Cornu static uint8_t msg3[] = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
459ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
466df3ef80SGreg Tucker                         "0123456789:;<";
479ba6f238SMarcel Cornu static uint8_t msg4[] = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
489ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
499ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
509ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQR";
519ba6f238SMarcel Cornu static uint8_t msg5[] = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
529ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
539ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
549ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
559ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
569ba6f238SMarcel Cornu                         "0123456789:;<=>?";
579ba6f238SMarcel Cornu static uint8_t msg6[] = "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
589ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
599ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
609ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
619ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
629ba6f238SMarcel Cornu                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX"
636df3ef80SGreg Tucker                         "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU";
646df3ef80SGreg Tucker static uint8_t msg7[] = "";
656df3ef80SGreg Tucker 
666df3ef80SGreg Tucker static DigestSHA256 expResultDigest1 = { 0x248D6A61, 0xD20638B8, 0xE5C02693, 0x0C3E6039,
679ba6f238SMarcel Cornu                                          0xA33CE459, 0x64FF2167, 0xF6ECEDD4, 0x19DB06C1 };
686df3ef80SGreg Tucker 
696df3ef80SGreg Tucker static DigestSHA256 expResultDigest2 = { 0xD9C2E699, 0x586B948F, 0x4022C799, 0x4FFE14C6,
709ba6f238SMarcel Cornu                                          0x3A4E8E31, 0x2EE2AEE1, 0xEBE51BED, 0x85705CFD };
716df3ef80SGreg Tucker 
726df3ef80SGreg Tucker static DigestSHA256 expResultDigest3 = { 0xE3057651, 0x81295681, 0x7ECF1791, 0xFF9A1619,
739ba6f238SMarcel Cornu                                          0xB2BC5CAD, 0x2AC00018, 0x92AE489C, 0x48DD10B3 };
746df3ef80SGreg Tucker 
756df3ef80SGreg Tucker static DigestSHA256 expResultDigest4 = { 0x0307DAA3, 0x7130A140, 0x270790F9, 0x95B71407,
769ba6f238SMarcel Cornu                                          0x8EC752A6, 0x084EC1F3, 0xBD873D79, 0x3FF78383 };
776df3ef80SGreg Tucker 
786df3ef80SGreg Tucker static DigestSHA256 expResultDigest5 = { 0x679312F7, 0x2E18D599, 0x5F51BDC6, 0x4ED56AFD,
799ba6f238SMarcel Cornu                                          0x9B5704D3, 0x4387E11C, 0xC2331089, 0x2CD45DAA };
806df3ef80SGreg Tucker 
816df3ef80SGreg Tucker static DigestSHA256 expResultDigest6 = { 0x8B1767E9, 0x7BA7BBE5, 0xF9A6E8D9, 0x9996904F,
829ba6f238SMarcel Cornu                                          0x3AF6562E, 0xA58AF438, 0x5D8D584B, 0x81C808CE };
836df3ef80SGreg Tucker 
846df3ef80SGreg Tucker static DigestSHA256 expResultDigest7 = { 0xE3B0C442, 0x98FC1C14, 0x9AFBF4C8, 0x996FB924,
859ba6f238SMarcel Cornu                                          0x27AE41E4, 0x649B934C, 0xA495991B, 0x7852B855 };
866df3ef80SGreg Tucker 
876df3ef80SGreg Tucker static uint8_t *msgs[MSGS] = { msg1, msg2, msg3, msg4, msg5, msg6, msg7 };
886df3ef80SGreg Tucker 
899ba6f238SMarcel Cornu static uint32_t *expResultDigest[MSGS] = { expResultDigest1, expResultDigest2, expResultDigest3,
906df3ef80SGreg Tucker                                            expResultDigest4, expResultDigest5, expResultDigest6,
919ba6f238SMarcel Cornu                                            expResultDigest7 };
926df3ef80SGreg Tucker 
93ba178e5cSJerry Yu #define NUM_CHUNKS   4
94ba178e5cSJerry Yu #define DATA_BUF_LEN 4096
959ba6f238SMarcel Cornu int
non_blocksize_updates_test(ISAL_SHA256_HASH_CTX_MGR * mgr)960a437795SPablo de Lara non_blocksize_updates_test(ISAL_SHA256_HASH_CTX_MGR *mgr)
97ba178e5cSJerry Yu {
980a437795SPablo de Lara         ISAL_SHA256_HASH_CTX ctx_refer;
990a437795SPablo de Lara         ISAL_SHA256_HASH_CTX ctx_pool[NUM_CHUNKS];
1000a437795SPablo de Lara         ISAL_SHA256_HASH_CTX *ctx = NULL;
101*487b772bSPablo de Lara         int rc;
102ba178e5cSJerry Yu 
103ba178e5cSJerry Yu         const int update_chunks[NUM_CHUNKS] = { 32, 64, 128, 256 };
104ba178e5cSJerry Yu         unsigned char data_buf[DATA_BUF_LEN];
105ba178e5cSJerry Yu 
106ba178e5cSJerry Yu         memset(data_buf, 0xA, DATA_BUF_LEN);
107ba178e5cSJerry Yu 
108ba178e5cSJerry Yu         // Init contexts before first use
1098cb7fe78SPablo de Lara         isal_hash_ctx_init(&ctx_refer);
110ba178e5cSJerry Yu 
111*487b772bSPablo de Lara         rc = isal_sha256_ctx_mgr_submit(mgr, &ctx_refer, &ctx, data_buf, DATA_BUF_LEN,
112*487b772bSPablo de Lara                                         ISAL_HASH_ENTIRE);
113*487b772bSPablo de Lara         if (rc)
114ba178e5cSJerry Yu                 return -1;
115*487b772bSPablo de Lara 
116*487b772bSPablo de Lara         rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
117*487b772bSPablo de Lara         if (rc)
118ba178e5cSJerry Yu                 return -1;
119ba178e5cSJerry Yu 
120ba178e5cSJerry Yu         for (int c = 0; c < NUM_CHUNKS; c++) {
121ba178e5cSJerry Yu                 int chunk = update_chunks[c];
1228cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctx_pool[c]);
123*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_submit(mgr, &ctx_pool[c], &ctx, NULL, 0, ISAL_HASH_FIRST);
124*487b772bSPablo de Lara                 if (rc)
125ba178e5cSJerry Yu                         return -1;
126*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
127*487b772bSPablo de Lara                 if (rc)
128ba178e5cSJerry Yu                         return -1;
129a55e0afeSPablo de Lara                 for (int i = 0; i * chunk < DATA_BUF_LEN; i++) {
130*487b772bSPablo de Lara                         rc = isal_sha256_ctx_mgr_submit(mgr, &ctx_pool[c], &ctx,
131*487b772bSPablo de Lara                                                         data_buf + i * chunk, chunk,
132a55e0afeSPablo de Lara                                                         ISAL_HASH_UPDATE);
133*487b772bSPablo de Lara                         if (rc)
134a55e0afeSPablo de Lara                                 return -1;
135*487b772bSPablo de Lara                         rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
136*487b772bSPablo de Lara                         if (rc)
137a55e0afeSPablo de Lara                                 return -1;
138ba178e5cSJerry Yu                 }
139ba178e5cSJerry Yu         }
140ba178e5cSJerry Yu 
141ba178e5cSJerry Yu         for (int c = 0; c < NUM_CHUNKS; c++) {
142*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_submit(mgr, &ctx_pool[c], &ctx, NULL, 0, ISAL_HASH_LAST);
143*487b772bSPablo de Lara                 if (rc)
144ba178e5cSJerry Yu                         return -1;
145*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
146*487b772bSPablo de Lara                 if (rc)
147ba178e5cSJerry Yu                         return -1;
1488cb7fe78SPablo de Lara                 if (ctx_pool[c].status != ISAL_HASH_CTX_STS_COMPLETE) {
149ba178e5cSJerry Yu                         return -1;
150ba178e5cSJerry Yu                 }
1510a437795SPablo de Lara                 for (int i = 0; i < ISAL_SHA256_DIGEST_NWORDS; i++) {
152ba178e5cSJerry Yu                         if (ctx_refer.job.result_digest[i] != ctx_pool[c].job.result_digest[i]) {
1539ba6f238SMarcel Cornu                                 printf("sha256 calc error! chunk %d, digest[%d], (%d) != (%d)\n",
154ba178e5cSJerry Yu                                        update_chunks[c], i, ctx_refer.job.result_digest[i],
155ba178e5cSJerry Yu                                        ctx_pool[c].job.result_digest[i]);
156ba178e5cSJerry Yu                                 return -2;
157ba178e5cSJerry Yu                         }
158ba178e5cSJerry Yu                 }
159ba178e5cSJerry Yu         }
160ba178e5cSJerry Yu         return 0;
161ba178e5cSJerry Yu }
162ba178e5cSJerry Yu 
1639ba6f238SMarcel Cornu int
main(void)1649ba6f238SMarcel Cornu main(void)
1656df3ef80SGreg Tucker {
1660a437795SPablo de Lara         ISAL_SHA256_HASH_CTX_MGR *mgr = NULL;
1670a437795SPablo de Lara         ISAL_SHA256_HASH_CTX ctxpool[NUM_JOBS], *ctx = NULL;
1686df3ef80SGreg Tucker         uint32_t i, j, k, t, checked = 0;
1696df3ef80SGreg Tucker         uint32_t *good;
170d797c594SMarcel Cornu         int rc, ret = -1;
1716df3ef80SGreg Tucker 
1720a437795SPablo de Lara         rc = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA256_HASH_CTX_MGR));
173d797c594SMarcel Cornu         if ((rc != 0) || (mgr == NULL)) {
174c91caf97STom Cosgrove                 printf("posix_memalign failed test aborted\n");
175c91caf97STom Cosgrove                 return 1;
176c91caf97STom Cosgrove         }
177c91caf97STom Cosgrove 
178*487b772bSPablo de Lara         rc = isal_sha256_ctx_mgr_init(mgr);
179*487b772bSPablo de Lara         if (rc)
180*487b772bSPablo de Lara                 goto end;
1816df3ef80SGreg Tucker 
1826df3ef80SGreg Tucker         // Init contexts before first use
1836df3ef80SGreg Tucker         for (i = 0; i < MSGS; i++) {
1848cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
1856df3ef80SGreg Tucker                 ctxpool[i].user_data = (void *) ((uint64_t) i);
1866df3ef80SGreg Tucker         }
1876df3ef80SGreg Tucker 
1886df3ef80SGreg Tucker         for (i = 0; i < MSGS; i++) {
189*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, msgs[i],
190*487b772bSPablo de Lara                                                 (uint32_t) strlen((char *) msgs[i]),
191*487b772bSPablo de Lara                                                 ISAL_HASH_ENTIRE);
192*487b772bSPablo de Lara                 if (rc)
193*487b772bSPablo de Lara                         goto end;
1946df3ef80SGreg Tucker 
1956df3ef80SGreg Tucker                 if (ctx) {
196122c1779SMarcel Cornu                         t = (uint32_t) (uintptr_t) (ctx->user_data);
1976df3ef80SGreg Tucker                         good = expResultDigest[t];
1986df3ef80SGreg Tucker                         checked++;
1990a437795SPablo de Lara                         for (j = 0; j < ISAL_SHA256_DIGEST_NWORDS; j++) {
2006df3ef80SGreg Tucker                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
2019ba6f238SMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
2029ba6f238SMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
203d797c594SMarcel Cornu                                         goto end;
2046df3ef80SGreg Tucker                                 }
2056df3ef80SGreg Tucker                         }
2066df3ef80SGreg Tucker 
2076df3ef80SGreg Tucker                         if (ctx->error) {
2086df3ef80SGreg Tucker                                 printf("Something bad happened during the submit."
2099ba6f238SMarcel Cornu                                        " Error code: %d",
2109ba6f238SMarcel Cornu                                        ctx->error);
211d797c594SMarcel Cornu                                 goto end;
2126df3ef80SGreg Tucker                         }
2136df3ef80SGreg Tucker                 }
2146df3ef80SGreg Tucker         }
2156df3ef80SGreg Tucker 
2166df3ef80SGreg Tucker         while (1) {
217*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
218*487b772bSPablo de Lara                 if (rc)
219*487b772bSPablo de Lara                         goto end;
2206df3ef80SGreg Tucker 
2216df3ef80SGreg Tucker                 if (ctx) {
222122c1779SMarcel Cornu                         t = (uint32_t) (uintptr_t) (ctx->user_data);
2236df3ef80SGreg Tucker                         good = expResultDigest[t];
2246df3ef80SGreg Tucker                         checked++;
2250a437795SPablo de Lara                         for (j = 0; j < ISAL_SHA256_DIGEST_NWORDS; j++) {
2266df3ef80SGreg Tucker                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
2279ba6f238SMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
2289ba6f238SMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
229d797c594SMarcel Cornu                                         goto end;
2306df3ef80SGreg Tucker                                 }
2316df3ef80SGreg Tucker                         }
2326df3ef80SGreg Tucker 
2336df3ef80SGreg Tucker                         if (ctx->error) {
2346df3ef80SGreg Tucker                                 printf("Something bad happened during the submit."
2359ba6f238SMarcel Cornu                                        " Error code: %d",
2369ba6f238SMarcel Cornu                                        ctx->error);
237d797c594SMarcel Cornu                                 goto end;
2386df3ef80SGreg Tucker                         }
2396df3ef80SGreg Tucker                 } else {
2406df3ef80SGreg Tucker                         break;
2416df3ef80SGreg Tucker                 }
2426df3ef80SGreg Tucker         }
2436df3ef80SGreg Tucker 
2446df3ef80SGreg Tucker         // do larger test in pseudo-random order
2456df3ef80SGreg Tucker 
2466df3ef80SGreg Tucker         // Init contexts before first use
2476df3ef80SGreg Tucker         for (i = 0; i < NUM_JOBS; i++) {
2488cb7fe78SPablo de Lara                 isal_hash_ctx_init(&ctxpool[i]);
2496df3ef80SGreg Tucker                 ctxpool[i].user_data = (void *) ((uint64_t) i);
2506df3ef80SGreg Tucker         }
2516df3ef80SGreg Tucker 
2526df3ef80SGreg Tucker         checked = 0;
2536df3ef80SGreg Tucker         for (i = 0; i < NUM_JOBS; i++) {
2546df3ef80SGreg Tucker                 j = PSEUDO_RANDOM_NUM(i);
255*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_submit(mgr, &ctxpool[i], &ctx, msgs[j],
256*487b772bSPablo de Lara                                                 (uint32_t) strlen((char *) msgs[j]),
257*487b772bSPablo de Lara                                                 ISAL_HASH_ENTIRE);
258*487b772bSPablo de Lara                 if (rc)
259*487b772bSPablo de Lara                         goto end;
2606df3ef80SGreg Tucker                 if (ctx) {
261122c1779SMarcel Cornu                         t = (uint32_t) (uintptr_t) (ctx->user_data);
2626df3ef80SGreg Tucker                         k = PSEUDO_RANDOM_NUM(t);
2636df3ef80SGreg Tucker                         good = expResultDigest[k];
2646df3ef80SGreg Tucker                         checked++;
2650a437795SPablo de Lara                         for (j = 0; j < ISAL_SHA256_DIGEST_NWORDS; j++) {
2666df3ef80SGreg Tucker                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
2679ba6f238SMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
2689ba6f238SMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
269d797c594SMarcel Cornu                                         goto end;
2706df3ef80SGreg Tucker                                 }
2716df3ef80SGreg Tucker                         }
2726df3ef80SGreg Tucker 
2736df3ef80SGreg Tucker                         if (ctx->error) {
2746df3ef80SGreg Tucker                                 printf("Something bad happened during the"
2759ba6f238SMarcel Cornu                                        " submit. Error code: %d",
2769ba6f238SMarcel Cornu                                        ctx->error);
277d797c594SMarcel Cornu                                 goto end;
2786df3ef80SGreg Tucker                         }
2796df3ef80SGreg Tucker 
280122c1779SMarcel Cornu                         t = (uint32_t) (uintptr_t) (ctx->user_data);
2816df3ef80SGreg Tucker                         k = PSEUDO_RANDOM_NUM(t);
2826df3ef80SGreg Tucker                 }
2836df3ef80SGreg Tucker         }
2846df3ef80SGreg Tucker         while (1) {
285*487b772bSPablo de Lara                 rc = isal_sha256_ctx_mgr_flush(mgr, &ctx);
286*487b772bSPablo de Lara                 if (rc)
287*487b772bSPablo de Lara                         goto end;
2886df3ef80SGreg Tucker 
2896df3ef80SGreg Tucker                 if (ctx) {
290122c1779SMarcel Cornu                         t = (uint32_t) (uintptr_t) (ctx->user_data);
2916df3ef80SGreg Tucker                         k = PSEUDO_RANDOM_NUM(t);
2926df3ef80SGreg Tucker                         good = expResultDigest[k];
2936df3ef80SGreg Tucker                         checked++;
2940a437795SPablo de Lara                         for (j = 0; j < ISAL_SHA256_DIGEST_NWORDS; j++) {
2956df3ef80SGreg Tucker                                 if (good[j] != ctxpool[t].job.result_digest[j]) {
2969ba6f238SMarcel Cornu                                         printf("Test %d, digest %d is %08X, should be %08X\n", t, j,
2979ba6f238SMarcel Cornu                                                ctxpool[t].job.result_digest[j], good[j]);
298d797c594SMarcel Cornu                                         goto end;
2996df3ef80SGreg Tucker                                 }
3006df3ef80SGreg Tucker                         }
3016df3ef80SGreg Tucker 
3026df3ef80SGreg Tucker                         if (ctx->error) {
3036df3ef80SGreg Tucker                                 printf("Something bad happened during the submit."
3049ba6f238SMarcel Cornu                                        " Error code: %d",
3059ba6f238SMarcel Cornu                                        ctx->error);
306d797c594SMarcel Cornu                                 goto end;
3076df3ef80SGreg Tucker                         }
3086df3ef80SGreg Tucker                 } else {
3096df3ef80SGreg Tucker                         break;
3106df3ef80SGreg Tucker                 }
3116df3ef80SGreg Tucker         }
3126df3ef80SGreg Tucker 
3136df3ef80SGreg Tucker         if (checked != NUM_JOBS) {
3146df3ef80SGreg Tucker                 printf("only tested %d rather than %d\n", checked, NUM_JOBS);
315d797c594SMarcel Cornu                 goto end;
3166df3ef80SGreg Tucker         }
3176df3ef80SGreg Tucker 
318d797c594SMarcel Cornu         rc = non_blocksize_updates_test(mgr);
319ba178e5cSJerry Yu         if (rc) {
320ba178e5cSJerry Yu                 printf("multi updates test fail %d\n", rc);
321d797c594SMarcel Cornu                 goto end;
322ba178e5cSJerry Yu         }
323d797c594SMarcel Cornu         ret = 0;
324ba178e5cSJerry Yu 
3256df3ef80SGreg Tucker         printf(" multibinary_sha256 test: Pass\n");
326d797c594SMarcel Cornu end:
327d797c594SMarcel Cornu         aligned_free(mgr);
3286df3ef80SGreg Tucker 
329d797c594SMarcel Cornu         return ret;
3306df3ef80SGreg Tucker }
331