API参考
载入中...
搜索中...
未找到
crypt_codecskey_local.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef CRYPT_CODECSKEY_LOCAL_H
17#define CRYPT_CODECSKEY_LOCAL_H
18
19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_CODECSKEY
21
22#include "bsl_types.h"
23#include "bsl_asn1.h"
24#include "crypt_types.h"
25#include "crypt_eal_pkey.h"
26
27#ifdef HITLS_CRYPTO_RSA
28#include "crypt_rsa.h"
29#endif
30#ifdef HITLS_CRYPTO_SM2
31#include "crypt_sm2.h"
32#endif
33#if defined(HITLS_CRYPTO_ED25519) || defined(HITLS_CRYPTO_X25519)
34#include "crypt_curve25519.h"
35#endif
36#ifdef HITLS_CRYPTO_MLDSA
37#include "crypt_mldsa.h"
38#define MLDSA_SEED_BYTES_LEN 32
39#endif
40#ifdef HITLS_CRYPTO_MLKEM
41#include "crypt_mlkem.h"
42#define MLKEM_SEED_BYTES_LEN 64
43#endif
44#ifdef HITLS_CRYPTO_SLH_DSA
45#include "crypt_slh_dsa.h"
46#endif
47#ifdef HITLS_CRYPTO_XMSS
48#include "crypt_xmss.h"
49#endif
50
51#ifdef __cplusplus
52extern "C" {
53#endif /* __cpluscplus */
54
55typedef struct {
56 BSL_Buffer *derivekeyData;
57 BSL_Buffer *ivData;
58 BSL_Buffer *enData;
59} EncryptPara;
60
61typedef enum {
62 CRYPT_RSA_PUB_N_IDX = 0,
63 CRYPT_RSA_PUB_E_IDX = 1,
64} CRYPT_RSA_PUB_TEMPL_IDX;
65
66typedef enum {
67 BSL_ASN1_TAG_ALGOID_IDX = 0,
68 BSL_ASN1_TAG_ALGOID_ANY_IDX = 1,
69} ALGOID_TEMPL_IDX;
70
71typedef enum {
72 CRYPT_SUBKEYINFO_ALGOID_IDX = 0,
73 CRYPT_SUBKEYINFO_BITSTRING_IDX = 1,
74} CRYPT_SUBKEYINFO_TEMPL_IDX;
75
76typedef enum {
77 CRYPT_PKCS_ENCPRIKEY_ENCALG_IDX,
78 CRYPT_PKCS_ENCPRIKEY_DERPARAM_IDX,
79 CRYPT_PKCS_ENCPRIKEY_SYMALG_IDX,
80 CRYPT_PKCS_ENCPRIKEY_SYMIV_IDX,
81 CRYPT_PKCS_ENCPRIKEY_ENCDATA_IDX,
82 CRYPT_PKCS_ENCPRIKEY_MAX
83} CRYPT_PKCS_ENCPRIKEY_TEMPL_IDX;
84
85typedef enum {
86 CRYPT_ECPRIKEY_VERSION_IDX = 0,
87 CRYPT_ECPRIKEY_PRIKEY_IDX = 1,
88 CRYPT_ECPRIKEY_PARAM_IDX = 2,
89 CRYPT_ECPRIKEY_PUBKEY_IDX = 3,
90} CRYPT_ECPRIKEY_TEMPL_IDX;
91
92typedef enum {
93 CRYPT_ML_DSA_PRVKEY_SEED_IDX = 0,
94 CRYPT_ML_DSA_PRVKEY_IDX = 1,
95} CRYPT_ML_DSA_PRV_TEMPL_IDX;
96
97typedef enum {
98 CRYPT_SLH_DSA_PRVKEY_RAW_IDX = 0, // Raw private key containing SK.seed || SK.prf || PK.seed || PK.root
99} CRYPT_SLH_DSA_PRV_TEMPL_IDX;
100
101typedef enum {
102 CRYPT_ML_KEM_PRVKEY_SEED_IDX = 0,
103 CRYPT_ML_KEM_PRVKEY_IDX = 1,
104} CRYPT_ML_KEM_PRV_TEMPL_IDX;
105
106typedef enum {
107 CRYPT_RSA_PRV_VERSION_IDX = 0,
108 CRYPT_RSA_PRV_N_IDX = 1,
109 CRYPT_RSA_PRV_E_IDX = 2,
110 CRYPT_RSA_PRV_D_IDX = 3,
111 CRYPT_RSA_PRV_P_IDX = 4,
112 CRYPT_RSA_PRV_Q_IDX = 5,
113 CRYPT_RSA_PRV_DP_IDX = 6,
114 CRYPT_RSA_PRV_DQ_IDX = 7,
115 CRYPT_RSA_PRV_QINV_IDX = 8,
116 CRYPT_RSA_PRV_OTHER_PRIME_IDX = 9
117} CRYPT_RSA_PRV_TEMPL_IDX;
118
119typedef enum {
120 CRYPT_DSA_PRV_P_IDX = 0,
121 CRYPT_DSA_PRV_Q_IDX = 1,
122 CRYPT_DSA_PRV_G_IDX = 2,
123} CRYPT_DSA_KEYPARAM_TEMPL_IDX;
124
125typedef enum {
126 CRYPT_DH_PRV_P_IDX = 0,
127 CRYPT_DH_PRV_G_IDX = 1,
128 CRYPT_DH_PRV_Q_IDX = 2,
129} CRYPT_DH_KEYPARAM_TEMPL_IDX;
130
131#define CRYPT_ASN1_CTX_SPECIFIC_TAG_RSAPSS_HASH 0
132#define CRYPT_ASN1_CTX_SPECIFIC_TAG_RSAPSS_MASKGEN 1
133#define CRYPT_ASN1_CTX_SPECIFIC_TAG_RSAPSS_SALTLEN 2
134#define CRYPT_ASN1_CTX_SPECIFIC_TAG_RSAPSS_TRAILED 3
135
136#define PATH_MAX_LEN 4096
137#define PWD_MAX_LEN 4096
138
139#ifdef HITLS_CRYPTO_KEY_DECODE
140
141#ifdef HITLS_CRYPTO_RSA
142int32_t ParseRsaPubkeyAsn1Buff(CRYPT_EAL_LibCtx *libctx, const char *attrName, uint8_t *buff, uint32_t buffLen,
143 BSL_ASN1_Buffer *param, CRYPT_EAL_PkeyCtx **ealPubKey, BslCid cid);
144
145int32_t ParseRsaPrikeyAsn1Buff(CRYPT_EAL_LibCtx *libctx, const char *attrName, uint8_t *buff, uint32_t buffLen,
146 BSL_ASN1_Buffer *rsaPssParam, BslCid cid, CRYPT_EAL_PkeyCtx **ealPriKey);
147#endif
148
149#if defined(HITLS_CRYPTO_ECDSA) || defined(HITLS_CRYPTO_SM2)
150int32_t ParseEccPrikeyAsn1Buff(CRYPT_EAL_LibCtx *libctx, const char *attrName, uint8_t *buff, uint32_t buffLen,
151 BSL_ASN1_Buffer *pk8AlgoParam, CRYPT_EAL_PkeyCtx **ealPriKey);
152#endif
153
154int32_t ParsePk8PriKeyBuff(CRYPT_EAL_LibCtx *libctx, const char *attrName, BSL_Buffer *buff,
155 CRYPT_EAL_PkeyCtx **ealPriKey);
156
157#ifdef HITLS_CRYPTO_KEY_EPKI
158int32_t ParsePk8EncPriKeyBuff(CRYPT_EAL_LibCtx *libctx, const char *attrName, BSL_Buffer *buff, const BSL_Buffer *pwd,
159 CRYPT_EAL_PkeyCtx **ealPriKey);
160
161int32_t CRYPT_DECODE_Pkcs8PrvDecrypt(CRYPT_EAL_LibCtx *libctx, const char *attrName, BSL_Buffer *buff,
162 const BSL_Buffer *pwd, BSL_ASN1_DecTemplCallBack keyInfoCb, BSL_Buffer *decode);
163
164int32_t CRYPT_DECODE_ParseEncDataAsn1(CRYPT_EAL_LibCtx *libctx, const char *attrName, BslCid symAlg,
165 EncryptPara *encPara, const BSL_Buffer *pwd, BSL_ASN1_DecTemplCallBack keyInfoCb, BSL_Buffer *decode);
166
167#endif
168
169int32_t CRYPT_EAL_ParseAsn1SubPubkey(CRYPT_EAL_LibCtx *libctx, const char *attrName, uint8_t *buff, uint32_t buffLen,
170 void **ealPubKey, bool isComplete);
171
172int32_t CRYPT_DECODE_AlgoIdAsn1Buff(uint8_t *buff, uint32_t buffLen, BSL_ASN1_DecTemplCallBack keyInfoCb,
173 BSL_ASN1_Buffer *algoId, uint32_t algoIdNum);
174
175int32_t CRYPT_DECODE_ConstructBufferOutParam(const BSL_Param *inParam, BSL_Param **outParam, uint8_t *buffer,
176 uint32_t bufferLen);
177
178int32_t CRYPT_DECODE_ParseSubKeyInfo(uint8_t *buff, uint32_t buffLen, BSL_ASN1_Buffer *pubAsn1, bool isComplete);
179
180int32_t CRYPT_DECODE_PrikeyAsn1Buff(uint8_t *buffer, uint32_t bufferLen, BSL_ASN1_Buffer *asn1, uint32_t arrNum);
181
182#ifdef HITLS_CRYPTO_RSA
183int32_t CRYPT_DECODE_RsaPubkeyAsn1Buff(uint8_t *buff, uint32_t buffLen, BSL_ASN1_Buffer *pubAsn1, uint32_t arrNum);
184
185int32_t CRYPT_DECODE_RsaPrikeyAsn1Buff(uint8_t *buff, uint32_t buffLen, BSL_ASN1_Buffer *asn1, uint32_t asn1Num);
186#endif
187
188#if defined(HITLS_CRYPTO_DSA) || defined(HITLS_CRYPTO_DH)
189int32_t CRYPT_DECODE_DsaKeyParamAsn1Buff(uint8_t *buff, uint32_t buffLen, BSL_ASN1_Buffer *asn1, uint32_t arrNum);
190
191int32_t CRYPT_ENCODE_DsaKeyParamAsn1Buff(BSL_ASN1_Buffer *asn1, uint32_t asn1Num, BSL_Buffer *encode);
192#endif
193
194#ifdef HITLS_CRYPTO_MLDSA
195int32_t CRYPT_MLDSA_ParseSubPubkeyAsn1Buff(void *libCtx, uint8_t *buff, uint32_t buffLen,
196 CRYPT_ML_DSA_Ctx **pubKey, bool isComplete);
197int32_t CRYPT_DECODE_MldsaPrikeyAsn1Buff(uint8_t *buffer, uint32_t bufferLen, BSL_ASN1_Buffer *asn1, uint32_t arrNum);
198int32_t CRYPT_MLDSA_ParsePkcs8key(void *libCtx, uint8_t *buffer, uint32_t bufferLen,
199 CRYPT_ML_DSA_Ctx **mldsaPriKey);
200#endif
201
202#ifdef HITLS_CRYPTO_SLH_DSA
203int32_t CRYPT_SLHDSA_ParseSubPubkeyAsn1Buff(void *libCtx, uint8_t *buff, uint32_t buffLen,
204 CryptSlhDsaCtx **pubKey, bool isComplete);
205int32_t CRYPT_DECODE_SlhDsaPrikeyAsn1Buff(uint8_t *buffer, uint32_t bufferLen, BSL_ASN1_Buffer *asn1, uint32_t arrNum);
206int32_t CRYPT_SLHDSA_ParsePkcs8key(void *libCtx, uint8_t *buffer, uint32_t bufferLen,
207 CryptSlhDsaCtx **slhDsaPriKey);
208#endif
209
210#ifdef HITLS_CRYPTO_MLKEM
211int32_t CRYPT_MLKEM_ParseSubPubkeyAsn1Buff(void *libCtx, uint8_t *buff, uint32_t buffLen,
212 CRYPT_ML_KEM_Ctx **pubKey, bool isComplete);
213int32_t CRYPT_DECODE_MlkemPrikeyAsn1Buff(uint8_t *buffer, uint32_t bufferLen, BSL_ASN1_Buffer *asn1, uint32_t arrNum);
214int32_t CRYPT_MLKEM_ParsePkcs8key(void *libCtx, uint8_t *buffer, uint32_t bufferLen,
215 CRYPT_ML_KEM_Ctx **mlkemPriKey);
216#endif
217#ifdef HITLS_CRYPTO_X25519
218int32_t CRYPT_X25519_ParsePkcs8Key(void *libCtx, uint8_t *buffer, uint32_t bufferLen,
219 CRYPT_CURVE25519_Ctx **x25519PriKey);
220int32_t CRYPT_X25519_ParseSubPubkeyAsn1Buff(void *libCtx, uint8_t *buff, uint32_t buffLen,
221 CRYPT_CURVE25519_Ctx **pubKey, bool isComplete);
222#endif
223#endif
224
225#ifdef HITLS_CRYPTO_XMSS
226int32_t CRYPT_XMSS_ParseSubPubkeyAsn1Buff(void *libCtx, uint8_t *buff, uint32_t buffLen, CryptXmssCtx **pubKey,
227 bool isComplete);
228#endif
229
230#ifdef HITLS_CRYPTO_KEY_ENCODE
231#ifdef HITLS_CRYPTO_RSA
232int32_t EncodeRsaPubkeyAsn1Buff(CRYPT_EAL_PkeyCtx *ealPubKey, BSL_ASN1_Buffer *pssParam, BSL_Buffer *encodePub);
233
234int32_t EncodeRsaPrikeyAsn1Buff(CRYPT_EAL_PkeyCtx *ealPriKey, BSL_Buffer *encode);
235#endif
236
237#if defined(HITLS_CRYPTO_ECDSA) || defined(HITLS_CRYPTO_SM2)
238int32_t EncodeEccPrikeyAsn1Buff(CRYPT_EAL_PkeyCtx *ealPriKey, BSL_ASN1_Buffer *pk8AlgoParam, BSL_Buffer *encode);
239int32_t CRYPT_ENCODE_EccPrikeyAsn1Buff(BSL_ASN1_Buffer *asn1, uint32_t asn1Num, BSL_Buffer *encode);
240#endif
241
242int32_t EncodePk8PriKeyBuff(CRYPT_EAL_PkeyCtx *ealPriKey, BSL_Buffer *asn1);
243
244int32_t CRYPT_ENCODE_SubPubkeyByInfo(BSL_ASN1_Buffer *algo, BSL_Buffer *bitStr, BSL_Buffer *encodeH,
245 bool isComplete);
246
247int32_t CRYPT_ENCODE_AlgoIdAsn1Buff(BSL_ASN1_Buffer *algoId, uint32_t algoIdNum, uint8_t **buff,
248 uint32_t *buffLen);
249
250int32_t CRYPT_ENCODE_PkcsEncryptedBuff(CRYPT_EAL_LibCtx *libCtx, const char *attrName, CRYPT_Pbkdf2Param *pkcsParam,
251 BSL_Buffer *unEncrypted, BSL_ASN1_Buffer *asn1);
252
253#ifdef HITLS_CRYPTO_KEY_EPKI
254int32_t EncodePk8EncPriKeyBuff(CRYPT_EAL_LibCtx *libCtx, const char *attrName, CRYPT_EAL_PkeyCtx *ealPriKey,
255 const CRYPT_EncodeParam *encodeParam, BSL_Buffer *encode);
256#endif
257
258int32_t CRYPT_EAL_EncodeAsn1SubPubkey(CRYPT_EAL_PkeyCtx *ealPubKey, bool isComplete, BSL_Buffer *encodeH);
259
260#ifdef HITLS_CRYPTO_RSA
261int32_t CRYPT_ENCODE_RsaPrikeyAsn1Buff(BSL_ASN1_Buffer *asn1, uint32_t asn1Num, BSL_Buffer *encode);
262
263int32_t CRYPT_ENCODE_RsaPubkeyAsn1Buff(BSL_ASN1_Buffer *pubAsn1, BSL_Buffer *encodePub);
264#endif
265#endif
266
267#if defined(HITLS_CRYPTO_ECDSA) || defined(HITLS_CRYPTO_SM2)
268static inline bool IsEcdsaEcParaId(int32_t paraId)
269{
270 return paraId == CRYPT_ECC_NISTP192 || paraId == CRYPT_ECC_NISTP224 || paraId == CRYPT_ECC_NISTP256 ||
271 paraId == CRYPT_ECC_NISTP384 || paraId == CRYPT_ECC_NISTP521 ||
272 paraId == CRYPT_ECC_BRAINPOOLP256R1 || paraId == CRYPT_ECC_BRAINPOOLP384R1 ||
273 paraId == CRYPT_ECC_BRAINPOOLP512R1;
274}
275#endif
276
277#if defined(HITLS_CRYPTO_RSA) && (defined(HITLS_CRYPTO_KEY_INFO) || defined(HITLS_CRYPTO_KEY_ENCODE))
278int32_t GetRsaPubKey(const CRYPT_EAL_PkeyCtx *pkey, CRYPT_EAL_PkeyPub *pub);
279#endif
280
281#if defined(HITLS_CRYPTO_ECDSA) || defined(HITLS_CRYPTO_SM2) || \
282 defined(HITLS_CRYPTO_ED25519) || defined(HITLS_CRYPTO_X25519)
283int32_t GetCommonPubKey(const CRYPT_EAL_PkeyCtx *pkey, CRYPT_EAL_PkeyPub *pub);
284#endif
285
286#ifdef __cplusplus
287}
288#endif
289
290#endif // HITLS_CRYPTO_CODECSKEY
291
292#endif // CRYPT_CODECSKEY_LOCAL_H
BslCid
定义 bsl_obj.h:36
struct EAL_PkeyCtx CRYPT_EAL_PkeyCtx
定义 crypt_eal_pkey.h:108
定义 bsl_types.h:40
定义 crypt_eal_pkey.h:40
定义 crypt_types.h:931
定义 crypt_types.h:936