2 * Copyright 2001-2019 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 * Fujitsu SPARC64 X support for camellia modes.
12 * This file is included by cipher_camellia_hw.c
15 static int cipher_hw_camellia_t4_initkey(PROV_CIPHER_CTX *dat,
16 const unsigned char *key,
19 int ret = 0, bits, mode = dat->mode;
20 PROV_CAMELLIA_CTX *adat = (PROV_CAMELLIA_CTX *)dat;
21 CAMELLIA_KEY *ks = &adat->ks.ks;
26 cmll_t4_set_key(key, bits, ks);
28 if (dat->enc || (mode != EVP_CIPH_ECB_MODE && mode != EVP_CIPH_CBC_MODE)) {
29 dat->block = (block128_f) cmll_t4_encrypt;
32 if (mode == EVP_CIPH_CBC_MODE)
33 dat->stream.cbc = (cbc128_f) cmll128_t4_cbc_encrypt;
34 else if (mode == EVP_CIPH_CTR_MODE)
35 dat->stream.ctr = (ctr128_f) cmll128_t4_ctr32_encrypt;
37 dat->stream.cbc = NULL;
41 if (mode == EVP_CIPH_CBC_MODE)
42 dat->stream.cbc = (cbc128_f) cmll256_t4_cbc_encrypt;
43 else if (mode == EVP_CIPH_CTR_MODE)
44 dat->stream.ctr = (ctr128_f) cmll256_t4_ctr32_encrypt;
46 dat->stream.cbc = NULL;
53 dat->block = (block128_f) cmll_t4_decrypt;
56 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
57 (cbc128_f) cmll128_t4_cbc_decrypt : NULL;
61 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
62 (cbc128_f) cmll256_t4_cbc_decrypt : NULL;
70 ERR_raise(ERR_LIB_PROV, EVP_R_CAMELLIA_KEY_SETUP_FAILED);
76 #define PROV_CIPHER_HW_declare(mode) \
77 static const PROV_CIPHER_HW t4_camellia_##mode = { \
78 cipher_hw_camellia_t4_initkey, \
79 cipher_hw_generic_##mode \
81 #define PROV_CIPHER_HW_select(mode) \
82 if (SPARC_CMLL_CAPABLE) \
83 return &t4_camellia_##mode;