xref: /isa-l_crypto/sha256_mb/sha256_mb_param_test.c (revision 0a437795c8360736f38dfa5934aa03a1861d784c)
1fc3226e8SMarcel Cornu /**********************************************************************
2fc3226e8SMarcel Cornu   Copyright(c) 2024 Intel Corporation All rights reserved.
3fc3226e8SMarcel Cornu   Redistribution and use in source and binary forms, with or without
4fc3226e8SMarcel Cornu   modification, are permitted provided that the following conditions
5fc3226e8SMarcel Cornu   are met:
6fc3226e8SMarcel Cornu     * Redistributions of source code must retain the above copyright
7fc3226e8SMarcel Cornu       notice, this list of conditions and the following disclaimer.
8fc3226e8SMarcel Cornu     * Redistributions in binary form must reproduce the above copyright
9fc3226e8SMarcel Cornu       notice, this list of conditions and the following disclaimer in
10fc3226e8SMarcel Cornu       the documentation and/or other materials provided with the
11fc3226e8SMarcel Cornu       distribution.
12fc3226e8SMarcel Cornu     * Neither the name of Intel Corporation nor the names of its
13fc3226e8SMarcel Cornu       contributors may be used to endorse or promote products derived
14fc3226e8SMarcel Cornu       from this software without specific prior written permission.
15fc3226e8SMarcel Cornu   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16fc3226e8SMarcel Cornu   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17fc3226e8SMarcel Cornu   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18fc3226e8SMarcel Cornu   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19fc3226e8SMarcel Cornu   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20fc3226e8SMarcel Cornu   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21fc3226e8SMarcel Cornu   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22fc3226e8SMarcel Cornu   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23fc3226e8SMarcel Cornu   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24fc3226e8SMarcel Cornu   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25fc3226e8SMarcel Cornu   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26fc3226e8SMarcel Cornu **********************************************************************/
27fc3226e8SMarcel Cornu 
28fc3226e8SMarcel Cornu #include <stdio.h>
29fc3226e8SMarcel Cornu #include <stdlib.h>
30fc3226e8SMarcel Cornu #include "isal_crypto_api.h"
31fc3226e8SMarcel Cornu #include "sha256_mb.h"
32fc3226e8SMarcel Cornu #include "multi_buffer.h"
33fc3226e8SMarcel Cornu #include "test.h"
34fc3226e8SMarcel Cornu 
35fc3226e8SMarcel Cornu #ifdef SAFE_PARAM
36fc3226e8SMarcel Cornu 
379ba6f238SMarcel Cornu static int
test_sha256_mb_init_api(void)389ba6f238SMarcel Cornu test_sha256_mb_init_api(void)
39fc3226e8SMarcel Cornu {
40*0a437795SPablo de Lara         ISAL_SHA256_HASH_CTX_MGR *mgr = NULL;
41fc3226e8SMarcel Cornu         int rc, ret = -1;
42fc3226e8SMarcel Cornu 
43*0a437795SPablo de Lara         rc = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA256_HASH_CTX_MGR));
44fc3226e8SMarcel Cornu         if ((rc != 0) || (mgr == NULL)) {
45fc3226e8SMarcel Cornu                 printf("posix_memalign failed test aborted\n");
46fc3226e8SMarcel Cornu                 return 1;
47fc3226e8SMarcel Cornu         }
48fc3226e8SMarcel Cornu         // check null mgr
49fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_init(NULL), ISAL_CRYPTO_ERR_NULL_MGR,
50fc3226e8SMarcel Cornu                           "isal_sha256_ctx_mgr_init", end_init);
51fc3226e8SMarcel Cornu 
52fc3226e8SMarcel Cornu         // check valid args
53fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_init(mgr), ISAL_CRYPTO_ERR_NONE,
54fc3226e8SMarcel Cornu                           "isal_sha256_ctx_mgr_init", end_init);
55fc3226e8SMarcel Cornu         ret = 0;
56fc3226e8SMarcel Cornu 
57fc3226e8SMarcel Cornu end_init:
58fc3226e8SMarcel Cornu         aligned_free(mgr);
59fc3226e8SMarcel Cornu 
60fc3226e8SMarcel Cornu         return ret;
61fc3226e8SMarcel Cornu }
62fc3226e8SMarcel Cornu 
639ba6f238SMarcel Cornu static int
test_sha256_mb_submit_api(void)649ba6f238SMarcel Cornu test_sha256_mb_submit_api(void)
65fc3226e8SMarcel Cornu {
66*0a437795SPablo de Lara         ISAL_SHA256_HASH_CTX_MGR *mgr = NULL;
67*0a437795SPablo de Lara         ISAL_SHA256_HASH_CTX ctx = { 0 }, *ctx_ptr = &ctx;
68fc3226e8SMarcel Cornu         int rc, ret = -1;
69fc3226e8SMarcel Cornu         const char *fn_name = "isal_sha256_ctx_mgr_submit";
70fc3226e8SMarcel Cornu         static uint8_t msg[] = "Test message";
71fc3226e8SMarcel Cornu 
72*0a437795SPablo de Lara         rc = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA256_HASH_CTX_MGR));
73fc3226e8SMarcel Cornu         if ((rc != 0) || (mgr == NULL)) {
74fc3226e8SMarcel Cornu                 printf("posix_memalign failed test aborted\n");
75fc3226e8SMarcel Cornu                 return 1;
76fc3226e8SMarcel Cornu         }
77fc3226e8SMarcel Cornu 
78fc3226e8SMarcel Cornu         rc = isal_sha256_ctx_mgr_init(mgr);
79fc3226e8SMarcel Cornu         if (rc != ISAL_CRYPTO_ERR_NONE)
80fc3226e8SMarcel Cornu                 goto end_submit;
81fc3226e8SMarcel Cornu 
82fc3226e8SMarcel Cornu         // Init context before first use
838cb7fe78SPablo de Lara         isal_hash_ctx_init(&ctx);
84fc3226e8SMarcel Cornu 
85fc3226e8SMarcel Cornu         // check null mgr
86fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(NULL, ctx_ptr, &ctx_ptr, msg,
878cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
888cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
89fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_NULL_MGR, fn_name, end_submit);
90fc3226e8SMarcel Cornu 
91fc3226e8SMarcel Cornu         // check null input ctx
92122c1779SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, NULL, &ctx_ptr, msg,
938cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
948cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
95fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_NULL_CTX, fn_name, end_submit);
96fc3226e8SMarcel Cornu 
97fc3226e8SMarcel Cornu         // check null output ctx
98122c1779SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, NULL, msg,
998cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
1008cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
101fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_NULL_CTX, fn_name, end_submit);
102fc3226e8SMarcel Cornu 
103fc3226e8SMarcel Cornu         // check null source ptr
104fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, &ctx_ptr, NULL,
1058cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
1068cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
107fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_NULL_SRC, fn_name, end_submit);
108fc3226e8SMarcel Cornu 
109fc3226e8SMarcel Cornu         // check invalid flag
110122c1779SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, &ctx_ptr, msg,
111122c1779SMarcel Cornu                                                      (uint32_t) strlen((char *) msg), 999),
112fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_INVALID_FLAGS, fn_name, end_submit);
113fc3226e8SMarcel Cornu 
114fc3226e8SMarcel Cornu         // simulate internal error (submit in progress job)
1158cb7fe78SPablo de Lara         ctx_ptr->status = ISAL_HASH_CTX_STS_PROCESSING;
116fc3226e8SMarcel Cornu 
117fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, &ctx_ptr, msg,
1188cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
1198cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
120fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_ALREADY_PROCESSING, fn_name, end_submit);
121fc3226e8SMarcel Cornu 
1228cb7fe78SPablo de Lara         CHECK_RETURN_GOTO(ctx_ptr->error, ISAL_HASH_CTX_ERROR_ALREADY_PROCESSING, fn_name,
1238cb7fe78SPablo de Lara                           end_submit);
124fc3226e8SMarcel Cornu 
125fc3226e8SMarcel Cornu         // simulate internal error (submit completed job)
1268cb7fe78SPablo de Lara         ctx_ptr->error = ISAL_HASH_CTX_ERROR_NONE;
1278cb7fe78SPablo de Lara         ctx_ptr->status = ISAL_HASH_CTX_STS_COMPLETE;
128fc3226e8SMarcel Cornu 
129fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, &ctx_ptr, msg,
1308cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
1318cb7fe78SPablo de Lara                                                      ISAL_HASH_UPDATE),
132fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_ALREADY_COMPLETED, fn_name, end_submit);
133fc3226e8SMarcel Cornu 
1348cb7fe78SPablo de Lara         CHECK_RETURN_GOTO(ctx_ptr->error, ISAL_HASH_CTX_ERROR_ALREADY_COMPLETED, fn_name,
1358cb7fe78SPablo de Lara                           end_submit);
136fc3226e8SMarcel Cornu 
137fc3226e8SMarcel Cornu         // check valid args
1388cb7fe78SPablo de Lara         isal_hash_ctx_init(&ctx);
139fc3226e8SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_submit(mgr, ctx_ptr, &ctx_ptr, msg,
1408cb7fe78SPablo de Lara                                                      (uint32_t) strlen((char *) msg),
1418cb7fe78SPablo de Lara                                                      ISAL_HASH_ENTIRE),
142fc3226e8SMarcel Cornu                           ISAL_CRYPTO_ERR_NONE, fn_name, end_submit);
143fc3226e8SMarcel Cornu         ret = 0;
144fc3226e8SMarcel Cornu 
145fc3226e8SMarcel Cornu end_submit:
146fc3226e8SMarcel Cornu         aligned_free(mgr);
147fc3226e8SMarcel Cornu 
148fc3226e8SMarcel Cornu         return ret;
149fc3226e8SMarcel Cornu }
150fc3226e8SMarcel Cornu 
1519ba6f238SMarcel Cornu static int
test_sha256_mb_flush_api(void)1529ba6f238SMarcel Cornu test_sha256_mb_flush_api(void)
153fc3226e8SMarcel Cornu {
154*0a437795SPablo de Lara         ISAL_SHA256_HASH_CTX_MGR *mgr = NULL;
155*0a437795SPablo de Lara         ISAL_SHA256_HASH_CTX ctx = { 0 }, *ctx_ptr = &ctx;
156fc3226e8SMarcel Cornu         int rc, ret = -1;
157fc3226e8SMarcel Cornu         const char *fn_name = "isal_sha256_ctx_mgr_flush";
158fc3226e8SMarcel Cornu 
159*0a437795SPablo de Lara         rc = posix_memalign((void *) &mgr, 16, sizeof(ISAL_SHA256_HASH_CTX_MGR));
160fc3226e8SMarcel Cornu         if ((rc != 0) || (mgr == NULL)) {
161fc3226e8SMarcel Cornu                 printf("posix_memalign failed test aborted\n");
162fc3226e8SMarcel Cornu                 return 1;
163fc3226e8SMarcel Cornu         }
164fc3226e8SMarcel Cornu 
165fc3226e8SMarcel Cornu         rc = isal_sha256_ctx_mgr_init(mgr);
166fc3226e8SMarcel Cornu         if (rc != ISAL_CRYPTO_ERR_NONE)
167fc3226e8SMarcel Cornu                 goto end_flush;
168fc3226e8SMarcel Cornu 
169fc3226e8SMarcel Cornu         // Init context before first use
1708cb7fe78SPablo de Lara         isal_hash_ctx_init(&ctx);
171fc3226e8SMarcel Cornu 
172fc3226e8SMarcel Cornu         // check null mgr
1739ba6f238SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_flush(NULL, &ctx_ptr), ISAL_CRYPTO_ERR_NULL_MGR,
1749ba6f238SMarcel Cornu                           fn_name, end_flush);
175fc3226e8SMarcel Cornu 
176fc3226e8SMarcel Cornu         // check null ctx
1779ba6f238SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_flush(mgr, NULL), ISAL_CRYPTO_ERR_NULL_CTX, fn_name,
1789ba6f238SMarcel Cornu                           end_flush);
179fc3226e8SMarcel Cornu 
180fc3226e8SMarcel Cornu         // check valid args
1819ba6f238SMarcel Cornu         CHECK_RETURN_GOTO(isal_sha256_ctx_mgr_flush(mgr, &ctx_ptr), ISAL_CRYPTO_ERR_NONE, fn_name,
1829ba6f238SMarcel Cornu                           end_flush);
183fc3226e8SMarcel Cornu 
184fc3226e8SMarcel Cornu         if (ctx_ptr != NULL) {
185fc3226e8SMarcel Cornu                 printf("test: %s() - expected NULL job ptr\n", fn_name);
186fc3226e8SMarcel Cornu                 goto end_flush;
187fc3226e8SMarcel Cornu         }
188fc3226e8SMarcel Cornu 
189fc3226e8SMarcel Cornu         ret = 0;
190fc3226e8SMarcel Cornu 
191fc3226e8SMarcel Cornu end_flush:
192fc3226e8SMarcel Cornu         aligned_free(mgr);
193fc3226e8SMarcel Cornu 
194fc3226e8SMarcel Cornu         return ret;
195fc3226e8SMarcel Cornu }
196fc3226e8SMarcel Cornu #endif /* SAFE_PARAM */
197fc3226e8SMarcel Cornu 
1989ba6f238SMarcel Cornu int
main(void)1999ba6f238SMarcel Cornu main(void)
200fc3226e8SMarcel Cornu {
201fc3226e8SMarcel Cornu         int fail = 0;
202fc3226e8SMarcel Cornu 
203fc3226e8SMarcel Cornu #ifdef SAFE_PARAM
204fc3226e8SMarcel Cornu         fail |= test_sha256_mb_init_api();
205fc3226e8SMarcel Cornu         fail |= test_sha256_mb_submit_api();
206fc3226e8SMarcel Cornu         fail |= test_sha256_mb_flush_api();
207fc3226e8SMarcel Cornu 
208fc3226e8SMarcel Cornu         printf(fail ? "Fail\n" : "Pass\n");
209fc3226e8SMarcel Cornu #else
210fc3226e8SMarcel Cornu         printf("Not Executed\n");
211fc3226e8SMarcel Cornu #endif
212fc3226e8SMarcel Cornu         return fail;
213fc3226e8SMarcel Cornu }
214