Home | History | Annotate | Line # | Download | only in ciphers
      1 /*
      2  * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
      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  * Crypto extension support for AES modes ecb, cbc, ofb, cfb, ctr.
     12  * This file is included by cipher_aes_hw.c
     13  */
     14 
     15 static int cipher_hw_aes_arm_initkey(PROV_CIPHER_CTX *dat,
     16                                                        const unsigned char *key,
     17                                                        size_t keylen)
     18 {
     19     int ret = cipher_hw_aes_initkey(dat, key, keylen);
     20     if (AES_UNROLL12_EOR3_CAPABLE && dat->mode == EVP_CIPH_CTR_MODE)
     21         dat->stream.ctr = (ctr128_f)HWAES_ctr32_encrypt_blocks_unroll12_eor3;
     22 
     23     return ret;
     24 }
     25 
     26 #define PROV_CIPHER_HW_declare(mode)                                           \
     27 static const PROV_CIPHER_HW aes_arm_##mode = {                                 \
     28     cipher_hw_aes_arm_initkey,                                                 \
     29     ossl_cipher_hw_generic_##mode,                                             \
     30     cipher_hw_aes_copyctx                                                      \
     31 };
     32 #define PROV_CIPHER_HW_select(mode)                                            \
     33 if (ARMv8_HWAES_CAPABLE)                                                         \
     34     return &aes_arm_##mode;
     35