2

我最终得到的结果是分离签名,但我的要求是获取附加签名。我必须使用我的 CSR 文件签名才能使用 openssl 获取附加签名。我浏览了很多网站,但没有人提供适当的解决方案。

(NSData*)getSignature
{

unsigned char sha_buffer[SHA256_DIGEST_LENGTH];
memset((void*) sha_buffer, 0, SHA256_DIGEST_LENGTH);
SHA256_Final(sha_buffer, &m_sha_ctx);

PKCS7 * p7 = PKCS7_new();
PKCS7_set_type(p7, NID_pkcs7_signed);

PKCS7_SIGNER_INFO* p7Si = PKCS7_add_signature(p7, mp_x509, mp_pkey, EVP_sha256());
PKCS7_add_attrib_content_type(p7Si, OBJ_nid2obj(NID_pkcs7_data));
PKCS7_add0_attrib_signing_time(p7Si, NULL);
PKCS7_add1_attrib_digest(p7Si, (const unsigned char*) sha_buffer, SHA256_DIGEST_LENGTH);
PKCS7_add_certificate(p7, mp_x509);

int c = 0;
for ( ; c < sk_X509_num(mp_ca); c++) {
    X509* cert = sk_X509_value(mp_ca, c);
    PKCS7_add_certificate(p7, cert);
}

PKCS7_set_detached(p7, 1);

PKCS7_content_new(p7, NID_pkcs7_data);

PKCS7_SIGNER_INFO_sign(p7Si);

int p7Len = i2d_PKCS7(p7, NULL);
NSMutableData* signature = [NSMutableData data];
unsigned char* p7Buf = (unsigned char*) malloc(p7Len);
if (p7Buf != NULL) {
    unsigned char* pP7Buf = p7Buf;
    i2d_PKCS7(p7, &pP7Buf);
    [signature appendBytes: (const void*) p7Buf length: p7Len];
    free(p7Buf);
}
PKCS7_free(p7);

return (signature);
}
4

0 回答 0