Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Кто ни будь, знает как решить такую вот проблему
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.02.2014(UTC) Сообщений: 4 
|
Автор: cross  1) По поводу перечисления контейнеров. В первом посте логически неверный код. После того как вы получили имя контейнера в перечислении, вам нужно перевызвать CryptAcquireContext с этим именем и без флага CRYPT_VERIFYCONTEXT. После этого полученный хендл провайдера использовать в функции GetUserKey.
Ага, понял. Автор: cross  2) Код примера и команда certmgr выполняется от одного и того же пользователя?
Да. Получилось открыть хранилище вот так
Name := 'MY'; hName := PAnsiChar(Name); Store:= CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, hName);
Далее пытаюсь собрать аналог примера CryptMsgSign, но падаю на функции CryptMsgOpenToEncode.
FillChar(HashAlgorithm, SizeOf(CRYPT_ALGORITHM_IDENTIFIER), 0); HashAlgorithm.pszObjId:= PAnsiChar(szOID_CP_GOST_R3411);
FillChar(SignerEncodeInfo, SizeOf(CMSG_SIGNER_ENCODE_INFO), 0); SignerEncodeInfo.cbSize:= SizeOf(CMSG_SIGNER_ENCODE_INFO); // 88 байт SignerEncodeInfo.pCertInfo:=Cert^.CertInfo; SignerEncodeInfo.hCryptProv:=hProv; SignerEncodeInfo.dwKeySpec:=KeyType; SignerEncodeInfo.HashAlgorithm := HashAlgorithm; SignerEncodeInfo.pvHashAuxInfo:= nil;
FillChar(SignedMsgEncodeInfo, SizeOf(CMSG_SIGNED_ENCODE_INFO), 0); SignedMsgEncodeInfo.cbSize:= SizeOf(CMSG_SIGNED_ENCODE_INFO); // 48 байт SignedMsgEncodeInfo.cSigners:=1; SignedMsgEncodeInfo.rgSigners:=@SignerEncodeInfo; SignedMsgEncodeInfo.cCertEncoded:=0; SignedMsgEncodeInfo.rgCertEncoded:=nil; SignedMsgEncodeInfo.rgCrlEncoded:=nil;
hMsg := CryptMsgOpenToEncode(TYPE_DER, CMSG_DETACHED_FLAG, CMSG_SIGNED, @SignedMsgEncodeInfo, nil, nil);
//External: SIGSEGV В файле '../sysdeps/x86_64/multiarch/../strchr.S' на строке 33
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.02.2014(UTC) Сообщений: 4 
|
Какой размер структур CMSG_SIGNER_ENCODE_INFO и CMSG_SIGNED_ENCODE_INFO под x64 Linux должен получиться? У меня 88 и 48 байт соответственно. Это правильно? Если да, тогда я не понимаю что делаю не так. Структуры все проверил еще раз Код:
type
PCMSG_SIGNER_ENCODE_INFO = ^CMSG_SIGNER_ENCODE_INFO;
_CMSG_SIGNER_ENCODE_INFO = record
cbSize: DWORD; // 4
pCertInfo: PCERT_INFO; // 4
hCryptProv: HCRYPTOPROV; // 4
dwKeySpec: DWORD; // 4
HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER; // 8
pvHashAuxInfo: Pointer; // 4
cAuthAttr: DWORD; //4
rgAuthAttr: PCRYPT_ATTRIBUTE; //4
cUnauthAttr: DWORD; //4
rgUnauthAttr: PCRYPT_ATTRIBUTE; //4
{$IFDEF CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS}
SignerId: CERT_ID;
HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER;
pvHashEncryptionAuxInfo: Pointer;
{$ENDIF CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS}
end;
CMSG_SIGNER_ENCODE_INFO = _CMSG_SIGNER_ENCODE_INFO;
PCMSG_SIGNED_ENCODE_INFO = ^CMSG_SIGNED_ENCODE_INFO;
_CMSG_SIGNED_ENCODE_INFO = record
cbSize: DWORD; // 4
cSigners: DWORD; // 4
rgSigners: PCMSG_SIGNER_ENCODE_INFO;
cCertEncoded: DWORD; // 4
rgCertEncoded: PCRYPT_CERT_BLOB;
cCrlEncoded: DWORD; //4
rgCrlEncoded: PCRYPT_CRL_BLOB;
{$IFDEF CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS}
cAttrCertEncoded: DWORD;
rgAttrCertEncoded: PCRYPT_CERT_BLOB;
{$ENDIF CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS}
end;
CMSG_SIGNED_ENCODE_INFO = _CMSG_SIGNED_ENCODE_INFO;
|
|
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Кто ни будь, знает как решить такую вот проблему
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close