powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать цифровую подпись на основе сертификата
3 сообщений из 128, страница 6 из 6
Как сделать цифровую подпись на основе сертификата
    #39714321
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. нужно из контейнера достать Срок действия закрытого ключа "1.2.643.2.2.37.3.10"
Для этого нужно перечислить расширения контейнера через GetProvParam(PP_ENUM_CONTAINER_EXTENSION).
в документации КриптоПро определена получаемая структура :
Код: plaintext
1.
2.
3.
4.
5.
6.
typedef struct _CONTAINER_EXTENSION {
    BOOL bCritical; /*!< Флаг критического расширения. */
    DWORD cbExtension; /*!< Длина данных в pbExtension. */
    BYTE pbExtension[1]; /*!< Данные. */
    char sOid[1]; /*!< Строка с OID-ом расширения (невыровненный указатель). */
} CONTAINER_EXTENSION;


делаю в delphi
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
PCONTAINER_EXTENSION = ^CONTAINER_EXTENSION;
_CONTAINER_EXTENSION =record
  bCritical: BOOL;
 cbExtension:DWORD;
 pbExtension:array[0..0] of byte;
  sOid:array [0..0] of char;
 end;
CONTAINER_EXTENSION = _CONTAINER_EXTENSION;
///
var cExtension:PCONTAINER_EXTENSION;
///
Flag :=CRYPT_FIRST;
if CryptGetProvParam(Prov,PP_ENUM_CONTAINER_EXTENSION,nil,Size,Flag) then
 begin
     GetMem(Info,Size);
   try
   while  CryptGetProvParam(Prov,PP_ENUM_CONTAINER_EXTENSION,Info,Size,Flag) do
    begin
        //
    cExtension:=PCONTAINER_EXTENSION(Info);
     Flag := CRYPT_NEXT;
    end;
   finally
   FreeMem(Info,Size);
  end;
end;


и как тут получить нужные данные?
cExtension.cbExtension = 19 это правильно
cExtension.pbExtension[0] - первый байт, а остальные как брать?
в cExtension.sOid не понятно что за символ, как взять полностью?
...
Рейтинг: 0 / 0
Как сделать цифровую подпись на основе сертификата
    #39714327
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну cExtension.pbExtension[0] - первый байт есть, и есть длина
весь массив понятно есть.
а с cExtension.sOid не понятно
...
Рейтинг: 0 / 0
Как сделать цифровую подпись на основе сертификата
    #39714457
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oid взял так:
oid = Pchar(pointer(integer(@cExtension.pbExtension[0])+cExtension.cbExtension))
как взять с помощью cExtension.sOid не знаю
...
Рейтинг: 0 / 0
3 сообщений из 128, страница 6 из 6
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать цифровую подпись на основе сертификата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]