Статус: Новичок
Группы: Участники
Зарегистрирован: 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; }
Подскажите, пожалуйста, где я свернула не туда?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.11.2011(UTC) Сообщений: 6  Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
И в догонку вопрос: а как добавить подписанные атрибуты при создании подписи? Опишите, пожалуйста, хотя бы примерный алгоритм добавления подписанных и не подписанных кастомных атрибутов
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,215  Сказал(а) «Спасибо»: 101 раз Поблагодарили: 285 раз в 265 постах
|
обращение решается в рамках заявки на портале 35129 |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close