From fdfa63dfd6f1e6d7aff175fba56486a0cf79713f Mon Sep 17 00:00:00 2001 From: zhangzhilei Date: Sun, 12 Mar 2023 14:53:01 +0800 Subject: enable hardware acceleration for sm4-ccm benchmark data test on KunPeng920 before: type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes SM4-CCM 20401.16k 33739.97k 40476.08k 42326.70k 43373.91k 43220.99k after: type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes SM4-CCM 8050.11k 13011.29k 15407.10k 16147.80k 16378.54k 16449.76k Reviewed-by: Paul Dale Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/20499) --- .../implementations/ciphers/cipher_sm4_ccm_hw.c | 36 ++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/providers/implementations/ciphers/cipher_sm4_ccm_hw.c b/providers/implementations/ciphers/cipher_sm4_ccm_hw.c index 791daf3e46..468c1f3b8b 100644 --- a/providers/implementations/ciphers/cipher_sm4_ccm_hw.c +++ b/providers/implementations/ciphers/cipher_sm4_ccm_hw.c @@ -12,18 +12,42 @@ */ #include "cipher_sm4_ccm.h" +#include "crypto/sm4_platform.h" + +#define SM4_HW_CCM_SET_KEY_FN(fn_set_enc_key, fn_blk, fn_ccm_enc, fn_ccm_dec) \ + fn_set_enc_key(key, &actx->ks.ks); \ + CRYPTO_ccm128_init(&ctx->ccm_ctx, ctx->m, ctx->l, &actx->ks.ks, \ + (block128_f)fn_blk); \ + ctx->str = ctx->enc ? (ccm128_f)fn_ccm_enc : (ccm128_f)fn_ccm_dec; \ + ctx->key_set = 1; static int ccm_sm4_initkey(PROV_CCM_CTX *ctx, const unsigned char *key, size_t keylen) { PROV_SM4_CCM_CTX *actx = (PROV_SM4_CCM_CTX *)ctx; - ossl_sm4_set_key(key, &actx->ks.ks); - CRYPTO_ccm128_init(&ctx->ccm_ctx, ctx->m, ctx->l, &actx->ks.ks, - (block128_f)ossl_sm4_encrypt); - ctx->str = NULL; - ctx->key_set = 1; - return 1; +#ifdef HWSM4_CAPABLE + if (HWSM4_CAPABLE) { + SM4_HW_CCM_SET_KEY_FN(HWSM4_set_encrypt_key, HWSM4_encrypt, NULL, NULL); + } else +#endif /* HWSM4_CAPABLE */ + +#ifdef VPSM4_EX_CAPABLE + if (VPSM4_EX_CAPABLE) { + SM4_HW_CCM_SET_KEY_FN(vpsm4_ex_set_encrypt_key, vpsm4_ex_encrypt, NULL, + NULL); + } else +#endif /* VPSM4_EX_CAPABLE */ + +#ifdef VPSM4_CAPABLE + if (VPSM4_CAPABLE) { + SM4_HW_CCM_SET_KEY_FN(vpsm4_set_encrypt_key, vpsm4_encrypt, NULL, NULL); + } else +#endif /* VPSM4_CAPABLE */ + { + SM4_HW_CCM_SET_KEY_FN(ossl_sm4_set_key, ossl_sm4_encrypt, NULL, NULL); + } + return 1; } static const PROV_CCM_HW ccm_sm4 = { -- cgit v1.2.3