下面的代码对于分离的签名非常有效!!如何获得签名?

时间:2019-05-04 14:53:26

标签: ios objective-c security openssl openssl-engine

我进入决赛的结果是分离签名,但我的要求是获得附加签名。我必须使用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);
}

0 个答案:

没有答案