Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline proskura.e  
#11 Оставлено : 12 января 2021 г. 12:33:05(UTC)
proskura.e

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2011(UTC)
Сообщений: 6
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 2 раз
Здравствуйте!
Подскажите, пожалуйста, как добавить неподписанный атрибут к существующей подписи? Задача в том, чтобы при создании этой подписи добавить этот атрибут.
Пыталась при создании структуры CMSG_SIGNER_ENCODE_INFO добавить этот атрибут - получаю при вызове функции CryptMsgCalculateEncodedLength такую ошибку:
capi20: 0x101753880: :245 CryptMsgCalculateEncodedLength () Exception :'' at file:'/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/capilite/CMSSignedMessage.cpp' line:2288

Решила попробовать через CryptMsgControl, но, видимо, чего-то не понимаю:

NSString *oid = attributeList.allKeys.firstObject; // 1.3.6.1.4.1.311.88.5.6
NSData *value = [attributeList[oid] dataUsingEncoding:NSUTF8StringEncoding]; // BBAgQ5XhIZBqQ6A5OF6Wjlg9

CRYPT_ATTR_BLOB cablob;
cablob.cbData = value.length;
cablob.pbData = value.bytes;

CRYPT_ATTRIBUTE ca;
ca.cValue = 1;
ca.pszObjId = (LPSTR)oid.UTF8String;
ca.rgValue = &cablob;

DWORD encoded_len;
if (!CryptEncodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, PKCS_ATTRIBUTE, &ca, NULL, &encoded_len)) {
printf("Sizing of CryptEncodeObject error\n");
return nil;
}

BYTE *encoded_data = (BYTE *)malloc(encoded_len);
if (!CryptEncodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, PKCS_ATTRIBUTE, &ca, encoded_data, &encoded_len)) {
printf("CryptEncodeObject error\n");
return nil;
}

CRYPT_DATA_BLOB tsp_blob;
tsp_blob.cbData = encoded_len;
tsp_blob.pbData = encoded_data;

CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA attr_para;
attr_para.cbSize = sizeof(attr_para);
attr_para.dwSignerIndex = 0;
attr_para.blob = tsp_blob;

if (!CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR, &attr_para)) {
fprintf(stderr, "CryptMsgControl failed 0x%0x", CSP_GetLastError());
free(encoded_data);
return nil;
}
free(encoded_data);

Попробовала обернуть атрибут в структуру CMSG_SIGNER_ENCODE_INFO:
SignerEncodeInfo.cUnauthAttr = 1;
SignerEncodeInfo.rgUnauthAttr = ca;

но на этапе кодирования этой струткуры получаю ошибку:
DWORD encoded_len;
if (!CryptEncodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, PKCS7_SIGNER_INFO, &SignerEncodeInfo, NULL, &encoded_len)) {
printf("Sizing of CryptEncodeObject error\n");
return nil;
}

Подскажите, пожалуйста, где я свернула не туда?
Offline proskura.e  
#12 Оставлено : 12 января 2021 г. 21:25:27(UTC)
proskura.e

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2011(UTC)
Сообщений: 6
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 2 раз
И в догонку вопрос: а как добавить подписанные атрибуты при создании подписи? Опишите, пожалуйста, хотя бы примерный алгоритм добавления подписанных и не подписанных кастомных атрибутов
Offline Санчир Момолдаев  
#13 Оставлено : 13 января 2021 г. 9:53:13(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,038
Российская Федерация

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
обращение решается в рамках заявки на портале 35129
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.