📄 ca.h
字号:
#include <time.h>
#define DER 1 //FORMAT_ASN1
#define PEM 3 /*定义格式*/
#define P12 5
#define PVK 7 //Microsoft 格式,仅限于私钥
#define MAX_MD_SIZE (16+20) /* The SSLv3 md5+sha1 type */
typedef char * (* PNewCrlMem)(UINT len);
struct stuSUBJECT//个体信息
{
USHORT C_l;
USHORT C_h;
UCHAR C[4];//国家
USHORT ST_l;
USHORT ST_h;
UCHAR ST[128];//省份
USHORT L_l;
USHORT L_h;
UCHAR L[128];//城市
USHORT O_l;
USHORT O_h;
UCHAR O[64];//组织
USHORT OU_l;
USHORT OU_h;
UCHAR OU[64];//部门
USHORT CN_l;
USHORT CN_h;
UCHAR CN[64];//名称
USHORT MAIL_l;
USHORT MAIL_h;
UCHAR MAIL[128];//电子邮件
stuSUBJECT()
{
memset(this,0,sizeof(stuSUBJECT));
}
};
struct stuKEYUSAGE//密钥用途
{
BOOL DS;//Digital Signature
BOOL NR;//Non-Repudiation
BOOL KE;//Key Encipherment
BOOL DE;//Data Encipherment
BOOL KA;//keyAgreement
BOOL KC;//keyCertSign
BOOL CS;//cRLSign
BOOL EO;//Encipher Only
BOOL DO;//Decipher Only
stuKEYUSAGE()
{
memset(this,0,sizeof(stuKEYUSAGE));
}
};
struct stuEKEYUSAGE//增强型密钥用途
{
BOOL SA;//服务器验证
BOOL CA;//客户端验证
BOOL CS;//代码签名
BOOL EP;//安全电子邮件
BOOL TS;//时间戳
BOOL msCC;//代码完整
BOOL msCTLS;//可签名信任列表
BOOL msSGC;//联机事务处理
BOOL msEFS;//加密磁盘上的数据
BOOL msSC;//智能卡登录
BOOL IP;//Internet
stuEKEYUSAGE()
{
memset(this,0,sizeof(stuEKEYUSAGE));
}
};
struct stuCERT//三者之和
{
stuKEYUSAGE KUSAGE;
stuEKEYUSAGE EKUSAGE;
stuSUBJECT SUBJECT;
stuCERT()
{
memset(this,0,sizeof(stuCERT));
}
};
struct stuREVOKE//证书作废结构链表
{
int Index;//证书序号
time_t time;//吊销时间
stuREVOKE * Link;
stuREVOKE()
{
memset(this,0,sizeof(stuREVOKE));
}
stuREVOKE(int index,time_t t)
{
Index=index;
time=t;;
Link=NULL;
}
};
/*添加链表节点*/
void AddRevoke(stuREVOKE *& Head,int index,time_t time);
/*证书格式转换函数*/
int FormatConv(
char * fileIn/*文件内容或文件名称*/,
int lenIn/*内存长度,为0则fileIn为文件名*/,
char * fileOut/*输出文件*/,
int outformat);
/*根证书生成函数,根据rootInfo信息,生成根证书公、私钥文件*/
int MakeRoot(
stuSUBJECT * rootInfo,/*信息*/
int bits/*密钥长度*/,
int serial/*序列号*/,
int days/*有效期*/,
char * certFile/*证书文件*/,
char * priFile/*私钥文件*/,
int type/*类型pem-der*/);
/*证书请求生成函数,根据reqInfo信息,生成用户证书私钥文件、证书请求文件*/
int MakeReq(
stuSUBJECT * reqInfo,/*请求信息*/
int bits/*密钥长度*/,
char * reqFile/*证书请求文件*/,
char * priFile/*私钥文件*/,
int type/*结果类型DER,PEM*/);
/*证书生成函数,通过证书请求,生成用户证书公钥文件*/
int MakeCert(
char *certfile/*根证书公钥*/,
int certlen,/*0则为磁盘文件,否则为内存区域*/
char *keyfile/*根证书私钥*/,
int keylen,/*0则为磁盘文件,否则为内存区域*/
int serial/*序列号*/,
char *enddate/*作废日期*/,
int days/*有效期*/,
char *reqfile/*请求文件*/,
char * OCSP_URI/*颁发机构联机访问URL*/,
char * CRL_URI/*证书吊销列表URL*/,
stuKEYUSAGE * KUSAGE/*密钥用法*/,
stuEKEYUSAGE * EKUSAGE/*增强密钥用法*/,
char *outfile/*结果文件*/,
int type/*结果类型DER,PEM*/);
//直接生成公私钥(证书)
int CreatePair(
char *certfile/*根证书公钥*/,
int certlen,/*0则为磁盘文件,否则为内存区域*/
char *keyfile/*根证书私钥*/,
int keylen,/*0则为磁盘文件,否则为内存区域*/
int serial/*序列号*/,
char *enddate/*作废日期*/,
int days/*有效期*/,
stuCERT * sCERT/*用户信息与密钥用法*/,
int bits/*密钥长度*/,
char * cert/*输出证书公钥*/,
int * certl/*公钥长度*/,
char * key/*输出证书私钥*/,
int * keyl/*私钥长度*/,
int type/*结果类型DER,PEM*/);
/*生成CRL函数*/
int MakeCrl(
char *certfile,//根证书公钥
int certlen,//为0则certfile为磁盘文件,否则为内存区域
char *keyfile,//根证书私钥
int keylen,//为0则keyfile为磁盘文件,否则为内存区域
stuREVOKE * Head,//作废链表
PNewCrlMem NewCrlMem,//回调函数
char *& outCrl,//
int * crll,//
char * outfile/*crl文件*/);
/*分解p12包*/
int P12Pick(
char *P12file,//P12文件
char *passwd,//P12密码
char *certdata,//公钥输出
int *certlen,//公钥长度
char *keydata,//私钥输出
int *keylen,//私钥输出
int otype/*输出类型(DER/PEM)*/);
/*合并p12包*/
int P12Pack(
char * strP12/*OUT包文件*/,
char * strPwd/*IN密码*/,
char * NiceName/*好记的名称*/,
char * strCert/*内存公钥或文件名*/,
int plen/*公钥长度,0为磁盘文件*/,
char * strkey/*内存私钥或文件名*/,
int klen/*私钥长度,0为磁盘文件*/);
//修改p12包密码
int ChangeP12PW(
char * strP12/*in包文件*/,
char * strPwd/*IN原密码*/,
char * strPwd2/*IN新密码*/,
char * NiceName/*好记的名字*/,
char * strOutP12/*out包文件*/);
//修改私钥密码
int ChangePrkPW(
char *fileIn,//输入文件
char *OldPwd,//原密码
char *NewPwd,//新密码
char *cipher,//密码算法名称
char *fileOut/*输出文件*/);
//检验公钥、私钥是否配对
int IsPair(
char *cert/*公钥*/,
int certlen,/*0则为磁盘文件,否则为内存区域*/
char *key/*私钥*/,
int keylen/*0则为磁盘文件,否则为内存区域*/);
void *Get_Func_Err(int errp); //取得上次错误的文字信息指针
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -