Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.04.2008(UTC) Сообщений: 157 Откуда: Новороссийск
Поблагодарили: 14 раз в 8 постах
|
Есть отдельно: файл с данными, файл подписи, файл сертификата. Возможно файл подписи и файл сертификата соединить вместе, не генеря новую подпись?
|
|
|
|
Статус: Активный участник
Группы: Администраторы
Зарегистрирован: 29.12.2007(UTC) Сообщений: 1,036 Откуда: КРИПТО-ПРО Поблагодарили: 36 раз в 25 постах
|
Возможно. Для этого нужно написать программу, которая запишет сертификат в неподписанные атрибуты подписи. |
С уважением, КРИПТО-ПРО |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.04.2008(UTC) Сообщений: 157 Откуда: Новороссийск
Поблагодарили: 14 раз в 8 постах
|
А вы не подскажите какие функции это делают
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
CryptEncodeObject. Если подпись в формате PKCS#7, то можно попробовать CertAddCertificateContextToStore. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.04.2008(UTC) Сообщений: 157 Откуда: Новороссийск
Поблагодарили: 14 раз в 8 постах
|
Извените за мою тупость, но в CryptEncodeObject параметр lpszStructType каким должен быть?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
PKCS_CONTENT_INFO Вся информация по ASN.1 структуре описана в RFC 5652Вообще, для начала рекомендую решить обратную задачу - разобрать готовый PKCS#7 так, чтобы было похоже на результат работы парсеров типа dumpasn1. А затем заменой функций декодирования на функции кодирования уже получится то, что надо. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.04.2008(UTC) Сообщений: 157 Откуда: Новороссийск
Поблагодарили: 14 раз в 8 постах
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! У меня такая же задача: нужно, что бы и сертификат и ЭЦП некоего файла находились в одном файле. Делаю так: Код:bool CertToECP(const char *ccFileName, const Byte *bCert, int iCertLen) {
// ccFileName - путь до файла с ЭЦП
// bCert - файл сертификата (байтовый массив)
// iCertLen - длина массива
bool bResult = true;
HCERTSTORE hFileStore = NULL;
PCCERT_CONTEXT hCert = NULL;
hFileStore = CertOpenStore(CERT_STORE_PROV_FILENAME_A,
PKCS_7_ASN_ENCODING,
NULL,
CERT_STORE_OPEN_EXISTING_FLAG,
ccFileName);
if(!hFileStore) {
return false;
}
hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);
if(!hCert) {
CertCloseStore(hFileStore, 0);
return false;
}
if(!CertAddCertificateContextToStore(hFileStore,
hCert,
CERT_STORE_ADD_REPLACE_EXISTING,
0)) {
bResult = false;
}
CertFreeCertificateContext(hCert);
if(!CertSaveStore(hFileStore,
PKCS_7_ASN_ENCODING,
CERT_STORE_SAVE_AS_PKCS7,
CERT_STORE_SAVE_TO_FILENAME_A,
(AnsiString(ccFileName) + "1").c_str(),
0)) {
bResult = false;
}
CertCloseStore(hFileStore, 0);
return bResult;
}
Имя файла для вывода временное. Проблема в том, что не отрабатывает функция CertSaveStore. GetLastError говорит, что не верно указан параметр (какой именно, не уточняется). Что может быть не так? И в ту ли сторону я "копаю"? Может я что-то не так понял...
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Кое-что подправил и получил некий результат. Код:bool CertToECP(const char *ccFileName, Byte *bECP, int iECPLen, const Byte *bCert, int iCertLen) {
// ccFileName - путь куда будет сохранён результат
// bECP - файл ЭЦП (байтовый массив)
// iECPLen - длина массива
// bCert - файл сертификата (байтовый массив)
// iCertLen - длина массива
bool bResult = true;
HCERTSTORE hFileStore = NULL;
PCCERT_CONTEXT hCert = NULL;
CRYPT_DATA_BLOB cdb;
cdb.cbData = iECPLen;
cdb.pbData = (Byte*)bECP;
hFileStore = CertOpenStore(CERT_STORE_PROV_PKCS7,
PKCS_7_ASN_ENCODING,
NULL,
CERT_STORE_OPEN_EXISTING_FLAG,
&cdb);
if(!hFileStore) {
return false;
}
hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);
if(!hCert) {
CertCloseStore(hFileStore, 0);
return false;
}
if(!CertAddCertificateContextToStore(hFileStore, hCert, CERT_STORE_ADD_REPLACE_EXISTING, 0)) {
bResult = false;
}
CertFreeCertificateContext(hCert);
if(!CertSaveStore(hFileStore,
PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
CERT_STORE_SAVE_AS_PKCS7,
CERT_STORE_SAVE_TO_FILENAME_A,
(void*) ccFileName,
0)) {
bResult = false;
}
CertCloseStore(hFileStore, 0);
return bResult;
}
Созданный файл открывается и в нём лежит сертификат. А вот есть ли там ЭЦП...
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 06.05.2010(UTC) Сообщений: 103 Откуда: центр Вселенной
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Народ, ну скажите хоть что-нибудь...
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close