该数据结构用来表示有效时间,定义在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中。包括是个函数:newfreei2dd2i

编程示例如下:

#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;

}