summaryrefslogtreecommitdiff
path: root/providers/implementations/ciphers/cipher_aes_ocb_hw.c
diff options
context:
space:
mode:
authorHongren (Zenithal) Zheng <i@zenithal.me>2022-05-14 00:01:11 +0800
committerPauli <pauli@openssl.org>2022-09-05 10:20:30 +1000
commit5ccee69b1384fa9377986a6f7730e0d9a372b42b (patch)
treeb354928fcafbffc0799b4633aeb1892f181f9aa5 /providers/implementations/ciphers/cipher_aes_ocb_hw.c
parentcbb15b31b98f47276cf9e87453831d96274baf66 (diff)
downloadopenssl-new-5ccee69b1384fa9377986a6f7730e0d9a372b42b.tar.gz
provider: cipher: aes: add riscv32 zkn (zbkb) support
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/18308)
Diffstat (limited to 'providers/implementations/ciphers/cipher_aes_ocb_hw.c')
-rw-r--r--providers/implementations/ciphers/cipher_aes_ocb_hw.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/providers/implementations/ciphers/cipher_aes_ocb_hw.c b/providers/implementations/ciphers/cipher_aes_ocb_hw.c
index c7824521a1..5b93d2b717 100644
--- a/providers/implementations/ciphers/cipher_aes_ocb_hw.c
+++ b/providers/implementations/ciphers/cipher_aes_ocb_hw.c
@@ -124,6 +124,44 @@ static const PROV_CIPHER_HW aes_rv64i_zknd_zkne_ocb = { \
# define PROV_CIPHER_HW_select() \
if (RV64I_ZKND_ZKNE_CAPABLE) \
return &aes_rv64i_zknd_zkne_ocb;
+#elif defined(RV32I_ZBKB_ZKND_ZKNE_CAPABLE) && defined(RV32I_ZKND_ZKNE_CAPABLE)
+
+static int cipher_hw_aes_ocb_rv32i_zknd_zkne_initkey(PROV_CIPHER_CTX *vctx,
+ const unsigned char *key,
+ size_t keylen)
+{
+ PROV_AES_OCB_CTX *ctx = (PROV_AES_OCB_CTX *)vctx;
+
+ OCB_SET_KEY_FN(rv32i_zkne_set_encrypt_key, rv32i_zknd_zkne_set_decrypt_key,
+ rv32i_zkne_encrypt, rv32i_zknd_decrypt, NULL, NULL);
+ return 1;
+}
+
+static int cipher_hw_aes_ocb_rv32i_zbkb_zknd_zkne_initkey(PROV_CIPHER_CTX *vctx,
+ const unsigned char *key,
+ size_t keylen)
+{
+ PROV_AES_OCB_CTX *ctx = (PROV_AES_OCB_CTX *)vctx;
+
+ OCB_SET_KEY_FN(rv32i_zbkb_zkne_set_encrypt_key, rv32i_zbkb_zknd_zkne_set_decrypt_key,
+ rv32i_zkne_encrypt, rv32i_zknd_decrypt, NULL, NULL);
+ return 1;
+}
+
+# define PROV_CIPHER_HW_declare() \
+static const PROV_CIPHER_HW aes_rv32i_zknd_zkne_ocb = { \
+ cipher_hw_aes_ocb_rv32i_zknd_zkne_initkey, \
+ NULL \
+}; \
+static const PROV_CIPHER_HW aes_rv32i_zbkb_zknd_zkne_ocb = { \
+ cipher_hw_aes_ocb_rv32i_zbkb_zknd_zkne_initkey, \
+ NULL \
+};
+# define PROV_CIPHER_HW_select() \
+ if (RV32I_ZBKB_ZKND_ZKNE_CAPABLE) \
+ return &aes_rv32i_zbkb_zknd_zkne_ocb; \
+ if (RV32I_ZKND_ZKNE_CAPABLE) \
+ return &aes_rv32i_zknd_zkne_ocb;
#else
# define PROV_CIPHER_HW_declare()
# define PROV_CIPHER_HW_select()