1/* 2 * Copyright 2001-2022 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 * AES-NI support for AES GCM. 12 * This file is included by cipher_aes_gcm_hw.c 13 */ 14 15static int aesni_gcm_initkey(PROV_GCM_CTX *ctx, const unsigned char *key, 16 size_t keylen) 17{ 18 PROV_AES_GCM_CTX *actx = (PROV_AES_GCM_CTX *)ctx; 19 AES_KEY *ks = &actx->ks.ks; 20 GCM_HW_SET_KEY_CTR_FN(ks, aesni_set_encrypt_key, aesni_encrypt, 21 aesni_ctr32_encrypt_blocks); 22 return 1; 23} 24 25static const PROV_GCM_HW aesni_gcm = { 26 aesni_gcm_initkey, 27 ossl_gcm_setiv, 28 ossl_gcm_aad_update, 29 generic_aes_gcm_cipher_update, 30 ossl_gcm_cipher_final, 31 ossl_gcm_one_shot 32}; 33 34#include "cipher_aes_gcm_hw_vaes_avx512.inc" 35 36const PROV_GCM_HW *ossl_prov_aes_hw_gcm(size_t keybits) 37{ 38#ifdef VAES_GCM_ENABLED 39 if (ossl_vaes_vpclmulqdq_capable()) 40 return &vaes_gcm; 41 else 42#endif 43 if (AESNI_CAPABLE) 44 return &aesni_gcm; 45 else 46 return &aes_gcm; 47} 48