mirror of
https://github.com/openssl/openssl.git
synced 2024-12-09 05:51:54 +08:00
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 <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/20499)
This commit is contained in:
parent
6ec3d3125f
commit
fdfa63dfd6
@ -12,18 +12,42 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cipher_sm4_ccm.h"
|
#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,
|
static int ccm_sm4_initkey(PROV_CCM_CTX *ctx,
|
||||||
const unsigned char *key, size_t keylen)
|
const unsigned char *key, size_t keylen)
|
||||||
{
|
{
|
||||||
PROV_SM4_CCM_CTX *actx = (PROV_SM4_CCM_CTX *)ctx;
|
PROV_SM4_CCM_CTX *actx = (PROV_SM4_CCM_CTX *)ctx;
|
||||||
|
|
||||||
ossl_sm4_set_key(key, &actx->ks.ks);
|
#ifdef HWSM4_CAPABLE
|
||||||
CRYPTO_ccm128_init(&ctx->ccm_ctx, ctx->m, ctx->l, &actx->ks.ks,
|
if (HWSM4_CAPABLE) {
|
||||||
(block128_f)ossl_sm4_encrypt);
|
SM4_HW_CCM_SET_KEY_FN(HWSM4_set_encrypt_key, HWSM4_encrypt, NULL, NULL);
|
||||||
ctx->str = NULL;
|
} else
|
||||||
ctx->key_set = 1;
|
#endif /* HWSM4_CAPABLE */
|
||||||
return 1;
|
|
||||||
|
#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 = {
|
static const PROV_CCM_HW ccm_sm4 = {
|
||||||
|
Loading…
Reference in New Issue
Block a user