Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6]      все
 Re: Как сделать цифровую подпись на основе сертификата  [new]
alexer81
Member

Откуда:
Сообщений: 45
Здравствуйте. нужно из контейнера достать Срок действия закрытого ключа "1.2.643.2.2.37.3.10"
Для этого нужно перечислить расширения контейнера через GetProvParam(PP_ENUM_CONTAINER_EXTENSION).
в документации КриптоПро определена получаемая структура :
typedef struct _CONTAINER_EXTENSION {
    BOOL bCritical; /*!< Флаг критического расширения. */
    DWORD cbExtension; /*!< Длина данных в pbExtension. */
    BYTE pbExtension[1]; /*!< Данные. */
    char sOid[1]; /*!< Строка с OID-ом расширения (невыровненный указатель). */
} CONTAINER_EXTENSION;

делаю в delphi
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 не понятно что за символ, как взять полностью?
8 окт 18, 11:45    [21697860]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
alexer81
Member

Откуда:
Сообщений: 45
ну cExtension.pbExtension[0] - первый байт есть, и есть длина
весь массив понятно есть.
а с cExtension.sOid не понятно
8 окт 18, 11:54    [21697869]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать цифровую подпись на основе сертификата  [new]
alexer81
Member

Откуда:
Сообщений: 45
oid взял так:
oid = Pchar(pointer(integer(@cExtension.pbExtension[0])+cExtension.cbExtension))
как взять с помощью cExtension.sOid не знаю
8 окт 18, 14:57    [21698189]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6]      все
Все форумы / Delphi Ответить