Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.11.2012(UTC) Сообщений: 65 Откуда: Ростовская область
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
добрый день. у меня не получается прочитать данные из расширения 1.2.643.100.112 вот код: Код:
function issuerSigNToolToStr(rgExtension:PCERT_EXTENSION;cExtension:dword):string;
var pExtension:PCERT_EXTENSION;
cbStructInfo, i: Cardinal;
pvStructInfo: Cardinal;
type PIssuerSigNTool=^IssuerSigNTool;
IssuerSigNTool = record
sigNTool :String[200];
cATool :string[200];
signToolCert :String[100];
cAToolCert :String[100];
end;
var szOID: LPSTR;
ISNT: pIssuerSigNTool;
begin
szOid:='1.2.643.100.112';
pExtension := CertFindExtension(szOID,cExtension,rgExtension);
if (Assigned(pExtension) and CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_ANY_STRING,
pExtension^.Value.pbData, pExtension^.Value.cbData, 0, nil, @cbStructInfo)) then
begin
pvStructInfo := LocalAlloc(LMEM_FIXED, cbStructInfo);
if pvStructInfo <> 0 then
begin
CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_ANY_STRING, pExtension^.Value.pbData,
pExtension^.Value.cbData, 0, Pointer(pvStructInfo), @cbStructInfo);
ISNT := pIssuerSigNTool(pvStructInfo);
result:=isnt.cATool+', '+isnt.cAToolCert+', '+isnt.sigNTool+', '+isnt.signToolCert;
end;
LocalFree(pvStructInfo);
end;
end;
брал серт. криптопро 02 ce b5 a6 20 bc 28 9e 4e 36 b7 7c 47 42 1f b5 получаю результат функции: Цитата:/121-1859 от 17.06.2012OСертификат соответствия № СФ/128-1822 от 01.06.2012««««««««○�
подскажите пожалуйста что не так ?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 675   Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 95 раз в 68 постах
|
|
С уважением, Юрий Строжевский |
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.11.2012(UTC) Сообщений: 65 Откуда: Ростовская область
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
наверно с помощью CryptDecodeObject структуру IssuerSigNTool не получить т.к. для Crypt32 это "Неизвестный тип расширения"(как пишет certutil.exe) сделал так: Код:....
var size: dword;
nameString: PChar;
szOid:='1.2.643.100.112';
pExtension := CertFindExtension(szOID,cExtension,rgExtension);
CryptBinaryToString(pExtension^.Value.pbData, pExtension^.Value.cbData,CRYPT_STRING_BINARY,nil,size);
if size > 1 then
begin
nameString := StrAlloc(size);
CryptBinaryToString(pExtension^.Value.pbData, pExtension^.Value.cbData,CRYPT_STRING_BINARY,namestring,size);
end;
получилось namestring=0$+"КриптоПро CSP" (версия 3.6)S"Удостоверяющий центр "КриптоПро УЦ" версии 1.5OСертификат соответствия № СФ/121-1859 от 17.06.2012OСертификат соответствия № СФ/128-1822 от 01.06.20121� а как получить в виде структуры? Цитата: type PIssuerSigNTool=^IssuerSigNTool; IssuerSigNTool = record sigNTool :String[200]; cATool :string[200]; signToolCert :String[100]; cAToolCert :String[100]; end;
Отредактировано пользователем 26 января 2014 г. 0:06:39(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
IssuerSignTool ::= SEQUENCE { signTool UTF8String SIZE(1.200), cATool UTF8String SIZE(1..200), signToolCert UTF8String SIZE(1.. 100), cAToolCert UTF8String SIZE(1.100) }. Соответственно CryptDecodeObject(..,X509_SEQUENCE_OF_ANY,..) и дальше каждое поле декодировать из UTF8String. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.11.2012(UTC) Сообщений: 65 Откуда: Ростовская область
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
спасибо! сделал так: Код:
type PCRYPT_DER_BLOB = array of CRYPT_DER_BLOB;
var pExtension:PCERT_EXTENSION;
cbStructInfo, i: Cardinal;
pvStructInfo: Cardinal;
szOID: LPSTR;
CSOA: PCRYPT_SEQUENCE_OF_ANY;
F: PCRYPT_DER_BLOB;
begin
szOid:='1.2.643.100.112';
pExtension := CertFindExtension(szOID,cExtension,rgExtension);
if (Assigned(pExtension) and CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_SEQUENCE_OF_ANY,
pExtension^.Value.pbData, pExtension^.Value.cbData, 0, nil, @cbStructInfo)) then
begin
pvStructInfo := LocalAlloc(LMEM_FIXED, cbStructInfo);
if pvStructInfo <> 0 then
begin
CryptDecodeObject(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_SEQUENCE_OF_ANY, pExtension^.Value.pbData,
pExtension^.Value.cbData, 0, pointer(pvStructInfo), @cbStructInfo);
CSOA := PCRYPT_SEQUENCE_OF_ANY(pvStructInfo);
f:=PCRYPT_DER_BLOB(CSOA.rgValue);
IssuerSigNTool.sigNTool:=ByteArrayToUTF8(f[0].pbData,f[0].cbData);
IssuerSigNTool.cATool:=ByteArrayToUTF8(f[1].pbData,f[1].cbData);
IssuerSigNTool.signToolCert:=ByteArrayToUTF8(f[2].pbData,f[2].cbData);
IssuerSigNTool.cAToolCert:=ByteArrayToUTF8(f[3].pbData,f[3].cbData);
.....
function ByteArrayToUTF8(pbData: PByte; cbData: DWORD): String;
type PByteArray = ^TByteArray;
TByteArray = Array[0..32767] of Byte;
var
I: Integer;
S: String;
begin
Result := '';
if not Assigned(pbData) or (cbData <= 0) then
Exit;
for I := cbData - 1 downto 2 do
begin
S := chr(PByteArray(pbData)^[i]);
Result := S + Result
end;
end;
получаю то что надо, но смущают 2 лишних байта в полях, потому их откидываю при переводе с PByte в символы. правилен ли такой код?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Неправилен. Для декодирования из UTF8String есть своя константа в CryptDecodeObject - X509_ANY_STRING. |
|
 1 пользователь поблагодарил Кирилл Соболев за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.11.2012(UTC) Сообщений: 65 Откуда: Ростовская область
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Kirill Sobolev  Неправилен. Для декодирования из UTF8String есть своя константа в CryptDecodeObject - X509_ANY_STRING. спасибо! понял наконец-то с помощью CryptDecodeObject - X509_ANY_STRING получил PCERT_NAME_VALUE потом CertRDNValueToStr(CERT_RDN_UTF8_STRING... и получаю то что надо
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close