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


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

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

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

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

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

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

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

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

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