1 /*
2 * Copyright 2025 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 #include <openssl/core_dispatch.h>
11 #include "crypto/types.h"
12 #include "skeymgmt_lcl.h"
13 #include "internal/skey.h"
14 #include "prov/implementations.h"
15
16 static OSSL_FUNC_skeymgmt_import_fn aes_import;
17 static OSSL_FUNC_skeymgmt_export_fn aes_export;
18
aes_import(void * provctx,int selection,const OSSL_PARAM params[])19 static void *aes_import(void *provctx, int selection,
20 const OSSL_PARAM params[])
21 {
22 PROV_SKEY *aes = generic_import(provctx, selection, params);
23
24 if (aes == NULL)
25 return NULL;
26
27 if (aes->length != 16 && aes->length != 24 && aes->length != 32) {
28 generic_free(aes);
29 return NULL;
30 }
31 aes->type = SKEY_TYPE_AES;
32
33 return aes;
34 }
35
aes_export(void * keydata,int selection,OSSL_CALLBACK * param_callback,void * cbarg)36 static int aes_export(void *keydata, int selection,
37 OSSL_CALLBACK *param_callback, void *cbarg)
38 {
39 PROV_SKEY *aes = keydata;
40
41 if (aes->type != SKEY_TYPE_AES)
42 return 0;
43
44 return generic_export(keydata, selection, param_callback, cbarg);
45 }
46
47 const OSSL_DISPATCH ossl_aes_skeymgmt_functions[] = {
48 { OSSL_FUNC_SKEYMGMT_FREE, (void (*)(void))generic_free },
49 { OSSL_FUNC_SKEYMGMT_IMPORT, (void (*)(void))aes_import },
50 { OSSL_FUNC_SKEYMGMT_EXPORT, (void (*)(void))aes_export },
51 OSSL_DISPATCH_END
52 };
53