diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2023-01-04 19:41:24 +0200 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2023-01-04 19:48:52 +0200 |
commit | 30c9a1d101b45908a17c68fa50f4cdf9bd113792 (patch) | |
tree | b076ba496430fe9ccb26a23914e94f200d064fe9 /cipher | |
parent | 86db4b02c6e5fd41ae958fb5e1fcf3e296a820ad (diff) | |
download | libgcrypt-30c9a1d101b45908a17c68fa50f4cdf9bd113792.tar.gz |
sm4: add missing OCB 16-way GFNI-AVX512 path
* cipher/sm4.c (_gcry_sm4_ocb_crypt) [USE_GFNI_AVX512]: Add 16-way
GFNI-AVX512 handling.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher')
-rw-r--r-- | cipher/sm4.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/cipher/sm4.c b/cipher/sm4.c index 0e89be78..b0402b64 100644 --- a/cipher/sm4.c +++ b/cipher/sm4.c @@ -1663,6 +1663,26 @@ _gcry_sm4_ocb_crypt (gcry_cipher_hd_t c, void *outbuf_arg, inbuf += 32 * 16; } } + + if (nblocks >= 16) + { + l = bulk_ocb_prepare_L_pointers_array_blk16 (c, Ls, blkn); + + /* Process data in 16 block chunks. */ + blkn += 16; + *l = (uintptr_t)(void *)ocb_get_l(c, blkn - blkn % 16); + + if (encrypt) + _gcry_sm4_gfni_avx512_ocb_enc(ctx->rkey_enc, outbuf, inbuf, + c->u_iv.iv, c->u_ctr.ctr, Ls); + else + _gcry_sm4_gfni_avx512_ocb_dec(ctx->rkey_dec, outbuf, inbuf, + c->u_iv.iv, c->u_ctr.ctr, Ls); + + nblocks -= 16; + outbuf += 16 * 16; + inbuf += 16 * 16; + } } #endif |