2 * Copyright 2001-2021 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 * Camellia low level APIs are deprecated for public use, but still ok for
14 #include "internal/deprecated.h"
16 #include <openssl/camellia.h>
17 #include <openssl/proverr.h>
18 #include "cipher_camellia.h"
20 static int cipher_hw_camellia_initkey(PROV_CIPHER_CTX
*dat
,
21 const unsigned char *key
, size_t keylen
)
23 int ret
, mode
= dat
->mode
;
24 PROV_CAMELLIA_CTX
*adat
= (PROV_CAMELLIA_CTX
*)dat
;
25 CAMELLIA_KEY
*ks
= &adat
->ks
.ks
;
28 ret
= Camellia_set_key(key
, keylen
* 8, ks
);
30 ERR_raise(ERR_LIB_PROV
, PROV_R_KEY_SETUP_FAILED
);
33 if (dat
->enc
|| (mode
!= EVP_CIPH_ECB_MODE
&& mode
!= EVP_CIPH_CBC_MODE
)) {
34 dat
->block
= (block128_f
) Camellia_encrypt
;
35 dat
->stream
.cbc
= mode
== EVP_CIPH_CBC_MODE
?
36 (cbc128_f
) Camellia_cbc_encrypt
: NULL
;
38 dat
->block
= (block128_f
) Camellia_decrypt
;
39 dat
->stream
.cbc
= mode
== EVP_CIPH_CBC_MODE
?
40 (cbc128_f
) Camellia_cbc_encrypt
: NULL
;
45 IMPLEMENT_CIPHER_HW_COPYCTX(cipher_hw_camellia_copyctx
, PROV_CAMELLIA_CTX
)
47 # if defined(SPARC_CMLL_CAPABLE)
48 # include "cipher_camellia_hw_t4.inc"
50 /* The generic case */
51 # define PROV_CIPHER_HW_declare(mode)
52 # define PROV_CIPHER_HW_select(mode)
53 # endif /* SPARC_CMLL_CAPABLE */
55 #define PROV_CIPHER_HW_camellia_mode(mode) \
56 static const PROV_CIPHER_HW camellia_##mode = { \
57 cipher_hw_camellia_initkey, \
58 ossl_cipher_hw_generic_##mode, \
59 cipher_hw_camellia_copyctx \
61 PROV_CIPHER_HW_declare(mode) \
62 const PROV_CIPHER_HW *ossl_prov_cipher_hw_camellia_##mode(size_t keybits) \
64 PROV_CIPHER_HW_select(mode) \
65 return &camellia_##mode; \
68 PROV_CIPHER_HW_camellia_mode(cbc
)
69 PROV_CIPHER_HW_camellia_mode(ecb
)
70 PROV_CIPHER_HW_camellia_mode(ofb128
)
71 PROV_CIPHER_HW_camellia_mode(cfb128
)
72 PROV_CIPHER_HW_camellia_mode(cfb1
)
73 PROV_CIPHER_HW_camellia_mode(cfb8
)
74 PROV_CIPHER_HW_camellia_mode(ctr
)