使用OpenSSL获取PKCS7数据长度

使用OpenSSL获取PKCS7数据长度,c,openssl,pkcs#7,C,Openssl,Pkcs#7,我有一些PKCS7数据,我可以通过OpenSSL这样读取: $ openssl asn1parse -i -inform der -in data.dat 0:d=0 hl=4 l=16208 cons: SEQUENCE 4:d=1 hl=2 l= 9 prim: OBJECT :pkcs7-signedData .. more .. 我可以这样在代码中加载它: // buf contains the raw data, len the length BIO

我有一些PKCS7数据,我可以通过OpenSSL这样读取:

$ openssl asn1parse -i -inform der -in data.dat
0:d=0  hl=4 l=16208 cons: SEQUENCE
4:d=1  hl=2 l=    9 prim:  OBJECT            :pkcs7-signedData
.. more ..
我可以这样在代码中加载它:

// buf contains the raw data, len the length
BIO *bio = BIO_new_mem_buf(buf, len);

PKCS7 *pkcs7 = d2i_PKCS7_bio(bio, NULL);
if (!pkcs7) {
    // die
}
printf("Success!");
这很好,我可以成功地获得签名者信息等。但是我希望获得从输入数据解析的长度值。在我的示例中,这是16208,在ASN1输出的第二行中可以看到

我注意到PKCS7结构有一个
length
属性(请参见
include/openssl/PKCS7.h
),但打印时
PKCS7->length
总是为零

如何获取包含PKCS7签名数据的整个序列的长度