1 /*
2  * Copyright (C) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HCF_ASY_KEY_GENERATOR_SPI_H
17 #define HCF_ASY_KEY_GENERATOR_SPI_H
18 
19 #include <stdint.h>
20 #include "algorithm_parameter.h"
21 #include "asy_key_params.h"
22 #include "result.h"
23 #include "key_pair.h"
24 
25 #define OPENSSL_ASY_KEYGEN_PARAMS_TYPE "OPENSSL.ASY.KEYGENPARAMS"
26 
27 #define OPENSSL_RSA_GENERATOR_CLASS "OPENSSL.RSA.KEYGENERATOR"
28 
29 #define OPENSSL_RSA_PUBKEY_FORMAT "X.509"
30 
31 #define OPENSSL_RSA_PRIKEY_FORMAT "PKCS#8"
32 
33 #define OPENSSL_RSA_ALGORITHM "OPENSSL.RSA"
34 
35 typedef struct HcfAsyKeyGeneratorSpi HcfAsyKeyGeneratorSpi;
36 
37 struct HcfAsyKeyGeneratorSpi {
38     HcfObjectBase base;
39 
40     HcfResult (*engineGenerateKeyPair)(HcfAsyKeyGeneratorSpi *self, HcfKeyPair **returnObj);
41 
42     HcfResult (*engineConvertKey)(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec *params, HcfBlob *pubKeyBlob,
43         HcfBlob *priKeyBlob, HcfKeyPair **returnKeyPair);
44 
45     HcfResult (*engineConvertPemKey)(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec *params, const char *pubKeyStr,
46         const char *priKeyStr, HcfKeyPair **returnKeyPair);
47 
48     HcfResult (*engineGenerateKeyPairBySpec)(const HcfAsyKeyGeneratorSpi *self, const HcfAsyKeyParamsSpec *paramsSpec,
49         HcfKeyPair **returnKeyPair);
50 
51     HcfResult (*engineGeneratePubKeyBySpec)(const HcfAsyKeyGeneratorSpi *self, const HcfAsyKeyParamsSpec *paramsSpec,
52         HcfPubKey **returnPubKey);
53 
54     HcfResult (*engineGeneratePriKeyBySpec)(const HcfAsyKeyGeneratorSpi *self, const HcfAsyKeyParamsSpec *paramsSpec,
55         HcfPriKey **returnPriKey);
56 };
57 
58 #endif
59