Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
добрый день. пытаюсь создать эцп следующим образом: Код:pbMessage = (BYTE*)TEXT(SIGNER_NAME1);
cbMessage = (lstrlen((TCHAR*) pbMessage) + 1) * sizeof(TCHAR);
const BYTE* MessageArray[ ] = {pbMessage};
DWORD MessageSizeArray[1];
MessageSizeArray[0] = cbMessage;
_tprintf(TEXT("The message to be signed is \"%s\".\n"),
pbMessage);
// Open the certificate store.
if ( !( hCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
CERT_STORE_NAME)))
{
MyHandleError(TEXT("The store could not be opened."));
goto exit_SignMessage;
}
if(pSignerCert = CertFindCertificateInStore(
hCertStore,
MY_ENCODING_TYPE,
0,
CERT_FIND_SUBJECT_STR,
SIGNER_NAME1,
NULL))
{
_tprintf(TEXT("The signer's certificate was found.\n"));
}
else
{
MyHandleError( TEXT("Signer certificate not found."));
goto exit_SignMessage;
}
// Initialize the signature structure.
SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SigParams.dwMsgEncodingType = MY_ENCODING_TYPE;
SigParams.pSigningCert = pSignerCert;
SigParams.HashAlgorithm.pszObjId = pSignerCert->pCertInfo->SignatureAlgorithm.pszObjId;//szOID_RSA_SHA1RSA;
SigParams.HashAlgorithm.Parameters.cbData = NULL;
SigParams.cMsgCert = 1;
SigParams.rgpMsgCert = &pSignerCert;
SigParams.cAuthAttr = 0;
SigParams.dwInnerContentType = 0;
SigParams.cMsgCrl = 0;
SigParams.cUnauthAttr = 0;
SigParams.dwFlags = 0;
SigParams.pvHashAuxInfo = NULL;
SigParams.rgAuthAttr = NULL;
// First, get the size of the signed BLOB.
if(CryptSignMessage(
&SigParams,
FALSE,
1,
MessageArray,
MessageSizeArray,
NULL,
&cbSignedMessageBlob))
{
_tprintf(TEXT("%d bytes needed for the encoded BLOB.\n"),
cbSignedMessageBlob);
}
else
{
MyHandleError(TEXT("Getting signed BLOB size failed"));
goto exit_SignMessage;
}
// Allocate memory for the signed BLOB.
if(!(pbSignedMessageBlob =
//new BYTE[cbSignedMessageBlob]))
(BYTE*)malloc(cbSignedMessageBlob)))
{
MyHandleError(
TEXT("Memory allocation error while signing."));
goto exit_SignMessage;
}
// Get the signed message BLOB.
if(CryptSignMessage(
&SigParams,
FALSE,
1,
MessageArray,
MessageSizeArray,
pbSignedMessageBlob,
&cbSignedMessageBlob))
{
_tprintf(TEXT("The message was signed successfully. \n"));
_tprintf(TEXT("signature:\n"));
printf("size is %d", cbSignedMessageBlob);
print_signature(cbSignedMessageBlob, pbSignedMessageBlob);
fReturn = true;
}
возникает следующий вопрос: действительно ли внутри выходной переменной pbSignedMessageBlob будет содержаться моя ЭЦП или чтото другое? сомнения возникают от того что уж очень много символов выводится на экран- в районе 2600. . . заранее благодарен.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
если есть сомнения - проверьте получившийся результат, например нашей утилитой csptest. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
добрый день. подумал и решил что всётаки хочу "короткую" подпись, т.е пользуясь низкоуровневыми ф-иями. но изменяя подписываемое сообщение, подпись всегда остаётся одной и той же.(причём чтото странно типа cdcdcdcdcdcdcdcd...) код: Код:HCRYPTHASH hHash;
if(CryptCreateHash(
phProv,
CALG_SHA,
0,
0,
&hHash))
{
printf("Hash object created.\n");
}
if(CryptHashData(
hHash,
pbMessage,
cbMessage,
0))
{
printf("Hash object vu4islen.\n");
}
if(CryptSignHash(
hHash,
AT_KEYEXCHANGE,
NULL,
0,
NULL,
&dwSigLen))
{
printf("Sign length %d .\n",dwSigLen);
}
if(pbSignature = new BYTE[dwSigLen])
{
printf("member for sign vudel.\n");
}
if(CryptSignHash(
hHash,
AT_KEYEXCHANGE,
NULL,
0,
pbSignature,
&dwSigLen))
{
print_signature(dwSigLen, pbSignature);
}
замена AT_KEYEXCHANGE на AT_SIGNATURE приводит к ошибке. . . pbMessage и сbMessage получаю след образом: Код:BYTE* pbMessage = (BYTE*)SIGNER_NAME1;
DWORD cbMessage = (DWORD)strlen((char*) pbMessage + 1) ;
подскажите плз в чём может быть косяк? заранее благодарен.
|
|
|
|
Статус: Администратор
Группы: Администраторы, Участники Зарегистрирован: 13.12.2007(UTC) Сообщений: 111 Откуда: Крипто-Про
Поблагодарили: 33 раз в 10 постах
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
phProv откуда берется? чему равно dwSigLen после первого вызова CryptSignHash? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
С наступающими!! phProve беру из Код:CryptAcquireContext( &phProv,
NULL,
"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",75,
CRYPT_VERIFYCONTEXT
);
dwSigLen после первого вызова CryptSignHash =64
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
при использовании CryptAcquireCertificatePrivateKey возникает undeclared identifier, поэтому отказался от него
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
после перввого вызова CryptAcquireContext, делаю : Код:CryptAcquireContext(&phProv,
CERT_STORE,
"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
75,
CRYPT_MACHINE_KEYSET))
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.11.2008(UTC) Сообщений: 27 Откуда: Russia
|
где CERT_STORE - хранилище(например 38ab179f-5ba5-40e6-bdf4-7e0be367ebbc)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Как же Вы хотите сделать подпись на гостовом ключе, но с хэшом CALG_SHA? Хэш должен быть тоже гостовый. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close