diff options
author | Tianjia Zhang <tianjia.zhang@linux.alibaba.com> | 2022-07-28 16:26:54 +0800 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2022-07-31 18:03:36 +0300 |
commit | 8287dea8379fa9e43dc331c6bd444dd25a962e4b (patch) | |
tree | 22d8f1a243911d698c1dd2fb680ef53ad0774947 /cipher/sm4.c | |
parent | db5136c4d9331c001bbe91cfe6625ae7738f8575 (diff) | |
download | libgcrypt-8287dea8379fa9e43dc331c6bd444dd25a962e4b.tar.gz |
sm4: add ARMv8 CE accelerated implementation for XTS mode
* cipher/sm4-armv8-aarch64-ce.S (_gcry_sm4_armv8_ce_xts_crypt): New.
* cipher/sm4.c (_gcry_sm4_armv8_ce_xts_crypt): New.
(_gcry_sm4_xts_crypt) [USE_ARM_CE]: Add ARMv8 CE implementation for XTS.
--
Benchmark on T-Head Yitian-710 2.75 GHz:
Before:
SM4 | nanosecs/byte mebibytes/sec cycles/byte auto Mhz
XTS enc | 0.373 ns/B 2560 MiB/s 1.02 c/B 2749
XTS dec | 0.372 ns/B 2562 MiB/s 1.02 c/B 2750
After (1.18x faster):
SM4 | nanosecs/byte mebibytes/sec cycles/byte auto Mhz
XTS enc | 0.314 ns/B 3038 MiB/s 0.863 c/B 2749
XTS dec | 0.314 ns/B 3037 MiB/s 0.863 c/B 2749
Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Diffstat (limited to 'cipher/sm4.c')
-rw-r--r-- | cipher/sm4.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/cipher/sm4.c b/cipher/sm4.c index b5d4691d..4cac3b6c 100644 --- a/cipher/sm4.c +++ b/cipher/sm4.c @@ -1,6 +1,6 @@ /* sm4.c - SM4 Cipher Algorithm * Copyright (C) 2020 Alibaba Group. - * Copyright (C) 2020 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> + * Copyright (C) 2020-2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> * Copyright (C) 2020-2022 Jussi Kivilinna <jussi.kivilinna@iki.fi> * * This file is part of Libgcrypt. @@ -539,6 +539,11 @@ extern void _gcry_sm4_armv8_ce_cfb_dec(const u32 *rk_enc, byte *out, byte *iv, size_t nblocks); +extern void _gcry_sm4_armv8_ce_xts_crypt(const u32 *rk, byte *out, + const byte *in, + byte *tweak, + size_t nblocks); + extern void _gcry_sm4_armv8_ce_crypt_blk1_8(const u32 *rk, byte *out, const byte *in, size_t num_blocks); @@ -1510,6 +1515,17 @@ _gcry_sm4_xts_crypt (void *context, unsigned char *tweak, void *outbuf_arg, const unsigned char *inbuf = inbuf_arg; int burn_stack_depth = 0; +#ifdef USE_ARM_CE + if (ctx->use_arm_ce) + { + /* Process all blocks at a time. */ + _gcry_sm4_armv8_ce_xts_crypt(encrypt ? ctx->rkey_enc : ctx->rkey_dec, + outbuf, inbuf, tweak, nblocks); + + nblocks = 0; + } +#endif + /* Process remaining blocks. */ if (nblocks) { |