Поделиться через


Кодирование структуры CERT_INFO

Процесс кодирования является обратным процессу декодирования, описанному в разделе Декодирование структуры CERT_INFO. Например, следующая процедура добавит закодированный издатель в структуру CERT_INFO . См. также рисунок, следующий за процедурой.

Добавление закодированного издателя в структуру CERT_INFO

  1. Создайте строку, содержащую имя издателя, которое будет использоваться.
  2. Создайте массив CERT_RDN_ATTR структур, который будет инициализирован, чтобы содержать правильные сведения о только что созданной строке имени издателя.
  3. Создайте массив CERT_RDN структур, одна из которых содержит сведения о массиве CERT_RDN_ATTR структур, которые только что инициализированы.
  4. Создайте структуру CERT_NAME_INFO с указателем на только что созданный массив CERT_RDN структур.
  5. Вызовите CryptEncodeObject , чтобы получить размер закодированного большого двоичного объекта, передав ему адрес только что созданной структуры CERT_NAME_INFO .
  6. Выделение памяти для большого двоичного объекта с кодировкой вывода.
  7. Снова вызовите CryptEncodeObject , передав ему те же сведения, но теперь передав ему адрес только что выделенной памяти.
  8. Задайте для элемента Issuer.cbData структуры CERT_INFO размер, возвращенный на шаге 5, а для элемента Issuer.pbData — адрес, полученный на шаге 6. Закодированный большой двоичный объект issuer теперь находится там.

добавление закодированного издателя в структуру cert-info

Чтобы инициализировать и закодировать некоторые сведения о расширении сертификата, используйте следующую процедуру. См. также рисунок, следующий за процедурой.

Добавление закодированных сведений о расширении в структуру CERT_INFO

  1. Создайте и инициализируйте структуру сведений о расширении. В этом примере это структура CERT_BASIC_CONSTRAINTS_INFO .
  2. Вызовите CryptEncodeObject, передав ему адрес только что созданной структуры, чтобы получить размер выходного закодированного большого двоичного объекта.
  3. Выделение памяти для большого двоичного объекта с кодировкой вывода.
  4. Снова вызовите CryptEncodeObject , передав те же сведения, за исключением адреса выделенной памяти.
  5. Создание массива CERT_EXTENSION структур.
  6. Инициализируйте одну из структур CERT_EXTENSION таким образом, чтобы pszObjId был правильной строкой для данных, содержащихся в параметре Value, а значение содержит зашифрованный большой двоичный объект данных, полученный при вызове CryptEncodeObject.
  7. Инициализируйте элемент rgExtensionструктуры CERT_INFO , чтобы указать массив CERT_EXTENSION структур.

добавление закодированных сведений о расширении в структуру cert-info