]> git.ipfire.org Git - thirdparty/openssl.git/blame - providers/implementations/ciphers/cipher_aes_hw_rv32i.inc
Copyright year updates
[thirdparty/openssl.git] / providers / implementations / ciphers / cipher_aes_hw_rv32i.inc
CommitLineData
5ccee69b 1/*
da1c088f 2 * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.
5ccee69b
HZZ
3 *
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
8 */
9
10/*-
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
13 */
14
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
22
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
30
31static int cipher_hw_rv32i_zknd_zkne_initkey(PROV_CIPHER_CTX *dat,
32 const unsigned char *key, size_t keylen)
33{
34 int ret;
35 PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
36 AES_KEY *ks = &adat->ks.ks;
37
38 dat->ks = ks;
39
40 if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
41 && !dat->enc) {
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;
45 } else {
46 ret = rv32i_zkne_set_encrypt_key(key, keylen * 8, ks);
47 dat->block = (block128_f) rv32i_zkne_encrypt;
48 dat->stream.cbc = NULL;
49 }
50
51 if (ret < 0) {
52 ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED);
53 return 0;
54 }
55
56 return 1;
57}
58
59static int cipher_hw_rv32i_zbkb_zknd_zkne_initkey(PROV_CIPHER_CTX *dat,
60 const unsigned char *key, size_t keylen)
61{
62 int ret;
63 PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
64 AES_KEY *ks = &adat->ks.ks;
65
66 dat->ks = ks;
67
68 if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
69 && !dat->enc) {
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;
73 } else {
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;
77 }
78
79 if (ret < 0) {
80 ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED);
81 return 0;
82 }
83
84 return 1;
85}
86
87#define PROV_CIPHER_HW_declare(mode) \
88static 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 \
92}; \
93static 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 \
97};
98#define PROV_CIPHER_HW_select(mode) \
86c69fe8 99if (RISCV_HAS_ZBKB_AND_ZKND_AND_ZKNE()) \
5ccee69b 100 return &rv32i_zbkb_zknd_zkne_##mode; \
86c69fe8 101if (RISCV_HAS_ZKND_AND_ZKNE()) \
5ccee69b 102 return &rv32i_zknd_zkne_##mode;