2 * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 * RISC-V 32 ZKND ZKNE support for AES modes ecb, cbc, ofb, cfb, ctr.
12 * This file is included by cipher_aes_hw.c
15 #define cipher_hw_rv32i_zknd_zkne_cbc ossl_cipher_hw_generic_cbc
16 #define cipher_hw_rv32i_zknd_zkne_ecb ossl_cipher_hw_generic_ecb
17 #define cipher_hw_rv32i_zknd_zkne_ofb128 ossl_cipher_hw_generic_ofb128
18 #define cipher_hw_rv32i_zknd_zkne_cfb128 ossl_cipher_hw_generic_cfb128
19 #define cipher_hw_rv32i_zknd_zkne_cfb8 ossl_cipher_hw_generic_cfb8
20 #define cipher_hw_rv32i_zknd_zkne_cfb1 ossl_cipher_hw_generic_cfb1
21 #define cipher_hw_rv32i_zknd_zkne_ctr ossl_cipher_hw_generic_ctr
23 #define cipher_hw_rv32i_zbkb_zknd_zkne_cbc ossl_cipher_hw_generic_cbc
24 #define cipher_hw_rv32i_zbkb_zknd_zkne_ecb ossl_cipher_hw_generic_ecb
25 #define cipher_hw_rv32i_zbkb_zknd_zkne_ofb128 ossl_cipher_hw_generic_ofb128
26 #define cipher_hw_rv32i_zbkb_zknd_zkne_cfb128 ossl_cipher_hw_generic_cfb128
27 #define cipher_hw_rv32i_zbkb_zknd_zkne_cfb8 ossl_cipher_hw_generic_cfb8
28 #define cipher_hw_rv32i_zbkb_zknd_zkne_cfb1 ossl_cipher_hw_generic_cfb1
29 #define cipher_hw_rv32i_zbkb_zknd_zkne_ctr ossl_cipher_hw_generic_ctr
31 static int cipher_hw_rv32i_zknd_zkne_initkey(PROV_CIPHER_CTX *dat,
32 const unsigned char *key, size_t keylen)
35 PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
36 AES_KEY *ks = &adat->ks.ks;
40 if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
42 ret = rv32i_zknd_zkne_set_decrypt_key(key, keylen * 8, ks);
43 dat->block = (block128_f) rv32i_zknd_decrypt;
44 dat->stream.cbc = NULL;
46 ret = rv32i_zkne_set_encrypt_key(key, keylen * 8, ks);
47 dat->block = (block128_f) rv32i_zkne_encrypt;
48 dat->stream.cbc = NULL;
52 ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED);
59 static int cipher_hw_rv32i_zbkb_zknd_zkne_initkey(PROV_CIPHER_CTX *dat,
60 const unsigned char *key, size_t keylen)
63 PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
64 AES_KEY *ks = &adat->ks.ks;
68 if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
70 ret = rv32i_zbkb_zknd_zkne_set_decrypt_key(key, keylen * 8, ks);
71 dat->block = (block128_f) rv32i_zknd_decrypt;
72 dat->stream.cbc = NULL;
74 ret = rv32i_zbkb_zkne_set_encrypt_key(key, keylen * 8, ks);
75 dat->block = (block128_f) rv32i_zkne_encrypt;
76 dat->stream.cbc = NULL;
80 ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED);
87 #define PROV_CIPHER_HW_declare(mode) \
88 static const PROV_CIPHER_HW rv32i_zknd_zkne_##mode = { \
89 cipher_hw_rv32i_zknd_zkne_initkey, \
90 cipher_hw_rv32i_zknd_zkne_##mode, \
91 cipher_hw_aes_copyctx \
93 static const PROV_CIPHER_HW rv32i_zbkb_zknd_zkne_##mode = { \
94 cipher_hw_rv32i_zbkb_zknd_zkne_initkey, \
95 cipher_hw_rv32i_zbkb_zknd_zkne_##mode, \
96 cipher_hw_aes_copyctx \
98 #define PROV_CIPHER_HW_select(mode) \
99 if (RISCV_HAS_ZBKB_AND_ZKND_AND_ZKNE()) \
100 return &rv32i_zbkb_zknd_zkne_##mode; \
101 if (RISCV_HAS_ZKND_AND_ZKNE()) \
102 return &rv32i_zknd_zkne_##mode;