Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Возникла необходимость использовать усовершенствованную эцп. Взял код из примера Крипто-ПРО SDK - Создание подписи (низкоуровневые функции). Получил сертификат в вашем тестовом центре сертификации (алгоритм подписи ГОСТ Р 34.11/34.10-2001 и алгоритм отпечатка sha1). Пример падает на вызове CadesMsgOpenToEncode Код: CMSG_SIGNER_ENCODE_INFO signer = { sizeof(CMSG_SIGNER_ENCODE_INFO) };
signer.pCertInfo = pCertContext->pCertInfo;
signer.hCryptProv = hProv;
signer.dwKeySpec = dwKeySpec;
signer.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;
CMSG_SIGNED_ENCODE_INFO info = { sizeof(CMSG_SIGNED_ENCODE_INFO) };
info.cSigners = 1;
info.rgSigners = &signer;
CADES_ENCODE_INFO cadesInfo = { sizeof(cadesInfo) };
cadesInfo.pSignedEncodeInfo = &info;
HCRYPTMSG hMsg = CadesMsgOpenToEncode(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,0,&cadesInfo,0,0);
с ошибкой: Код:[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(491) : (dwMsgEncodingType=0x00010001, dwFlags=0x00000000, pvMsgEncodeInfo=0x0012E24C, pszInnerContentObjID=0, pStreamInfo=0x00000000)
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(439) : Start
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(443) : Input parameters checked
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(452) : Copy of input structures is ready
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(458) : Signers updating start
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(463) : Signer #0
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(407) : Public key info is exported successfully
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(413) : Exception thrown: _hr
[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(510) : COleException, m_sc=0x80092004
[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(522) : (hMsg=0x00000000, GetLastError=0x80092004)
если попытаться использовать другой сертификат (алгоритм подписи sha1RSA и алгоритм отпечатка sha1), то этот метод проходит успешно Код:[1008] cades.dll: {508} /CadesMsgOpenToEncode/ cades.cpp(491) : (dwMsgEncodingType=0x00010001, dwFlags=0x00000000, pvMsgEncodeInfo=0x0012E24C, pszInnerContentObjID=0, pStreamInfo=0x00000000)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(439) : Start
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(443) : Input parameters checked
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(452) : Copy of input structures is ready
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(458) : Signers updating start
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(463) : Signer #0
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(407) : Public key info is exported successfully
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(414) : Signature algoritm OID info is found: 1.2.840.113549.1.1.5
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(470) : Certificates equality checked
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::DeduceHashAlgorithm/ cades.cpp(157) : (szHashAlgorithm=1.3.14.3.2.26)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(472) : Hash algorithm deduced
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::AttributeExists/ cades.cpp(181) : (pAttr=0)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(377) : Signer does not have any of signing-certificate attributes
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(383) : Attributes copied
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(386) : signing-certificate(-v2) attribute assembled
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(389) : Signer is updated successfully
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(479) : Calling CryptMsgOpenToEncode()
[1008] cades.dll: {508} /CadesMsgOpenToEncode/ cades.cpp(522) : (hMsg=0x001860A0, GetLastError=0x00000000)
Подскажите пожалуйста первую подсказку.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Скажите пожалуйста, стоит ли на компьютере, где вы запускаете пример, КриптоПро CSP?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Новожилова Елена написал:Скажите пожалуйста, стоит ли на компьютере, где вы запускаете пример, КриптоПро CSP? Да. Посмотрел настройки и обнаружил что в закладке Алгоритмы отсутствуют типы CSP для настройки параметров. После переустановки КриптоПро CSP - появился тип GOST R 34.10-2001 Signature with Diffie-Hellman Key Exchange. Но переустановка не помогла в проблеме. Пробовал csptest, но не знаю создает ли он усовершенствованную эцп Код:C:\Program Files\Crypto Pro\CSP>csptest.exe -sfsign -sign -in a.txt -out a3.txt -my tnew -add -detached -base64
CSP (Type:75) v3.6.4071 KC1 Release Ver:3.6.5236 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
#0:
Subject: C=RU, CN=tnew
Valid : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO
Source message length: 3
Calculated signature (or signed message) length: 1053
Signature was done. Signature (or signed message) length: 1037
Output file (a3.txt) has been saved
Total: SYS: 0.141 sec USR: 0.078 sec UTC: 5.227 sec
[ErrorCode: 0x00000000]
Код:C:\Program Files\Crypto Pro\CSP>csptest.exe -sfsign -sign -in a.txt -out a3.txt -my tnew -add -detached -base64 -addsigtime -cades_strict
CSP (Type:75) v3.6.4071 KC1 Release Ver:3.6.5236 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
#0:
Subject: C=RU, CN=tnew
Valid : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO
Source message length: 3
Calculated signature (or signed message) length: 1162
Signature was done. Signature (or signed message) length: 1146
Output file (a3.txt) has been saved
Total: SYS: 0.188 sec USR: 0.078 sec UTC: 2.473 sec
[ErrorCode: 0x00000000]
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Внимательно посмотрела код, чтобы создать усовершенствованную ЭЦП на алгоритме ГОСТ, задайте алгоритм хэширования ГОСТ Р 34.11 (szOID_CP_GOST_R3411) вместо SHA1 (szOID_OIWSEC_sha1). Алгоритм указывается здесь: Код: CMSG_SIGNER_ENCODE_INFO signer = { sizeof(CMSG_SIGNER_ENCODE_INFO) };
signer.pCertInfo = pCertContext->pCertInfo;
signer.hCryptProv = hProv;
signer.dwKeySpec = dwKeySpec;
signer.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Спасибо, с szOID_CP_GOST_R3411 заработало. Может быть у вас есть алгоритм поиска алгоритма хеширования по сертификату? :) Мне Кирилл Соболев описал один в теме(можно пропустить до последних двух сообщений), когда я разбирался с обычной эцп под линуксом.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
У нас для поиска алгоритма хэширования по сертификату используется алгоритм, который вам описал Кирилл Соболев.
Готового примера, к сожалению, нет.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Перебрал доступные алгоритмы для сертификата: Код:Subject: C=RU, CN=tnew
Valid : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO
Результат: Код:Encrypt: GOST 28147-89
Hash: HMAC GOST 28147-89
Exchange: Diffie-Hellman EL
Теперь пытаюсь найти OID найденного алгоритма хеширования, но не находится. Для других алгоритмов находит. Код:PROV_ENUMALGS enAlg;
...
PCCRYPT_OID_INFO pOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,&enAlg.aiAlgid, 0);
Код:Encrypt: GOST 28147-89 - szOID_CP_GOST_28147 (1.2.643.2.2.21, ГОСТ 28147-89)
Hash: HMAC GOST 28147-89
Exchange: Diffie-Hellman EL - szOID_CP_DH_EL (1.2.643.2.2.98, ГОСТ Р 34.10-2001 DH)
В каком направлении двигаться, чтобы найти szOID_CP_GOST_R3411?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Результат: Encrypt: GOST 28147-89 Hash: HMAC GOST 28147-89 Exchange: Diffie-Hellman EL А как он был получен? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2010(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Код: BYTE* enAlgB;
DWORD enAlgLen;
DWORD dwFlags;
CHAR *pszAlgType = NULL;
std::string retVal = "";
for (int i=0;;i++)
{
if (i==0)
dwFlags = CRYPT_FIRST;
else
dwFlags = CRYPT_NEXT;
if(!CryptGetProvParam(hProv,PP_ENUMALGS,NULL,&enAlgLen,dwFlags))
{
DWORD err = GetLastError();
if (err != ERROR_NO_MORE_ITEMS)
{
CryptReleaseContext(hProv,0);
CertFreeCertificateContext(pCertContext);
return MyHandleError("Ошибка в SignCades-CryptGetProvParam-1");
}
else
{
break;
}
}
if(enAlgB = (BYTE*)malloc(enAlgLen))
{
}
else
{
return MyHandleError("Ошибка в SignCades-malloc(enAlnLen)");
}
if(!CryptGetProvParam(hProv,PP_ENUMALGS,enAlgB,&enAlgLen,dwFlags))
{
DWORD err = GetLastError();
if (err != ERROR_NO_MORE_ITEMS)
{
CryptReleaseContext(hProv,0);
CertFreeCertificateContext(pCertContext);
return MyHandleError("Ошибка в SignCades-CryptGetProvParam-1");
}
else
{
break;
}
}
PROV_ENUMALGS enAlg;
memcpy(&enAlg,enAlgB,enAlgLen);
switch(GET_ALG_CLASS(enAlg.aiAlgid)) {
case ALG_CLASS_DATA_ENCRYPT:
{
pszAlgType = "Encrypt";
break;
}
case ALG_CLASS_HASH:
{
pszAlgType = "Hash";
break;
}
case ALG_CLASS_KEY_EXCHANGE:
pszAlgType = "Exchange";
break;
case ALG_CLASS_SIGNATURE:
pszAlgType = "Signature";
break;
default:
pszAlgType = "Unknown";
}
/*PCCRYPT_OID_INFO pubkeyOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY,pCertContext->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId, CRYPT_PUBKEY_ALG_OID_GROUP_ID );
ALG_ID* a = new ALG_ID[2];
a[0] = enAlg.aiAlgid;
a[1] = pubkeyOidInfo->Algid;
PCCRYPT_OID_INFO pOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_SIGN_KEY,&a, 0 );
PCCRYPT_OID_INFO pOidInfo1 = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,&enAlg.aiAlgid, 0 );
PCCRYPT_OID_INFO pOidInfo2 = CryptFindOIDInfo(CRYPT_OID_INFO_NAME_KEY,&enAlg.szName, 0 );*/
//signer.HashAlgorithm.pszObjId = (LPSTR)pOidInfo1->pszOID;
//retVal += std::string(toString(i));
retVal += std::string(pszAlgType);
retVal += ": ";
retVal += std::string(enAlg.szName);
retVal += "\r\n";
}
return retVal;
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
А csptest -enum -provtype gost2001 -info что выдает на этой же машине? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close