From c0d47492a77e67ce49cf3c538bdaf82ca90367cb Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 19 Dec 2019 13:31:29 +0100 Subject: [PATCH] CRYPTO: split cipher_platform.h into algorithm specific headers aes_platform.h cmll_platform.h des_platform.h To make this possible, we must also define DES_ASM and CMLL_ASM to indicate that we have the necessary internal support. Reviewed-by: Shane Lontis Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/10662) --- crypto/camellia/build.info | 2 + crypto/des/build.info | 3 ++ .../{ciphermode_platform.h => aes_platform.h} | 51 ++----------------- include/crypto/cmll_platform.h | 51 +++++++++++++++++++ include/crypto/des_platform.h | 35 +++++++++++++ util/fix-includes.sed | 2 +- 6 files changed, 95 insertions(+), 49 deletions(-) rename include/crypto/{ciphermode_platform.h => aes_platform.h} (89%) create mode 100644 include/crypto/cmll_platform.h create mode 100644 include/crypto/des_platform.h diff --git a/crypto/camellia/build.info b/crypto/camellia/build.info index c10babc726..02f9afeb80 100644 --- a/crypto/camellia/build.info +++ b/crypto/camellia/build.info @@ -10,10 +10,12 @@ IF[{- !$disabled{asm} -}] # appropriate one IF[$CMLLASM_{- $target{asm_arch} -}] $CMLLASM=$CMLLASM_{- $target{asm_arch} -} + $CMLLDEF=CMLL_ASM ENDIF ENDIF SOURCE[../../libcrypto]=cmll_ecb.c cmll_ofb.c cmll_cfb.c cmll_ctr.c $CMLLASM +DEFINE[../../libcrypto]=$CMLLDEF GENERATE[cmll-x86.s]=asm/cmll-x86.pl DEPEND[cmll-x86.s]=../perlasm/x86asm.pl diff --git a/crypto/des/build.info b/crypto/des/build.info index b1c1e624c2..40e874823c 100644 --- a/crypto/des/build.info +++ b/crypto/des/build.info @@ -9,6 +9,7 @@ IF[{- !$disabled{asm} -}] # appropriate one IF[$DESASM_{- $target{asm_arch} -}] $DESASM=$DESASM_{- $target{asm_arch} -} + $DESDEF=DES_ASM ENDIF ENDIF @@ -21,6 +22,8 @@ SOURCE[../../libcrypto]=$COMMON\ str2key.c pcbc_enc.c qud_cksm.c rand_key.c \ fcrypt.c xcbc_enc.c cbc_cksm.c SOURCE[../../providers/libfips.a]=$COMMON +DEFINE[../../libcrypto]=$DESDEF +DEFINE[../../providers/libfips.a]=$DESDEF GENERATE[des_enc-sparc.S]=asm/des_enc.m4 GENERATE[dest4-sparcv9.S]=asm/dest4-sparcv9.pl diff --git a/include/crypto/ciphermode_platform.h b/include/crypto/aes_platform.h similarity index 89% rename from include/crypto/ciphermode_platform.h rename to include/crypto/aes_platform.h index e6a65bb99d..483a1949ee 100644 --- a/include/crypto/ciphermode_platform.h +++ b/include/crypto/aes_platform.h @@ -7,8 +7,8 @@ * https://www.openssl.org/source/license.html */ -#ifndef OSSL_CRYPTO_CIPHERMODE_PLATFORM_H -# define OSSL_CRYPTO_CIPHERMODE_PLATFORM_H +#ifndef OSSL_AES_PLATFORM_H +# define OSSL_AES_PLATFORM_H # include "openssl/aes.h" @@ -223,39 +223,7 @@ void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); extern unsigned int OPENSSL_sparcv9cap_P[]; # include "sparc_arch.h" -# ifndef OPENSSL_NO_CAMELLIA -# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) -# include "openssl/camellia.h" - -void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); -void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); -void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); -void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); -void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); -void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, - size_t blocks, const CAMELLIA_KEY *key, - unsigned char *ivec); -void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, - size_t blocks, const CAMELLIA_KEY *key, - unsigned char *ivec); -# endif /* OPENSSL_NO_CAMELLIA */ - - # define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES) -# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) # define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) # define HWAES_set_encrypt_key aes_fx_set_encrypt_key # define HWAES_set_decrypt_key aes_fx_set_decrypt_key @@ -321,19 +289,6 @@ void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, size_t blocks, const AES_KEY *key1, const AES_KEY *key2, const unsigned char *ivec); -# ifndef OPENSSL_NO_DES -# include -void des_t4_key_expand(const void *key, DES_key_schedule *ks); -void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, - const DES_key_schedule ks[3], unsigned char iv[8]); -void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, - const DES_key_schedule ks[3], unsigned char iv[8]); -void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, - const DES_key_schedule *ks, unsigned char iv[8]); -void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, - const DES_key_schedule *ks, unsigned char iv[8]); -# endif /* OPENSSL_NO_DES */ - # elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) /* IBM S390X support */ # include "s390x_arch.h" @@ -480,4 +435,4 @@ void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, # endif /* HWAES_CAPABLE */ -#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ +#endif /* OSSL_AES_PLATFORM_H */ diff --git a/include/crypto/cmll_platform.h b/include/crypto/cmll_platform.h new file mode 100644 index 0000000000..c82cf9f961 --- /dev/null +++ b/include/crypto/cmll_platform.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CMLL_PLATFORM_H +# define OSSL_CMLL_PLATFORM_H + +# if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +extern unsigned int OPENSSL_sparcv9cap_P[]; +# include "sparc_arch.h" + +# ifndef OPENSSL_NO_CAMELLIA +# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) +# include + +void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); +void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +# endif /* OPENSSL_NO_CAMELLIA */ + +# endif /* CMLL_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/include/crypto/des_platform.h b/include/crypto/des_platform.h new file mode 100644 index 0000000000..28e319f50e --- /dev/null +++ b/include/crypto/des_platform.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_DES_PLATFORM_H +# define OSSL_DES_PLATFORM_H + +# if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +extern unsigned int OPENSSL_sparcv9cap_P[]; +# include "sparc_arch.h" + +# ifndef OPENSSL_NO_DES +# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) +# include +void des_t4_key_expand(const void *key, DES_key_schedule *ks); +void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +# endif /* OPENSSL_NO_DES */ + +# endif /* DES_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/util/fix-includes.sed b/util/fix-includes.sed index 5272e363fc..db66809a19 100644 --- a/util/fix-includes.sed +++ b/util/fix-includes.sed @@ -1,5 +1,5 @@ s|internal/([a-z0-9_]+)_int\.h|crypto/\1.h|g ; -s@internal/(aria.h|asn1_dsa.h|async.h|bn_conf.h|bn_conf.h|bn_dh.h|bn_srp.h|chacha.h|ciphermode_platform.h|ctype.h|__DECC_INCLUDE_EPILOGUE.H|__DECC_INCLUDE_PROLOGUE.H|dso_conf.h|dso_conf.h|engine.h|lhash.h|md32_common.h|objects.h|poly1305.h|sha.h|siphash.h|sm2err.h|sm2.h|sm4.h|sparse_array.h|store.h|foobar)@crypto/\1@g ; +s@internal/(aria.h|asn1_dsa.h|async.h|bn_conf.h|bn_conf.h|bn_dh.h|bn_srp.h|chacha.h|(aes|des|cmll)_platform.h|ctype.h|__DECC_INCLUDE_EPILOGUE.H|__DECC_INCLUDE_PROLOGUE.H|dso_conf.h|dso_conf.h|engine.h|lhash.h|md32_common.h|objects.h|poly1305.h|sha.h|siphash.h|sm2err.h|sm2.h|sm4.h|sparse_array.h|store.h|foobar)@crypto/\1@g ; s/constant_time_locl/constant_time/g ; s/_lo?cl\.h/_local.h/g ; s/_int\.h/_local.h/g ; -- 2.25.1