Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Писинин Алексей, спасибо. Проверил. ЭЦП там нет. Видать я получил не то, что хотел... Мне нужно склеить два файла в один: Some_ECP.sign - ЭЦП некоего файла Some_Cert.cer - сертификат, с помощью которого была создана подпись выше Как это сделать средствами WinAPI? Но нужно не просто дописать один файл в конец другого, а обернуть их в контейнер PKCS #7. Извиняюсь, если некорректно выражаю свои мысли. Просто, как я уже говорил, столкнулся я с этим впервые. Отредактировано пользователем 7 мая 2010 г. 18:56:32(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,396 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 719 раз в 623 постах
|
А подпись то в каком формате? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
попробуйте CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
maxdm написал:А подпись то в каком формате? Как мне сказали, PKCS #7. Но немного разобравшись во всём этом, я думаю, что это не так... Kirill Sobolev написал:попробуйте CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..) Спасибо, попробую.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
CryptMsgControl не подходит. Она сама создает подпись, что не есть хорошо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Она сама создает подпись Серьезно? И на каком же ключе? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
На закрытом. Она сама ищет в системе. У меня на компе код с её использованием отработал отлично. А вот когда попробовали выполнить его на другом ПК, посыпались ошибки: "не удаётся найти закрытый ключ". Отредактировано пользователем 11 мая 2010 г. 18:13:49(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Думаю, проблема в какой-то другой операции, которая требует ключ. CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..) ключ не ищет. Можно небольшой пример вызова? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Kirill Sobolev написал:Можно небольшой пример вызова? Вот полностью: Код:bool CertToECP(const char *ccFileName, Byte *bECP, int iECPLen, const Byte *bCert, int iCertLen) {
// ccFileName - путь куда будет сохранён результат
// bECP - файл ЭЦП (байтовый массив)
// iECPLen - длина массива
// bCert - файл сертификата (байтовый массив)
// iCertLen - длина массива
bool bResult = true;
CRYPT_SIGN_MESSAGE_PARA SigParams;
PCCERT_CONTEXT hCert = NULL;
Byte *bRes;
unsigned long int iSize;
const unsigned char *rgpbToBeSigned[1]; // массив документов
unsigned long int rgcbToBeSigned[1]; // массив размерностей документов
PCCERT_CONTEXT rgpMsgCert[1]; // массив сертификатов
hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);
if(!hCert) {
return false;
}
rgpbToBeSigned[0] = bECP;
rgcbToBeSigned[0] = iECPLen;
rgpMsgCert[0] = hCert;
SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SigParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
SigParams.pSigningCert = hCert;
SigParams.HashAlgorithm.pszObjId = szOID_PKCS_7;
SigParams.HashAlgorithm.Parameters.cbData = NULL;
SigParams.cMsgCert = 1;
SigParams.rgpMsgCert = rgpMsgCert;
SigParams.cAuthAttr = 0;
SigParams.dwInnerContentType = 0;
SigParams.cMsgCrl = 0;
SigParams.cUnauthAttr = 0;
SigParams.dwFlags = 0;
SigParams.pvHashAuxInfo = NULL;
SigParams.rgAuthAttr = NULL;
if(!CryptSignMessage(&SigParams, true, 1, rgpbToBeSigned, rgcbToBeSigned, NULL, &iSize)) {
return false;
}
bRes = new Byte[iSize];
if(!bRes) {
CertFreeCertificateContext(hCert);
return false;
}
if(!CryptSignMessage(&SigParams, true, 1, rgpbToBeSigned, rgcbToBeSigned, bRes, &iSize)) {
delete [] bRes;
CertFreeCertificateContext(hCert);
return false;
}
int hFile;
hFile = FileCreate((AnsiString(ccFileName) + ".p7b").c_str());
if(hFile) {
FileWrite(hFile, bRes, iSize);
FileClose(hFile);
}
else {
bResult = false;
}
delete [] bRes;
CertFreeCertificateContext(hCert);
return bResult;
}
Отредактировано пользователем 11 мая 2010 г. 19:59:17(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Сегодня уточнил. Подпись у меня в формате PKCS#7. Нужно к ней приклеить или добавить в параметры, или ещё как-нибудь прикрутить сертификат. Причём, пересоздавать подпись нельзя.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close