From fa5bf0e3a8ce292cad5eb24ee136a5ee136016cd Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Mon, 22 Apr 2024 22:59:02 +0800 Subject: [PATCH] Add sm4_cl speed test --- CMakeLists.txt | 1 + tests/sm4_cltest.c | 62 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35d576d51..9455c4f0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ include_directories(include) option(ENABLE_SM4_TBOX "Enable SM4 merged S-Box implementation" ON) option(ENABLE_SM4_AARCH64 "Enable SM4 AARCH64 assembly implementation" OFF) option(ENABLE_SM4_CTR_AESNI_AVX "Enable SM4 CTR AESNI+AVX assembly implementation" OFF) +option(ENABLE_SM4_CL "Enable SM4 OpenCL" OFF) option(ENABLE_SM4_ECB "Enable SM4 ECB mode" OFF) option(ENABLE_SM4_OFB "Enable SM4 OFB mode" OFF) diff --git a/tests/sm4_cltest.c b/tests/sm4_cltest.c index f35d9b275..34e81a934 100644 --- a/tests/sm4_cltest.c +++ b/tests/sm4_cltest.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -47,7 +48,6 @@ int test_sm4_cl(void) for (i = 0; i < nblocks; i++) { memcpy(buf + 16 * i, plaintext, 16); } - format_bytes(stderr, 0, 0, "in", buf, nblocks * 16); if (sm4_cl_set_encrypt_key(&ctx, key) != 1) { error_print(); @@ -74,15 +74,69 @@ int test_sm4_cl(void) return ret; } -static int test_sm4_cl_ctr(void) + +int test_sm4_cl_speed(void) { - return 1; + const uint8_t key[16] = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + }; + const uint8_t plaintext[16] = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + }; + const uint8_t ciphertext[16] = { + 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e, + 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46, + }; + + int ret = -1; + SM4_CL_CTX ctx; + size_t nblocks = 1024*1024; + uint8_t *buf = NULL; + clock_t start, end; + double seconds; + size_t i; + + + if (!(buf = (uint8_t *)malloc(16 * nblocks))) { + error_print(); + return -1; + } + for (i = 0; i < nblocks; i++) { + memcpy(buf + 16 * i, plaintext, 16); + } + + if (sm4_cl_set_encrypt_key(&ctx, key) != 1) { + error_print(); + goto end; + } + + start = clock(); + if (sm4_cl_encrypt(&ctx, buf, nblocks, buf) != 1) { + error_print(); + goto end; + } + end = clock(); + + seconds = (double)(end - start)/CLOCKS_PER_SEC; + + fprintf(stderr, "sm4_cl_encrypt: %f-MiB per seconds\n", 16/seconds); + + + + + ret = 1; +end: + if (buf) free(buf); + sm4_cl_cleanup(&ctx); + return ret; } int main(void) { if (test_sm4_cl() != 1) goto err; - if (test_sm4_cl_ctr() != 1) goto err; + if (test_sm4_cl_speed() != 1) goto err; printf("%s all tests passed\n", __FILE__); return 0; err: