Приведенный ниже код работает очень хорошо для отдельной подписи! Как получить прикрепленную подпись? - PullRequest
2 голосов
/ 04 мая 2019

Результат, который я получаю в финале, это отдельная подпись, но мое требование состоит в том, чтобы получить прикрепленную подпись. Я должен подписаться с моим файлом 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...