第三十章 PKCS12 / 30.3数据结构

数据结构定义在crypto/pkcs12/pkcs12.h中,如下所示:

       1PKCS12_MAC_DATA

typedef struct

{

X509_SIG *dinfo;

ASN1_OCTET_STRING *salt;

ASN1_INTEGER *iter;

} PKCS12_MAC_DATA;

该结构用于存放pkcs12中的MAC信息,防止他人篡改。xinfo用于存放MAC值和摘要算法,saltiter用于根据口令来生成对称密钥(pbe)

2PKCS12

typedef struct

{

ASN1_INTEGER *version;

PKCS12_MAC_DATA *mac;

PKCS7 *authsafes;

} PKCS12;

pkcs12数据结构,version为版本,mac用于存放MAC信息以及对称密钥相关的信息authsafespkcs7结构,用于存放的证书、crl以及私钥等各种信息。

3PKCS12_BAGS

typedef struct pkcs12_bag_st

{

ASN1_OBJECT *type;

union

{

        ASN1_OCTET_STRING *x509cert;

        ASN1_OCTET_STRING *x509crl;

        ASN1_OCTET_STRING *octet;

        ASN1_IA5STRING *sdsicert;

        ASN1_TYPE *other;

}value;

} PKCS12_BAGS;

该结构用于存放各种实体对象。

4PKCS12_SAFEBAG

typedef struct

{

ASN1_OBJECT *type;

union

{

        struct pkcs12_bag_st *bag;

        struct pkcs8_priv_key_info_st   *keybag;

        X509_SIG *shkeybag;

        STACK_OF(PKCS12_SAFEBAG) *safes;

        ASN1_TYPE *other;

}value;

STACK_OF(X509_ATTRIBUTE) *attrib;

} PKCS12_SAFEBAG;

该结构用于存放各种证书、crl和私钥数据。

上述两种结构与pkcs7数据结构的相互转化可参考p12_add.c。在使用中,用户根据证书、私钥以及crl等信息来构造PKCS12_SAFEBAG数据结构,然后将这些结构转化为pkcs12中的pkcs7结构。