该数据结构用来表示有效时间,定义在crypto/x509/x509.h中,如下:
typedef struct X509_val_st
{
ASN1_TIME *notBefore;
ASN1_TIME *notAfter;
} X509_VAL;
包含两项:
notBefore:生效日期;
notAfter:失效日期;
该结构的DER编解码通过宏在crypto/asn1/x_val.c中。包括是个函数:new、free、i2d和d2i。
编程示例如下:
#include <string.h>
#include <openssl/x509.h>
int main()
{
FILE *fp;
char*buf,*p;
charread[1024];
int len;
X509_VAL *val=NULL,*val2=NULL;
time_t t;
/* new 函数 */
val=X509_VAL_new();
/* 构造内容 */
t=time(0);
ASN1_TIME_set(val->notBefore,t);
ASN1_TIME_set(val->notAfter,t+1000);
/* i2d 函数 */
len=i2d_X509_VAL(val,NULL);
p=buf=malloc(len);
len=i2d_X509_VAL(val,&p);
/* 写入文件 */
fp=fopen("val.cer","wb");
fwrite(buf,1,len,fp);
fclose(fp);
/* 读文件 */
fp=fopen("val.cer","rb");
len=fread(read,1,1024,fp);
fclose(fp);
p=read;
/* d2i 函数 */
d2i_X509_VAL(&val2,&p,len);
if(val2==NULL)
{
printf("err\n");
}
/* free 函数 */
X509_VAL_free(val);
if(val2)
X509_VAL_free(val2);
free(buf);
return 0;
}