我正在尝试对PDF执行签名验证。这是一个很大的话题,所以我一次只采取一步,首先我试图在我自己签名的PDF的情况下实际返回一个积极的结果,使用当前Acrobat的所有默认值 - 应该是SHA256摘要和PKCS7分离签名。所以,我破解了openssl,通过阅读PDF中给出的字节范围并调用SHA256_*
函数,我有一个散列用于比较。所以现在我需要读取证书数据等,并使用PKCS7_*
函数。这看起来是我想要的一个:PKCS#7签名验证
int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int flags);
as found in the documentation。除了说文档没有告诉我如何构建这些东西。好的,所以我认为BIO *indata
可以用here中的一些功能和使用these(尽管还没有计算出确切的细节)的证书组成,但PKCS7 *p7
或STACK_OF(x)
要求。我无法找到任何记录的方式来初始化这些结构。有在pkcs7.h
头有些pkcs7_ctrl功能: -
long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
int PKCS7_set_type(PKCS7 *p7, int type);
int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);
int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst);
int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);
int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
int PKCS7_add_certificate(PKCS7 *p7, X509 *x509);
int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);
int PKCS7_content_new(PKCS7 *p7, int nid);
int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,
BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si);
int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, X509 *x509);
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
int PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
但没有一些指引这似乎并不像林这将是有效的,开始盲目地在打探
我错过了一些东西明显。 ?我如何使用从PDF解析的数据值来调用此函数?