X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=providers%2Fimplementations%2Fciphers%2Fcipher_aes_gcm.c;h=b5c7e8472b94bd93898d658f5ec7cf9c90ca9789;hb=1be63951f87dfcbc98efe5d94a15298fea885890;hp=1df1c1dba9a0d7707cfd195aa8d476aa5a4031b6;hpb=604e884bb8aba9b549c7e5effe01e406ccab3bcd;p=openssl.git diff --git a/providers/implementations/ciphers/cipher_aes_gcm.c b/providers/implementations/ciphers/cipher_aes_gcm.c index 1df1c1dba9..b5c7e8472b 100644 --- a/providers/implementations/ciphers/cipher_aes_gcm.c +++ b/providers/implementations/ciphers/cipher_aes_gcm.c @@ -1,5 +1,5 @@ /* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2020 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 @@ -7,22 +7,37 @@ * https://www.openssl.org/source/license.html */ +/* + * AES low level APIs are deprecated for public use, but still ok for internal + * use where we're using them to implement the higher level EVP interface, as is + * the case here. + */ +#include "internal/deprecated.h" + /* Dispatch functions for AES GCM mode */ -#include "prov/ciphercommon.h" -#include "prov/cipher_gcm.h" -#include "internal/provider_algs.h" +#include "cipher_aes_gcm.h" +#include "prov/implementations.h" +#include "prov/providercommon.h" + +#define AES_GCM_IV_MIN_SIZE (64 / 8) /* size in bytes */ +/* Note: GCM_IV_MAX_SIZE is listed in ciphercommon_gcm.h */ static void *aes_gcm_newctx(void *provctx, size_t keybits) { - PROV_AES_GCM_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx)); + PROV_AES_GCM_CTX *ctx; + + if (!ossl_prov_is_running()) + return NULL; + ctx = OPENSSL_zalloc(sizeof(*ctx)); if (ctx != NULL) - gcm_initctx(provctx, &ctx->base, keybits, PROV_AES_HW_gcm(keybits), 8); + gcm_initctx(provctx, &ctx->base, keybits, PROV_AES_HW_gcm(keybits), + AES_GCM_IV_MIN_SIZE); return ctx; } -static OSSL_OP_cipher_freectx_fn aes_gcm_freectx; +static OSSL_FUNC_cipher_freectx_fn aes_gcm_freectx; static void aes_gcm_freectx(void *vctx) { PROV_AES_GCM_CTX *ctx = (PROV_AES_GCM_CTX *)vctx; @@ -30,9 +45,9 @@ static void aes_gcm_freectx(void *vctx) OPENSSL_clear_free(ctx, sizeof(*ctx)); } -/* aes128gcm_functions */ +/* ossl_aes128gcm_functions */ IMPLEMENT_aead_cipher(aes, gcm, GCM, AEAD_FLAGS, 128, 8, 96); -/* aes192gcm_functions */ +/* ossl_aes192gcm_functions */ IMPLEMENT_aead_cipher(aes, gcm, GCM, AEAD_FLAGS, 192, 8, 96); -/* aes256gcm_functions */ +/* ossl_aes256gcm_functions */ IMPLEMENT_aead_cipher(aes, gcm, GCM, AEAD_FLAGS, 256, 8, 96);