Returned a NULL `MD5_HASH_CTX`
Closed this issue · 3 comments
leiless commented
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <assert.h>
#include <isa-l_crypto.h>
int main() {
// Taken from https://github.com/intel/isa-l_crypto/blob/master/md5_mb/md5_mb_test.c#L87-L131
MD5_HASH_CTX_MGR *mgr = NULL;
MD5_HASH_CTX ctxpool[1], *ctx = NULL;
uint32_t i = 0;
int ret;
const char *msgs[] = {
"Test vector from febooti.com",
};
ret = posix_memalign((void *) &mgr, 16, sizeof(MD5_HASH_CTX_MGR));
if ((ret != 0) || (mgr == NULL)) {
printf("posix_memalign failed test aborted\n");
return 1;
}
md5_ctx_mgr_init(mgr);
hash_ctx_init(&ctxpool[i]);
ctxpool[i].user_data = (void *) ((uint64_t) i);
ctx = md5_ctx_mgr_submit(mgr,
&ctxpool[i], msgs[i],
strlen((char *) msgs[i]), HASH_ENTIRE);
assert(ctx != NULL);
free(mgr);
return 0;
}
$ gcc -Wall main.c -lisal_crypto && ./a.out
a.out: main.c:31: main: Assertion `ctx != NULL' failed.
[1] 691171 abort (core dumped) ./a.out
leiless commented
The above code is taken from https://github.com/intel/isa-l_crypto/blob/master/md5_mb/md5_mb_test.c#L87-L131
I don't know why it failed to run. certainly, something is wrong with me.
FYI, make -j$(nproc) test
was all passed.
$ make -j$(nproc) check
PASS: md5_mb/md5_mb_test
PASS: sha256_mb/sha256_mb_test
PASS: sha1_mb/sha1_mb_test
PASS: aes/cbc_std_vectors_test
PASS: sha512_mb/sha512_mb_test
PASS: sm3_mb/sm3_ref_test
PASS: aes/gcm_std_vectors_test
PASS: aes/gcm_nt_std_vectors_test
PASS: aes/xts_128_test
PASS: aes/xts_256_test
PASS: aes/xts_128_expanded_key_test
PASS: aes/xts_256_expanded_key_test
PASS: sha256_mb/sha256_mb_flush_test
PASS: sha1_mb/sha1_mb_flush_test
PASS: rolling_hash/rolling_hash2_test
PASS: md5_mb/md5_mb_rand_test
PASS: md5_mb/md5_mb_rand_update_test
PASS: sha512_mb/sha512_mb_rand_update_test
PASS: sha1_mb/sha1_mb_rand_update_test
PASS: sha1_mb/sha1_mb_rand_test
PASS: sha256_mb/sha256_mb_rand_test
PASS: sha512_mb/sha512_mb_rand_test
PASS: sha256_mb/sha256_mb_rand_update_test
PASS: mh_sha1/mh_sha1_test
PASS: mh_sha256/mh_sha256_test
============================================================================
Testsuite summary for libisal_crypto 2.24.0
============================================================================
# TOTAL: 25
# PASS: 25
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
leiless commented
Solved, I forget to call md5_ctx_mgr_flush()
after submit.
leiless commented
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <assert.h>
#include <isa-l_crypto.h>
#include <arpa/inet.h>
int main(void) {
MD5_HASH_CTX_MGR *mgr = NULL;
int e = posix_memalign((void *) &mgr, 16, sizeof *mgr);
assert(e == 0);
assert(mgr != NULL);
md5_ctx_mgr_init(mgr);
MD5_HASH_CTX job;
hash_ctx_init(&job);
const char *msg = "Test vector from febooti.com";
uint32_t len = strlen(msg);
MD5_HASH_CTX *ctx = md5_ctx_mgr_submit(mgr, &job, msg, len, HASH_ENTIRE);
assert(ctx == NULL || ctx->error == HASH_CTX_ERROR_NONE);
ctx = md5_ctx_mgr_flush(mgr);
if (ctx != NULL && ctx->error == HASH_CTX_ERROR_NONE) {
uint32_t *p = job.job.result_digest;
printf("%x%x%x%x\n",
htonl(p[0]),
htonl(p[1]),
htonl(p[2]),
htonl(p[3])
);
} else {
printf("something is bad.\n");
}
free(mgr);
return 0;
}