मैं पीडीएफ के लिए हस्ताक्षर सत्यापन को लागू करने की कोशिश कर रहा हूं। यह एक बड़ा विषय है इसलिए मैं इसे एक समय में एक कदम उठा रहा हूं, सबसे पहले मैं वास्तव में एक पीडीएफ के मामले में सकारात्मक प्रतिक्रिया देने की कोशिश कर रहा हूं, जिसने मैंने अपने हस्ताक्षर किए हैं, वर्तमान एक्रोबैट के साथ सभी डिफ़ॉल्ट मानों का उपयोग करके - यह SHA256 होना चाहिए पाचन के लिए, और एक पीकेसीएस 7 अलग हस्ताक्षर। इसलिए, मैं openssl को क्रैक करता हूं, और पीडीएफ में दी गई बाइट रेंज पढ़कर और SHA256_*
फ़ंक्शंस को कॉल करके मेरे पास तुलना करने के लिए हैश है। तो अब मुझे प्रमाणपत्र डेटा आदि पढ़ने की जरूरत है, और PKCS7_*
फ़ंक्शंस का उपयोग करें। यह एक ऐसा चाहता है जो मैं चाहता हूं:पीकेसीएस # 7 हस्ताक्षर सत्यापन
int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int flags);
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);
लेकिन कुछ दिशा निर्देश इस एक जंगल की तरह प्रतीत नहीं होता है बिना यह आँख बंद करके में चारों ओर poking शुरू करने के लिए प्रभावी होगा
मैं कुछ स्पष्ट याद किया है। ? मैं इस फ़ंक्शन को पीडीएफ से पार्स किए गए डेटा वैल्यू के साथ कैसे कॉल करूं?