16#ifndef HITLS_X509_LOCAL_H
17#define HITLS_X509_LOCAL_H
19#include "hitls_build.h"
22#include "bsl_asn1_internal.h"
24#include "crypt_eal_pkey.h"
25#include "sal_atomic.h"
26#include "hitls_pki_types.h"
35#define BSL_TIME_UTC_MAX_YEAR 2049
37#define BSL_TIME_BEFORE_SET 0x01
38#define BSL_TIME_AFTER_SET 0x02
39#define BSL_TIME_BEFORE_IS_UTC 0x04
40#define BSL_TIME_AFTER_IS_UTC 0x08
43#define HITLS_X509_EXT_FLAG_PARSE (1 << 0)
45#define HITLS_X509_EXT_FLAG_GEN (1 << 1)
48#define HITLS_X509_EXT_FLAG_KUSAGE (1 << 0)
50#define HITLS_X509_EXT_FLAG_BCONS (1 << 1)
52#define HITLS_X509_EXT_FLAG_EXKUSAGE (1 << 2)
54#define HITLS_X509_GN_OTHER (HITLS_X509_GN_IP + 1)
55#define HITLS_X509_GN_X400 (HITLS_X509_GN_OTHER + 1)
56#define HITLS_X509_GN_EDI (HITLS_X509_GN_X400 + 1)
57#define HITLS_X509_GN_RID (HITLS_X509_GN_EDI + 1)
59typedef struct _HITLS_X509_NameNode {
60 BSL_ASN1_Buffer nameType;
61 BSL_ASN1_Buffer nameValue;
64 BSL_ASN1_Buffer utf8Value;
68typedef struct _HITLS_X509_ExtEntry {
70 BSL_ASN1_Buffer extnId;
72 BSL_ASN1_Buffer extnValue;
75typedef struct _HITLS_X509_CertExt {
84 HITLS_X509_ExtExKeyUsage exKeyUsage;
88 HITLS_X509_EXT_TYPE_CERT = 1,
89 HITLS_X509_EXT_TYPE_CRL,
90} HITLS_X509_ExtInnerType;
92typedef struct _HITLS_X509_Ext {
99typedef struct _HITLS_X509_AttrEntry {
101 BSL_ASN1_Buffer attrId;
102 BSL_ASN1_Buffer attrValue;
103} HITLS_X509_AttrEntry;
105typedef int32_t (*HITLS_X509_ParseAttrItemCb)(
BslList *attrList, HITLS_X509_AttrEntry *attrEntry);
107typedef int32_t (*HITLS_X509_EncodeAttrItemCb)(
void *attrNode, HITLS_X509_AttrEntry *attrEntry);
109typedef void *(*HITLS_X509_DupAttrItemCb)(
const void *item);
111typedef void (*HITLS_X509_FreeAttrItemCb)(
void *item);
112typedef struct _HITLS_X509_Attrs {
117typedef struct _HITLS_X509_ValidTime {
121} HITLS_X509_ValidTime;
123typedef struct _HITLS_X509_Asn1AlgId {
126 CRYPT_RSA_PssPara rsaPssParam;
127#ifdef HITLS_CRYPTO_SM2
128 BSL_Buffer sm2UserId;
131} HITLS_X509_Asn1AlgId;
133typedef int32_t (*HITLS_X509_Asn1Parse)(uint8_t *encode, uint32_t encodeLen,
void *out);
134typedef void *(*HITLS_X509_ProviderNew)(CRYPT_EAL_LibCtx *libCtx,
const char *attrName);
135typedef void *(*HITLS_X509_New)(void);
136typedef void (*HITLS_X509_Free)(
void *elem);
139 HITLS_X509_Asn1Parse asn1Parse;
140 HITLS_X509_ProviderNew x509ProviderNew;
141 HITLS_X509_New x509New;
142 HITLS_X509_Free x509Free;
145int32_t HITLS_X509_ParseTbsRawData(uint8_t *encode, uint32_t encodeLen, uint8_t **tbsRawData, uint32_t *tbsRawDataLen);
147#if defined(HITLS_PKI_X509_CRT_PARSE) || defined(HITLS_PKI_X509_CSR) || defined(HITLS_PKI_X509_CRL_PARSE) ||\
148 defined(HITLS_PKI_INFO_CRT) || defined(HITLS_PKI_INFO_CSR)
151#if defined(HITLS_PKI_X509_CRT_PARSE) || defined(HITLS_PKI_X509_CSR_PARSE) || \
152 defined(HITLS_PKI_INFO_CRT) || defined(HITLS_PKI_INFO_CSR) || defined(HITLS_PKI_INFO_CRL)
155#if defined(HITLS_PKI_X509_CRT_PARSE) || defined(HITLS_PKI_X509_CRL_PARSE) || defined(HITLS_PKI_X509_CSR_PARSE)
157int32_t HITLS_X509_ParseSignAlgInfo(BSL_ASN1_Buffer *algId, BSL_ASN1_Buffer *param, HITLS_X509_Asn1AlgId *x509Alg);
159int32_t HITLS_X509_ParseExtItem(BSL_ASN1_Buffer *extItem, HITLS_X509_ExtEntry *extEntry);
161int32_t HITLS_X509_ParseTime(BSL_ASN1_Buffer *before, BSL_ASN1_Buffer *after, HITLS_X509_ValidTime *time);
164#if defined(HITLS_PKI_X509_CSR_GEN) || defined(HITLS_PKI_X509_CRT_GEN) || defined(HITLS_PKI_X509_CRL_GEN) || \
165 defined(HITLS_PKI_X509_VFY_LOCATION) || defined(HITLS_TLS_FEATURE_CERTIFICATE_AUTHORITIES) || \
166 defined(HITLS_PKI_INFO)
167int32_t HITLS_X509_EncodeNameList(BSL_ASN1_List *list, BSL_ASN1_Buffer *name);
170#if defined(HITLS_PKI_X509_CSR_GEN) || defined(HITLS_PKI_X509_CRT_GEN) || defined(HITLS_PKI_X509_CRL_GEN)
171int32_t HITLS_X509_EncodeSignAlgInfo(HITLS_X509_Asn1AlgId *x509Alg, BSL_ASN1_Buffer *asn);
173int32_t HITLS_X509_SetNameList(
BslList **dest,
void *val, uint32_t valLen);
175int32_t HITLS_X509_EncodeExt(uint8_t tag, BSL_ASN1_List *list, BSL_ASN1_Buffer *ext);
178 BSL_ASN1_Buffer *asn1Buff,
BSL_Buffer *rawSignBuff, BSL_ASN1_BitString *sign);
180typedef int32_t (*EncodeExtCb)(
void *, HITLS_X509_ExtEntry *,
const void *);
182int32_t HITLS_X509_SetExtList(
void *param,
BslList *extList,
BslCid cid,
void *val, EncodeExtCb encodeExt);
184int32_t HITLS_X509_SetGeneralNames(HITLS_X509_ExtEntry *extEntry,
void *val);
186int32_t HITLS_X509_EncodeExtEntry(BSL_ASN1_List *list, BSL_ASN1_Buffer *ext);
188typedef int32_t (*HITLS_X509_SignCb)(int32_t mdId,
CRYPT_EAL_PkeyCtx *prvKey, HITLS_X509_Asn1AlgId *signAlgId,
192 void *obj, HITLS_X509_SignCb signCb);
195void HITLS_X509_FreeNameNode(HITLS_X509_NameNode *node);
197void HITLS_X509_FreeParsedNameNode(HITLS_X509_NameNode *node);
199int32_t HITLS_X509_ParseNameList(BSL_ASN1_Buffer *name, BSL_ASN1_List *list);
201int32_t HITLS_X509_ParseGeneralNames(uint8_t *encode, uint32_t encLen,
BslList *list);
203void HITLS_X509_ClearGeneralNames(
BslList *names);
205int32_t HITLS_X509_ParseAuthorityKeyId(HITLS_X509_ExtEntry *extEntry,
HITLS_X509_ExtAki *aki);
207int32_t HITLS_X509_ParseSubjectKeyId(HITLS_X509_ExtEntry *extEntry,
HITLS_X509_ExtSki *ski);
209int32_t HITLS_X509_ParseSubjectAltName(HITLS_X509_ExtEntry *extEntry,
HITLS_X509_ExtSan *san);
215HITLS_X509_Ext *X509_ExtNew(HITLS_X509_Ext *ext, int32_t type);
217void X509_ExtFree(HITLS_X509_Ext *ext,
bool isFreeOut);
219#if defined(HITLS_PKI_X509_CRT_PARSE) || defined(HITLS_PKI_X509_CRL_PARSE) || defined(HITLS_PKI_X509_CSR)
220int32_t HITLS_X509_ParseExt(BSL_ASN1_Buffer *ext, HITLS_X509_Ext *certExt);
223void HITLS_X509_ExtEntryFree(HITLS_X509_ExtEntry *entry);
225int32_t HITLS_X509_AddListItemDefault(
void *item, uint32_t len, BSL_ASN1_List *list);
228int32_t HITLS_X509_ParseX509(CRYPT_EAL_LibCtx *libCtx,
const char *attrName, int32_t format,
const BSL_Buffer *encode,
229 bool isCert, X509_ParseFuncCbk *parseFun, HITLS_X509_List *list);
231int32_t HITLS_X509_CheckAlg(
CRYPT_EAL_PkeyCtx *pubkey,
const HITLS_X509_Asn1AlgId *subAlg);
233#if defined(HITLS_PKI_X509_CSR_PARSE) || defined(HITLS_PKI_PKCS12_PARSE) || defined(HITLS_PKI_CMS_SIGNEDDATA)
234int32_t HITLS_X509_ParseAttrList(BSL_ASN1_Buffer *attrBuff, HITLS_X509_Attrs *attrs, HITLS_X509_ParseAttrItemCb parseCb,
235 HITLS_X509_FreeAttrItemCb freeItem);
238#ifdef HITLS_PKI_PKCS12_GEN
239HITLS_X509_Attrs *HITLS_X509_AttrsDup(
const HITLS_X509_Attrs *src, HITLS_X509_DupAttrItemCb dupCb,
240 HITLS_X509_FreeAttrItemCb freeCb);
243void HITLS_X509_AttrEntryFree(HITLS_X509_AttrEntry *attr);
245HITLS_X509_Attrs *HITLS_X509_AttrsNew(
void);
247void HITLS_X509_AttrsFree(HITLS_X509_Attrs *attrs, HITLS_X509_FreeAttrItemCb freeItem);
249#if (defined(HITLS_PKI_X509_CSR_GEN) && defined(HITLS_PKI_X509_CSR_ATTR)) || defined(HITLS_PKI_PKCS12_GEN) || \
250 defined(HITLS_PKI_CMS_SIGNEDDATA)
251int32_t HITLS_X509_EncodeAttrList(uint8_t tag, HITLS_X509_Attrs *attrs, HITLS_X509_EncodeAttrItemCb encodeCb,
252 BSL_ASN1_Buffer *attrAsn1);
255int32_t HITLS_X509_CheckSignature(
const CRYPT_EAL_PkeyCtx *pubKey, uint8_t *rawData, uint32_t rawDataLen,
256 const HITLS_X509_Asn1AlgId *alg,
const BSL_ASN1_BitString *signature);
258#ifdef HITLS_CRYPTO_SM2
259int32_t HITLS_X509_SetSm2UserId(
BSL_Buffer *sm2UserId,
void *val, uint32_t valLen);
262int32_t HITLS_X509_GetList(
BslList *list,
void *val, uint32_t valLen);
264#if defined(HITLS_PKI_X509_CRT_GEN) || defined(HITLS_PKI_X509_CRL_GEN) || defined(HITLS_PKI_X509_CSR_GEN) || \
265 defined(HITLS_PKI_X509_CRT_AUTH)
266int32_t HITLS_X509_GetEncodeDn(
BslList *list,
void *val, uint32_t valLen);
269int32_t HITLS_X509_GetPubKey(
void *ealPubKey,
void **val);
271int32_t HITLS_X509_GetSignAlg(
BslCid signAlgId, int32_t *val, uint32_t valLen);
273int32_t HITLS_X509_GetSignMdAlg(
const HITLS_X509_Asn1AlgId *signAlgId, int32_t *val, uint32_t valLen);
275int32_t HITLS_X509_GetEncodeLen(uint32_t encodeLen, uint32_t *val, uint32_t valLen);
277int32_t HITLS_X509_GetEncodeData(uint8_t *rawData, uint8_t **val);
279int32_t HITLS_X509_SetPkey(
void **pkey,
void *val);
281#ifdef HITLS_PKI_X509_CRT_GEN
282int32_t HITLS_X509_ExtReplace(HITLS_X509_Ext *dest, HITLS_X509_Ext *src);
285#if defined(HITLS_PKI_X509_CRT) || defined(HITLS_PKI_X509_CRL)
287#if defined(HITLS_PKI_X509_CRT_GEN) || defined(HITLS_PKI_X509_CRL_GEN)
288int32_t HITLS_X509_SetSerial(BSL_ASN1_Buffer *serial,
const void *val, uint32_t valLen);
290HITLS_X509_ExtEntry *X509_DupExtEntry(
const HITLS_X509_ExtEntry *src);
293int32_t HITLS_X509_GetSerial(BSL_ASN1_Buffer *serial,
void *val, uint32_t valLen);
296typedef int32_t (*DecodeExtCb)(HITLS_X509_ExtEntry *,
void *);
298int32_t HITLS_X509_GetExt(
BslList *ext,
BslCid cid,
BSL_Buffer *val, uint32_t expectLen, DecodeExtCb decodeExt);
300#ifdef HITLS_PKI_X509_VFY
301int32_t HITLS_X509_CheckAki(HITLS_X509_Ext *issueExt, HITLS_X509_Ext *subjectExt, BSL_ASN1_List *issueName,
302 BSL_ASN1_Buffer *serialNum);
304int32_t HITLS_X509_CmpNameNode(BSL_ASN1_List *nameOri, BSL_ASN1_List *name);
307bool X509_CheckCmdValid(int32_t *cmdSet, uint32_t cmdSize, int32_t cmd);
309int32_t X509_ExtCtrl(HITLS_X509_Ext *ext, int32_t cmd,
void *val, uint32_t valLen);
311#if defined(HITLS_PKI_INFO_DN_HASH) || defined(HITLS_PKI_X509_VFY_LOCATION)
312int32_t HITLS_X509_EncodeCanonNameList(BSL_ASN1_List *list, BSL_ASN1_Buffer *name);
315int32_t HITLS_X509_GetDistinguishNameStrFromList(BSL_ASN1_List *nameList,
BSL_Buffer *buff);
317int32_t HITLS_X509_MatchPattern(uint32_t flags,
const char *pattern,
const char *hostname);
319int32_t X509_GetHashId(
const HITLS_X509_Asn1AlgId *alg, int32_t *hashId);
321int32_t HITLS_X509_CtrlAlgInfo(
CRYPT_EAL_PkeyCtx *pubKey, int32_t hashId,
const HITLS_X509_Asn1AlgId *alg);
323int32_t HITLS_X509_EncodeObjIdentity(
BslCid cid, BSL_ASN1_Buffer *asnBuff);
CRYPT_MD_AlgId
定义 crypt_algid.h:68
struct EAL_PkeyCtx CRYPT_EAL_PkeyCtx
定义 crypt_eal_pkey.h:108
Signature algorithm parameters.
定义 hitls_pki_types.h:215