第二十九章 PKCS7 / 29.2 数据结构

Opensslpkcs7实现在crypto/pkcs7目录下。pkcs7的各种消息数据结构和函数在crypto/pkcs7/pkcs7.h中定义,主要数据结构如下:

typedef struct pkcs7_st

{

       /* 其他项 */

ASN1_OBJECT *type;

       union     

{

              char *ptr;

              /* NID_pkcs7_data */

              ASN1_OCTET_STRING *data;

              /* NID_pkcs7_signed */

              PKCS7_SIGNED *sign;

              /* NID_pkcs7_enveloped */

              PKCS7_ENVELOPE *enveloped;

              /* NID_pkcs7_signedAndEnveloped */

              PKCS7_SIGN_ENVELOPE *signed_and_enveloped;

              /* NID_pkcs7_digest */

              PKCS7_DIGEST *digest;

              /* NID_pkcs7_encrypted */

              PKCS7_ENCRYPT *encrypted;

              /* Anything else */

              ASN1_TYPE *other;

              } d;

} PKCS7;

其中type用于表示是何种类型的pkcs7消息,datasignenvelopedsigned_and_envelopeddigestncrypted对于了6种不同的具体消息。oher用于存放任意数据类型(也可以是pkcs7结构),所以,本结构可以是一个嵌套的数据结构。

pkcs7各种类型数据结构的DER编解码通过宏在crypto/pkcs7/pk7_asn1.c中实现,包括newfreei2dd2i函数。