mirror of
https://github.com/openssl/openssl.git
synced 2025-02-11 14:22:43 +08:00
This patch implements the SM4 optimization for ARM processor, using SM4 HW instruction, which is an optional feature of crypto extension for aarch64 V8. Tested on some modern ARM micro-architectures with SM4 support, the performance uplift can be observed around 8X~40X over existing C implementation in openssl. Algorithms that can be parallelized (like CTR, ECB, CBC decryption) are on higher end, with algorithm like CBC encryption on lower end (due to inter-block dependency) Perf data on Yitian-710 2.75GHz hardware, before and after optimization: Before: type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes SM4-CTR 105787.80k 107837.87k 108380.84k 108462.08k 108549.46k 108554.92k SM4-ECB 111924.58k 118173.76k 119776.00k 120093.70k 120264.02k 120274.94k SM4-CBC 106428.09k 109190.98k 109674.33k 109774.51k 109827.41k 109827.41k After (7.4x - 36.6x faster): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes SM4-CTR 781979.02k 2432994.28k 3437753.86k 3834177.88k 3963715.58k 3974556.33k SM4-ECB 937590.69k 2941689.02k 3945751.81k 4328655.87k 4459181.40k 4468692.31k SM4-CBC 890639.88k 1027746.58k 1050621.78k 1056696.66k 1058613.93k 1058701.31k Signed-off-by: Daniel Hu <Daniel.Hu@arm.com> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17455) |
||
---|---|---|
.. | ||
__DECC_INCLUDE_EPILOGUE.H | ||
__DECC_INCLUDE_PROLOGUE.H | ||
aes_platform.h | ||
aria.h | ||
asn1_dsa.h | ||
asn1.h | ||
asn1err.h | ||
async.h | ||
asyncerr.h | ||
bioerr.h | ||
bn_conf.h.in | ||
bn_dh.h | ||
bn_srp.h | ||
bn.h | ||
bnerr.h | ||
buffererr.h | ||
chacha.h | ||
cmll_platform.h | ||
cmperr.h | ||
cmserr.h | ||
comperr.h | ||
conferr.h | ||
crmferr.h | ||
cryptlib.h | ||
cryptoerr.h | ||
cterr.h | ||
ctype.h | ||
decoder.h | ||
decodererr.h | ||
des_platform.h | ||
dh.h | ||
dherr.h | ||
dsa.h | ||
dsaerr.h | ||
dso_conf.h.in | ||
ec.h | ||
ecerr.h | ||
ecx.h | ||
encoder.h | ||
encodererr.h | ||
engine.h | ||
engineerr.h | ||
err.h | ||
ess.h | ||
esserr.h | ||
evp.h | ||
evperr.h | ||
httperr.h | ||
lhash.h | ||
md32_common.h | ||
modes.h | ||
objects.h | ||
objectserr.h | ||
ocsperr.h | ||
pem.h | ||
pemerr.h | ||
pkcs7.h | ||
pkcs7err.h | ||
pkcs12err.h | ||
poly1305.h | ||
ppc_arch.h | ||
punycode.h | ||
rand_pool.h | ||
rand.h | ||
randerr.h | ||
rsa.h | ||
rsaerr.h | ||
security_bits.h | ||
sha.h | ||
siphash.h | ||
siv.h | ||
sm2.h | ||
sm2err.h | ||
sm4_platform.h | ||
sm4.h | ||
sparc_arch.h | ||
sparse_array.h | ||
store.h | ||
storeerr.h | ||
tserr.h | ||
types.h | ||
uierr.h | ||
x509.h | ||
x509err.h | ||
x509v3err.h |