-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
providers: cipher: aes: add riscv64 zkn support
Signed-off-by: Hongren (Zenithal) Zheng <i@zenithal.me> Tested-by: Jiatai He <jiatai2021@iscas.ac.cn> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from #18197) (cherry picked from commit ee11118)
- Loading branch information
1 parent
9243129
commit 03b825f
Showing
8 changed files
with
192 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
providers/implementations/ciphers/cipher_aes_ccm_hw_rv64i_zknd_zkne.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License 2.0 (the "License"). You may not use | ||
* this file except in compliance with the License. You can obtain a copy | ||
* in the file LICENSE in the source distribution or at | ||
* https://www.openssl.org/source/license.html | ||
*/ | ||
|
||
/*- | ||
* RISC-V 64 ZKND ZKNE support for AES CCM. | ||
* This file is included by cipher_aes_ccm_hw.c | ||
*/ | ||
|
||
static int ccm_rv64i_zknd_zkne_initkey(PROV_CCM_CTX *ctx, const unsigned char *key, | ||
size_t keylen) | ||
{ | ||
PROV_AES_CCM_CTX *actx = (PROV_AES_CCM_CTX *)ctx; | ||
|
||
AES_HW_CCM_SET_KEY_FN(rv64i_zkne_set_encrypt_key, rv64i_zkne_encrypt, | ||
NULL, NULL); | ||
return 1; | ||
} | ||
|
||
static const PROV_CCM_HW rv64i_zknd_zkne_ccm = { | ||
ccm_rv64i_zknd_zkne_initkey, | ||
ossl_ccm_generic_setiv, | ||
ossl_ccm_generic_setaad, | ||
ossl_ccm_generic_auth_encrypt, | ||
ossl_ccm_generic_auth_decrypt, | ||
ossl_ccm_generic_gettag | ||
}; | ||
|
||
const PROV_CCM_HW *ossl_prov_aes_hw_ccm(size_t keybits) | ||
{ | ||
return RV64I_ZKND_ZKNE_CAPABLE ? &rv64i_zknd_zkne_ccm : &aes_ccm; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
providers/implementations/ciphers/cipher_aes_gcm_hw_rv64i_zknd_zkne.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License 2.0 (the "License"). You may not use | ||
* this file except in compliance with the License. You can obtain a copy | ||
* in the file LICENSE in the source distribution or at | ||
* https://www.openssl.org/source/license.html | ||
*/ | ||
|
||
/*- | ||
* RISC-V 64 ZKND ZKNE support for AES GCM. | ||
* This file is included by cipher_aes_gcm_hw.c | ||
*/ | ||
|
||
static int rv64i_zknd_zkne_gcm_initkey(PROV_GCM_CTX *ctx, const unsigned char *key, | ||
size_t keylen) | ||
{ | ||
PROV_AES_GCM_CTX *actx = (PROV_AES_GCM_CTX *)ctx; | ||
AES_KEY *ks = &actx->ks.ks; | ||
GCM_HW_SET_KEY_CTR_FN(ks, rv64i_zkne_set_encrypt_key, rv64i_zkne_encrypt, | ||
NULL); | ||
return 1; | ||
} | ||
|
||
static const PROV_GCM_HW rv64i_zknd_zkne_gcm = { | ||
rv64i_zknd_zkne_gcm_initkey, | ||
ossl_gcm_setiv, | ||
ossl_gcm_aad_update, | ||
generic_aes_gcm_cipher_update, | ||
ossl_gcm_cipher_final, | ||
ossl_gcm_one_shot | ||
}; | ||
|
||
const PROV_GCM_HW *ossl_prov_aes_hw_gcm(size_t keybits) | ||
{ | ||
if (RV64I_ZKND_ZKNE_CAPABLE) | ||
return &rv64i_zknd_zkne_gcm; | ||
else | ||
return &aes_gcm; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
providers/implementations/ciphers/cipher_aes_hw_rv64i_zknd_zkne.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License 2.0 (the "License"). You may not use | ||
* this file except in compliance with the License. You can obtain a copy | ||
* in the file LICENSE in the source distribution or at | ||
* https://www.openssl.org/source/license.html | ||
*/ | ||
|
||
/*- | ||
* RISC-V 64 ZKND ZKNE support for AES modes ecb, cbc, ofb, cfb, ctr. | ||
* This file is included by cipher_aes_hw.c | ||
*/ | ||
|
||
#define cipher_hw_rv64i_zknd_zkne_cbc ossl_cipher_hw_generic_cbc | ||
#define cipher_hw_rv64i_zknd_zkne_ecb ossl_cipher_hw_generic_ecb | ||
#define cipher_hw_rv64i_zknd_zkne_ofb128 ossl_cipher_hw_generic_ofb128 | ||
#define cipher_hw_rv64i_zknd_zkne_cfb128 ossl_cipher_hw_generic_cfb128 | ||
#define cipher_hw_rv64i_zknd_zkne_cfb8 ossl_cipher_hw_generic_cfb8 | ||
#define cipher_hw_rv64i_zknd_zkne_cfb1 ossl_cipher_hw_generic_cfb1 | ||
#define cipher_hw_rv64i_zknd_zkne_ctr ossl_cipher_hw_generic_ctr | ||
|
||
static int cipher_hw_rv64i_zknd_zkne_initkey(PROV_CIPHER_CTX *dat, | ||
const unsigned char *key, size_t keylen) | ||
{ | ||
int ret; | ||
PROV_AES_CTX *adat = (PROV_AES_CTX *)dat; | ||
AES_KEY *ks = &adat->ks.ks; | ||
|
||
dat->ks = ks; | ||
|
||
if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE) | ||
&& !dat->enc) { | ||
ret = rv64i_zknd_set_decrypt_key(key, keylen * 8, ks); | ||
dat->block = (block128_f) rv64i_zknd_decrypt; | ||
dat->stream.cbc = NULL; | ||
} else { | ||
ret = rv64i_zkne_set_encrypt_key(key, keylen * 8, ks); | ||
dat->block = (block128_f) rv64i_zkne_encrypt; | ||
dat->stream.cbc = NULL; | ||
} | ||
|
||
if (ret < 0) { | ||
ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED); | ||
return 0; | ||
} | ||
|
||
return 1; | ||
} | ||
|
||
#define PROV_CIPHER_HW_declare(mode) \ | ||
static const PROV_CIPHER_HW rv64i_zknd_zkne_##mode = { \ | ||
cipher_hw_rv64i_zknd_zkne_initkey, \ | ||
cipher_hw_rv64i_zknd_zkne_##mode, \ | ||
cipher_hw_aes_copyctx \ | ||
}; | ||
#define PROV_CIPHER_HW_select(mode) \ | ||
if (RV64I_ZKND_ZKNE_CAPABLE) \ | ||
return &rv64i_zknd_zkne_##mode; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters