1*e7be843bSPierre Pronchery /*
2*e7be843bSPierre Pronchery * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved.
3*e7be843bSPierre Pronchery *
4*e7be843bSPierre Pronchery * Licensed under the Apache License 2.0 (the "License"). You may not use
5*e7be843bSPierre Pronchery * this file except in compliance with the License. You can obtain a copy
6*e7be843bSPierre Pronchery * in the file LICENSE in the source distribution or at
7*e7be843bSPierre Pronchery * https://www.openssl.org/source/license.html
8*e7be843bSPierre Pronchery */
9*e7be843bSPierre Pronchery
10*e7be843bSPierre Pronchery #include <openssl/core_dispatch.h>
11*e7be843bSPierre Pronchery #include "crypto/types.h"
12*e7be843bSPierre Pronchery #include "skeymgmt_lcl.h"
13*e7be843bSPierre Pronchery #include "internal/skey.h"
14*e7be843bSPierre Pronchery #include "prov/implementations.h"
15*e7be843bSPierre Pronchery
16*e7be843bSPierre Pronchery static OSSL_FUNC_skeymgmt_import_fn aes_import;
17*e7be843bSPierre Pronchery static OSSL_FUNC_skeymgmt_export_fn aes_export;
18*e7be843bSPierre Pronchery
aes_import(void * provctx,int selection,const OSSL_PARAM params[])19*e7be843bSPierre Pronchery static void *aes_import(void *provctx, int selection,
20*e7be843bSPierre Pronchery const OSSL_PARAM params[])
21*e7be843bSPierre Pronchery {
22*e7be843bSPierre Pronchery PROV_SKEY *aes = generic_import(provctx, selection, params);
23*e7be843bSPierre Pronchery
24*e7be843bSPierre Pronchery if (aes == NULL)
25*e7be843bSPierre Pronchery return NULL;
26*e7be843bSPierre Pronchery
27*e7be843bSPierre Pronchery if (aes->length != 16 && aes->length != 24 && aes->length != 32) {
28*e7be843bSPierre Pronchery generic_free(aes);
29*e7be843bSPierre Pronchery return NULL;
30*e7be843bSPierre Pronchery }
31*e7be843bSPierre Pronchery aes->type = SKEY_TYPE_AES;
32*e7be843bSPierre Pronchery
33*e7be843bSPierre Pronchery return aes;
34*e7be843bSPierre Pronchery }
35*e7be843bSPierre Pronchery
aes_export(void * keydata,int selection,OSSL_CALLBACK * param_callback,void * cbarg)36*e7be843bSPierre Pronchery static int aes_export(void *keydata, int selection,
37*e7be843bSPierre Pronchery OSSL_CALLBACK *param_callback, void *cbarg)
38*e7be843bSPierre Pronchery {
39*e7be843bSPierre Pronchery PROV_SKEY *aes = keydata;
40*e7be843bSPierre Pronchery
41*e7be843bSPierre Pronchery if (aes->type != SKEY_TYPE_AES)
42*e7be843bSPierre Pronchery return 0;
43*e7be843bSPierre Pronchery
44*e7be843bSPierre Pronchery return generic_export(keydata, selection, param_callback, cbarg);
45*e7be843bSPierre Pronchery }
46*e7be843bSPierre Pronchery
47*e7be843bSPierre Pronchery const OSSL_DISPATCH ossl_aes_skeymgmt_functions[] = {
48*e7be843bSPierre Pronchery { OSSL_FUNC_SKEYMGMT_FREE, (void (*)(void))generic_free },
49*e7be843bSPierre Pronchery { OSSL_FUNC_SKEYMGMT_IMPORT, (void (*)(void))aes_import },
50*e7be843bSPierre Pronchery { OSSL_FUNC_SKEYMGMT_EXPORT, (void (*)(void))aes_export },
51*e7be843bSPierre Pronchery OSSL_DISPATCH_END
52*e7be843bSPierre Pronchery };
53