第三十章 PKCS12 / 30.4函数

1)    int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,                   unsigned char *mac, unsigned int *maclen)

生成MAC值,pass为用户口令,passlen为口令长度,macmaclen用于存放MAC值。当p12pkcs7为数据类型时,本函数有效。

2)  int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen)

验证pkcs12MACpass为用户口令,passlen为口令长度。PKCS12MAC值存放在p12-> mac-> dinfo->digest中。本函数根据passpasslen调用PKCS12_gen_mac生成一个MAC值,与p12中已有的值进行比较。

3)  PKCS12_create

PKCS12数据结构。

       4  PKCS12_parse

              解析PKCS12,得到私钥和证书等信息。

5)      PKCS12_key_gen_asc/PKCS12_key_gen_uni

生成pkcs12密钥,输入口令为ASCII/UNICODE

       6unsigned char * PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass,

             int passlen, unsigned char *in, int inlen, unsigned char **data,

             int *datalen, int en_de)

PKCS12加解密,algor为对称算法,pass为口令,passlen为口令长度,in为输入数据,inlen为输入数据长度,datadatalen用于存放结果,en_de用于指明时加密还是解密。

       7  PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk)

              打包PKCS12_SAFEBAG堆栈,生成PKCS7数据结构并返回。

       8  PKCS12_unpack_p7data

              上面函数的逆过程。

       9)    PKCS12_pack_p7encdata

              PKCS12_SAFEBAG堆栈根据pbe算法、口令和salt加密,生成pkcs7并返回。

       10PKCS12_unpack_p7encdata

              上述过程的逆过程。

       11)   int PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass)

              替换pkcs12的口令。

       12PKCS12_setup_mac

              设置pkcs12MAC数据结构。

       13PKCS12_set_mac

              设置pkcs12MAC信息。

       14PKCS12_pack_authsafes

              pkcs7堆栈信息打包到pkcs12中。

       15PKCS12_unpack_authsafes

              上面函数的逆过程,从pkcs12中解出pkcs7堆栈,并返回。

16)PKCS12 *PKCS12_init(int mode)

生成一个pkcs12数据结构,mode的值必须为NID_pkcs7_data,即pkcs12中的pkcs7类型必须是data类型。

       17PKCS12_PBE_add

              加载各种pbe算法。

       18PKCS12_PBE_keyivgen

              根据口令生成对称密钥,并做加解密初始化。

       19PKCS12_item_pack_safebag

              将输入的数据打包为PKCS12_SAFEBAG并返回。

       20PKCS12_x5092certbag

              将证书打包为PKCS12_SAFEBAG并返回。

       21PKCS12_certbag2x509

              上述过程的逆过程。

       22PKCS12_x509crl2certbag

              crl打包为PKCS12_SAFEBAG并返回。

       23PKCS12_certbag2x509crl

              上述过程的逆过程。

       24PKCS12_item_i2d_encrypt

              将数据结构DER编码,然后加密,数据存放在ASN1_OCTET_STRING中并返回。

       24PKCS12_item_decrypt_d2i

              上面函数的逆过程,解密输入数据,然后DER解码出数据结构,并返回。

       25int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,

                                 const unsigned char *name, int namelen)

PKCS12_SAFEBAG添加一个属性,属性类型为NID_friendlyNamenameunicode编码。

       26int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,

                                 int namelen)

PKCS12_SAFEBAG添加一个属性,属性类型为NID_friendlyNamenameASCII码。

       27)  PKCS12_get_friendlyname

              上面函数的逆过程,返回一个ASCII码值。

       28PKCS12_add_CSPName_asc

              PKCS12_SAFEBAG添加一个NID_ms_csp_name属性,输入参数为ASCII码。

       29PKCS12_add_localkeyid

              PKCS12_SAFEBAG添加一个NID_localKeyID属性。

       30PKCS12_MAKE_SHKEYBAG

              pkcs8密钥转化为PKCS12_SAFEBAG

       30PKCS8_PRIV_KEY_INFO *

PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, const char *pass,                                                                int passlen)

              上面函数的逆过程,从bag中提取pkcs8密钥信息。