Криптография

Модуль "Криптография"

Функции

    СоздатьКрХэшПоИмени
    СоздатьПодпись7
    СоздатьСертификат509
    СоздатьШтампВремени
    СоздатьПакет7
    СоздатьКрХМЛ

Объекты и типы

    КрДайджест
    КрХэш
    Сертификат509
    Подпись7
    КрШтампВремени
    Пакет7
    КрХМЛ

Функции модуля "Криптография"

СоздатьКрХэшПоИмени

Формат вызова:
СоздатьКрХэшПоИмени(НаКлиенте: целое; Имя: строка): КрХэш; /*только чтение*/

описание:
Функция создания объекта "криптографический хэш".


СоздатьПодпись7

Формат вызова:
СоздатьПодпись7(НаКлиенте: целое): Подпись7; /*только чтение*/

описание:
Функция создания объекта "отсоединенная подпис".


СоздатьСертификат509

Формат вызова:
СоздатьСертификат509(НаКлиенте, КакСистема: целое): Сертификат509; /*только чтение*/

описание:
Функция создания объекта "сертификат".


СоздатьШтампВремени

Формат вызова:
СоздатьШтампВремени: КрШтампВремени; /*только чтение*/


СоздатьПакет7

Формат вызова:
СоздатьПакет7: Пакет7; /*только чтение*/


СоздатьКрХМЛ

Формат вызова:
СоздатьКрХМЛ(НаКлиенте: целое): КрХМЛ; /*только чтение*/


Типы модуля "Криптография"

КрДайджест

описание:
Объект, представляющий собой криптографический дайджест. Криптодайджест представляет собой дайджест - результат выполнения хэширующей функции над блоком данных. Кроме дайджеста, криптодайджест несет информацию об алгоритме, который был использован для его вычисления.

функции объекта:

  Алгоритм
  КопияБуфера
  Равен
  СформироватьЗапросШтампаВремени
  ТекстОшибки
  Содержит

Алгоритм

Формат вызова:
КрДайджест.Алгоритм: строка; /*только чтение*/

описание:
Алгоритм хэш функции, при помощи которой был вычислен дайджест. Алгоритм представляется в формате oid, например - '1.2.840.113549.2.5', что означает MD5 хэш.


КопияБуфера

Формат вызова:
КрДайджест.КопияБуфера(Буф: Буфер): Буфер; /*только чтение*/

описание:
Копия значения вычисленного дайджеста, в бинарном формате. Копия означает то, что дальнейшие действия над буфером не изменят содержимое буфера, хранимого в самом объекте.


Равен

Формат вызова:
КрДайджест.Равен(Дайджест: КрДайджест): целое; /*только чтение*/


СформироватьЗапросШтампаВремени

Формат вызова:
КрДайджест.СформироватьЗапросШтампаВремени(Политика: строка; Сертификат, Метка: целое): Буфер; /*только чтение*/


ТекстОшибки

Формат вызова:
КрДайджест.ТекстОшибки: строка; /*только чтение*/


Содержит

Формат вызова:
КрДайджест.Содержит(Буф: Буфер): целое; /*только чтение*/


КрХэш

описание:
Объект, представляющий собой криптографический хэш. Криптографический хэш представляет собой функцию, вычисляющую дайджест для произвольного блока данных. Для блока данных произвольного размера, размер дайджеста всегда одинаков и зависит от алгоритма использованной хэш функции.

пример использования:

функция ТестКрХэш(НаКлиенте: Целое);
переменные
  Хэш: КрХэш;
  Дайджест: КрДайджест;
  Буф, Рез: Буфер;
начало
  Хэш := СоздатьКрХэшПоИмени(НаКлиенте, Oid_gost2012_256);
  Буф := СоздатьБуфер;
  Буф.ЗагрузитьИзФайла("C:\Temp\bs.xml");
  Дайджест := Хэш.Вычислить(Буф);
  если Дайджест тогда
  начало
    Рез := Дайджест.КопияБуфера;
    ВывестиТекст("Получен дайджест ", Дайджест.Алгоритм, " размером ", Рез.Размер, ", содержимое:");
    ВывестиТекст(Рез.ТекстBase64);
  конец
  иначе
    ВывестиТекст("Ошибка при вычислении дайджеста: ", Хэш.ТекстОшибки);
конец;

функции объекта:

  Вычислить
  ТекстОшибки
  Имя

Вычислить

Формат вызова:
КрХэш.Вычислить(Данные: Буфер): КрДайджест; /*только чтение*/

описание:
Функция вычисления криптографического дайджеста над заданным блоком данных.

результат:
Объект "криптографический дайджест" в случае успеха, в случае ошибки 0.


ТекстОшибки

Формат вызова:
КрХэш.ТекстОшибки: строка; /*только чтение*/

описание:
Текстовая информация о последней ошибке. Удачное выполнение операции над объектом очищает предыдущее значение.


Имя

Формат вызова:
КрХэш.Имя: строка; /*только чтение*/


Сертификат509

описание:
Объект, представляющий собой криптографическую структуру X509, иными словами - публичный сертификат.

пример использования:

функция ТестСертификат509(НаКлиенте, КакСистема: Целое);
переменные
  Буф: Буфер;
  Серт: Сертификат509;
  П: Подпись7;
  С: Строка;
  Ошиб, Статус: Целое;
  ДатаВремя: Дробное;
начало
  Буф := СоздатьБуфер;
  Буф.ЗагрузитьИзФайла("C:\Temp\private-cp-2012-256-b.cer");
  Серт := СоздатьСертификат509(НаКлиенте, КакСистема);
  Ошиб := Серт.ЗагрузитьИзБуфера(Буф);
  если Ошиб = 0 тогда
  начало
    ВывестиТекст("Серийный номер: ", Серт.СерийныйНомер, ", Алгоритм подписи: ", Серт.АлгоритмПодписи);
    ВывестиТекст("Субъект: ", Серт.Субъект("CN"), ", Издатель: ", Серт.Издатель("CN"));
    С := Серт.АдрКорневогоСертификата;
    пока С делать
    начало
      ВывестиТекст("Коневой сертификат можно взять здесь: ", С);
      С := Серт.СледующийАдрКорневогоСертификата;
    конец;
    С := Серт.АдрСпискаОтзывов;
    пока С делать
    начало
      ВывестиТекст("Список отзывов можно взять здесь: ", С);
      С := Серт.СледующийАдрСпискаОтзывов;
    конец;
    Ошиб := Серт.ЗагрузитьПоНомеру(Серт.СерийныйНомер);
    если Ошиб = 0 тогда
    начало
      Ошиб := Серт.ПроверитьСертификат(Статус, 0, 0, 0, 0);
      если Ошиб = 0 тогда
      начало
        ВывестиТекст("Статус сертификата сейчас: ", Статус);
      конец
      иначе
        ВывестиТекст("Ошибка при выполнении операции: ", Ошиб, ", описание: ", Серт.ТекстОшибки);
      Буф.ЗагрузитьИзФайла("C:\Temp\bs.xml");
      ВывестиТекст("Пробуем подписать буфер:");
      ВывестиТекст(Буф.Читать(Буф.Размер));
      П := Серт.Подписать(Буф, ТекущаяДата, "");         
      если П тогда
      начало
        ВывестиТекст("Документ подписан, размер подписи: ", П.КопияБуфера.Размер);
        ДатаВремя := П.ДатаВремя(Серт.КопияБуфера); 
        ВывестиТекст("Дата подписания: ", ДатаВСтроку(ДатаВремя), " ", ВремяВСтроку(ДатаВремя));
        Ошиб := Серт.ПроверитьСертификат(Статус, ДатаВремя, 0, 0, $20000000);
        если Ошиб = 0 тогда
        начало
          ВывестиТекст("Статус сертификата на ", ДатаВСтроку(ДатаВремя), " ", ВремяВСтроку(ДатаВремя), ": ", Статус);
          если Статус тогда
            ВывестиТекст(Серт.ТекстОшибки);
          Ошиб := П.ПроверитьПодпись(Буф);
          если Ошиб < 0 тогда
            ВывестиТекст("Ошибка при выполнении операции: ", П.ТекстОшибки)
          иначе если Ошиб > 0 тогда
            ВывестиТекст("Подпись не действительна: ", П.ТекстОшибки)
          иначе 
          начало
            ВывестиТекст("Подпись действительна");
          конец;
        конец
        иначе
          ВывестиТекст("Ошибка при выполнении операции: ", Ошиб, ", описание: ", Серт.ТекстОшибки);
      конец
      иначе
        ВывестиТекст("Ошибка при выполнении операции: ", Серт.ТекстОшибки);
    конец
    иначе
      ВывестиТекст("Ошибка при выполнении операции: ", Ошиб, ", описание: ", Серт.ТекстОшибки);
  конец
  иначе
    ВывестиТекст("Ошибка при выполнении операции: ", Ошиб, ", описание: ", Серт.ТекстОшибки);
конец;

функции объекта:

  АдрКорневогоСертификата
  АдрСпискаОтзывов
  АлгоритмПодписи
  ЗагрузитьИзБуфера
  ЗагрузитьПоНомеру
  Издатель
  КакБуфер
  Подписать
  ПроверитьСертификат
  СерийныйНомер
  СледующийАдрКорневогоСертификата
  СледующийАдрСпискаОтзывов
  Субъект
  ТекстОшибки
  Хэш
  КопияБуфера
  Зашифровать7
  Начало
  Окончание
  Подписать7
  Проверить7
  Расшифровать7
  РодительскийСерийник
  ПодписатьДайджест

АдрКорневогоСертификата

Формат вызова:
Сертификат509.АдрКорневогоСертификата: строка; /*только чтение*/

описание:
Функция начала итерации по списку адресов корневых сертификатов данного сертификата. Данный список предоставляется необязательным расширением, входящим в состав сертификата. В связи с этим, списка адресов корневых сертификатов может и не быть.

результат:
Пустая строка в случае ошибки или отсутствия информации, адрес точки распространения корневого сертификата в случае успеха.


АдрСпискаОтзывов

Формат вызова:
Сертификат509.АдрСпискаОтзывов: строка; /*только чтение*/

описание:
Функция начала итерации по списку адресов ресурсов, предоставляющих CRL. Каждый издатель ведет, обновляет и предоставляет доступ к списку отозванных сертификатов (CRL). Данный список предоставляется обязательным расширением, входящим в состав сертификата. Отсутствие информации о точках распространения списка отзывов в сертификате это повод задуматься о доверии к такому сертификату.

результат:
Пустая строка в случае ошибки, адрес точки распространения списка отзывов в случае успеха.


АлгоритмПодписи

Формат вызова:
Сертификат509.АлгоритмПодписи: строка; /*только чтение*/

описание:
Алгоритм подписи, формируемой закрытой частью частью данного сертификата в формате oid, например - '1.2.643.7.1.1.3.2' означает ГОСТ-2012-256.

результат:
Пустая строка в случае ошибки, идентификатор алгоритма в формате oid в противном случае.


ЗагрузитьИзБуфера

Формат вызова:
Сертификат509.ЗагрузитьИзБуфера(Буф: Буфер): целое; /*только чтение*/

описание:
Функция инициализации объекта загрузкой данных в бинарном формате (X509 ASN1 DER) из буфера.

результат:
В случае успеха - 0, в случае ошибки - код ошибки.


ЗагрузитьПоНомеру

Формат вызова:
Сертификат509.ЗагрузитьПоНомеру(Номер, Хранилище: строка): целое; /*только чтение*/

описание:
Функция инициализации объекта поиском и загрузкой заданного сертификата из системного хранилища сертификатов.

результат:
В случае успеха - 0, в случае ошибки - код ошибки.


Издатель

Формат вызова:
Сертификат509.Издатель(Ид: строка): строка; /*только чтение*/

описание:
Функция получения информации об издателе сертификата.

результат:
Пустая строка в случае ошибки или отсутствия информации, значение в случае успеха.


КакБуфер

Формат вызова:
Сертификат509.КакБуфер: Буфер; /*только чтение*/

описание:
Копия бинарного представления сертификата (X509 ASN1 DER).

результат:
Объект в случае успеха, в случае ошибки - 0.


Подписать

Формат вызова:
Сертификат509.Подписать(Буф: Буфер; ДатаВремя: дробное; Пин: строка): Подпись7; /*только чтение*/

описание:
Функция формирования отсоединенной подписи для заданного блока данных.

результат:
Объект в случае успеха, в случае ошибки - 0.


ПроверитьСертификат

Формат вызова:
Сертификат509.ПроверитьСертификат(Статус: целое; ДатаВремя: дробное; ЛимитВремениНаОбновлениеМсек, УстареваниеСпискаОтзывовСек, ОпцииПроверки: целое): целое; /*только чтение*/

описание:
Функция проверки сертификата, представленного данным объектом. Проверка заключается в построении цепочки сертификатов от текущего до корневого, проверки каждого из них с учетом имеющихся списков отзывов, сроков действия и целей сертификатов. Проверка сертификата проводится на определенный момент времени.

результат:
В случае успеха возвращается 0, в случае ошибки - код ошибки. В случае успеха необходима дальнейшая проверка доверия к сертификату путем проверки значения "Статус".


СерийныйНомер

Формат вызова:
Сертификат509.СерийныйНомер: строка; /*только чтение*/

описание:
Функция получения серийного номера сертификата.

результат:
Пустая строка в случае ошибки, значение в случае успеха.


СледующийАдрКорневогоСертификата

Формат вызова:
Сертификат509.СледующийАдрКорневогоСертификата: строка; /*только чтение*/

описание:
Функция продолжения итерации по списку адресов корневых сертификатов данного сертификата.

результат:
Пустая строка в случае ошибки, отсутствия информации или завершения итерации, адрес точки распространения корневого сертификата в случае успеха.


СледующийАдрСпискаОтзывов

Формат вызова:
Сертификат509.СледующийАдрСпискаОтзывов: строка; /*только чтение*/

описание:
Функция продолжения итерации по списку адресов ресурсов, предоставляющих CRL.

результат:
Пустая строка в случае ошибки или завершения итерации, адрес точки распространения списка отзывов в случае успеха.


Субъект

Формат вызова:
Сертификат509.Субъект(Ид: строка): строка; /*только чтение*/

описание:
Функция получения информации о владельце сертификата.

результат:
Пустая строка в случае ошибки или отсутствия информации, значение в случае успеха.


ТекстОшибки

Формат вызова:
Сертификат509.ТекстОшибки: строка; /*только чтение*/

описание:
Текстовая информация о последней ошибке. Удачное выполнение операции над объектом очищает предыдущее значение.


Хэш

Формат вызова:
Сертификат509.Хэш: КрХэш; /*только чтение*/

описание:
Функция получение объекта "криптографический хэш", соответствующего алгоритму подписи, указанного для данного сертификата.

результат:
Объект в случае успеха, в случае ошибки - 0.


КопияБуфера

Формат вызова:
Сертификат509.КопияБуфера(Буф: Буфер): Буфер; /*только чтение*/


Зашифровать7

Формат вызова:
Сертификат509.Зашифровать7(Буф: Буфер): Пакет7; /*только чтение*/


Начало

Формат вызова:
Сертификат509.Начало: дробное; /*только чтение*/


Окончание

Формат вызова:
Сертификат509.Окончание: дробное; /*только чтение*/


Подписать7

Формат вызова:
Сертификат509.Подписать7(Буф: Буфер; ДатаВремя: дробное; Пин: строка): Пакет7; /*только чтение*/


Проверить7

Формат вызова:
Сертификат509.Проверить7(П: Пакет7; [Буф]: Буфер; [ДатаВремя]: дробное): Буфер; /*только чтение*/


Расшифровать7

Формат вызова:
Сертификат509.Расшифровать7(П: Пакет7; [Буф]: Буфер; [Пин]: строка): Буфер; /*только чтение*/


РодительскийСерийник

Формат вызова:
Сертификат509.РодительскийСерийник: строка; /*только чтение*/


ПодписатьДайджест

Формат вызова:
Сертификат509.ПодписатьДайджест(Дайджест: КрДайджест; ДатаВремя: дробное; Пин: строка): Подпись7; /*только чтение*/


Подпись7

описание:
Объект, представляющий собой криптографическую структуру PKCS7-signed, иными словами - отсоединенную подпись.

пример использования:

функция ТестПодпись7(НаКлиенте: Целое);
переменные
  Буф: Буфер;
  П: Подпись7;
  ДатаВремя: Дробное;
  Ошиб: Целое;
начало
  Буф := СоздатьБуфер;
  Буф.ЗагрузитьИзФайла("C:\Temp\pkcs7");
  П := СоздатьПодпись7(НаКлиенте);
  Ошиб := П.ЗагрузитьИзБуфера(Буф);
  если Ошиб = 0 тогда
  начало
    Буф := П.Сертификат;
    пока Буф делать
    начало
      ДатаВремя := П.ДатаВремя(Буф);
      если ДатаВремя тогда
      начало
        ВывестиТекст("Сертификат: размер ", Буф.Размер, ", дата подписания ", ДатаВСтроку(ДатаВремя), ", содержимое:");
        ВывестиТекст(Буф.ТекстBase64);
      конец
      иначе
        ВывестиТекст("Ошибка получения даты подписи сертификатом: ", П.ТекстОшибки);
      Буф := П.СледующийСертификат;        
    конец;
  конец
  иначе
    ВывестиТекст("Ошибка при выполнении операции: ", Ошиб, ", описание: ", П.ТекстОшибки);
конец;

функции объекта:

  ДатаВремя
  ЗагрузитьИзБуфера
  КакБуфер
  ПроверитьПодпись
  Сертификат
  СледующийСертификат
  ТекстОшибки
  КопияБуфера

ДатаВремя

Формат вызова:
Подпись7.ДатаВремя(Серт: Буфер): дробное; /*только чтение*/

описание:
Функция получения информации о времени формирования данной подписи заданным сертификатом. Внутри PKCS7 структуры это время хранится в UTC+0 временной зоне. Данная функция производит коррекцию времени из UTC+0 во временную зону сервера.

результат:
Время подписания в случае успеха, в случае ошибки - 0.


ЗагрузитьИзБуфера

Формат вызова:
Подпись7.ЗагрузитьИзБуфера(Буф: Буфер): целое; /*только чтение*/

описание:
Функция инициализации объекта бинарными данными в виде PKCS7 структуры.

результат:
В случае успеха - 0, в случае ошибки - код ошибки.


КакБуфер

Формат вызова:
Подпись7.КакБуфер: Буфер; /*только чтение*/

описание:
Копия бинарного представления отсоединенной подписи, иными словами - бинарное представление PKCS7 структуры.

результат:
Объект в случае успеха, в случае ошибки - 0.


ПроверитьПодпись

Формат вызова:
Подпись7.ПроверитьПодпись(Буф: Буфер): целое; /*только чтение*/

описание:
Функция, выполняющая проверку подписи, представленной данным объектом по отношению к заданному (подписанному) блоку данных.

результат:
Отрицательное значение в случае ошибки. Значение 0 в случае отсутствия ошибки и положительного результата проверки подписи. Положительное значение в случае отрицательного результата проверки подписи.


Сертификат

Формат вызова:
Подпись7.Сертификат(Буф: Буфер): Буфер; /*только чтение*/

описание:
Функция начала итерации по сертификатам, хранимым в подписи (теоретически, их может быть произвольное количество).

результат:
Объект в случае успеха, в случае ошибки - 0.


СледующийСертификат

Формат вызова:
Подпись7.СледующийСертификат(Буф: Буфер): Буфер; /*только чтение*/

описание:
Функция продолжения интерации по списку сертификатов, хранимых в подписи.

результат:
Объект в случае успеха, в случае ошибки или завершения итерации - 0.


ТекстОшибки

Формат вызова:
Подпись7.ТекстОшибки: строка; /*только чтение*/

описание:
Текстовая информация о последней ошибке. Удачное выполнение операции над объектом очищает предыдущее значение.


КопияБуфера

Формат вызова:
Подпись7.КопияБуфера(Буф: Буфер): Буфер; /*только чтение*/


КрШтампВремени

описание:
Объект, представляющий собой криптографический штамп времени. Штамп времени представляет собой результат запроса сервера штампа времени по определенной процедуре. Сам запрос формируется на основе предварительно вычисленного дайджеста (с указанием дополнительных параметров), пакуется в ASN1 DER TS_REQ структуру и отправляется на сервер метки времени с указанием Content-Type: application/timestamp-query. В случае положительного ответа сервера (200), заголовок Content-Type должен иметь значение "application/timestamp-reply", а тело содержать ASN1 DER TS_RESP структуру. Этот ответ необходимо поместить в объект КрШтампВремени для выполнения дальнейших действий.

пример использования:

функция ТестШтампВремени(НаКлиенте: Целое);
переменные
  Хэш: КрХэш;
  Дайджест: КрДайджест;
  Буф, Рез: Буфер;
  Запрос: СетевойЗапрос;
  Штамп: КрШтампВремени;
начало
  Хэш := СоздатьКрХэшПоИмени(НаКлиенте, Oid_gost2012_256);
  Буф := СоздатьБуфер;
  Буф.ЗагрузитьИзФайла("C:\Temp\bs.xml");
  Дайджест := Хэш.Вычислить(Буф);
  если Дайджест тогда
  начало
    Рез := Дайджест.КопияБуфера;
    ВывестиТекст("Получен дайджест ", Дайджест.Алгоритм, " размером ", Рез.Размер, ", содержимое:");
    ВывестиТекст(Рез.ТекстBase64);
    Рез := Дайджест.СформироватьЗапросШтампаВремени("1.3.6.1.4.1.24138.1.1.5.3", 1, 1234);
    если Рез тогда
    начало
      ВывестиТекст("Сформирован запрос размером ", Рез.Размер, ", содержимое:");
      ВывестиТекст(Рез.ТекстBase64);
      Запрос := СоздатьСетевойЗапрос;
      Запрос.Протокол := "HTTP/1.0";
      Запрос.ТипСодержимого := "application/timestamp-query";
      Запрос.Документ.ЗагрузитьИзБуфера(Рез);
      для Запрос.Прокси делать
      начало
        .Адрес := "proxy.krista.ru";
        .Порт := 8080;
        .Пользователь := "";
        .Пароль := "";
      конец;
      для Запрос.Заголовок делать
      начало
        .Добавить("Cache-Control: no-cache");
        .Добавить("Pragma: no-cache");
      конец;
      если Запрос.Выполнить("http://tsp2.taxnet.ru:80/tsp/tsp.srf", "POST") тогда
      начало
        если Запрос.КодОтвета = 200 тогда
        начало
          ВывестиТекст("Получен ответ сервера штампа времени, размер ", Запрос.Документ.Размер);
          Штамп := СоздатьШтампВремени;
          если Штамп.ЗагрузитьИзБуфера(Запрос.Документ) = 0 тогда
          начало
            если (Штамп.Статус = 0) или (Штамп.Статус = 1) тогда
            начало
              ВывестиТекст("=== Штамп времени ===");
              ВывестиТекст("Дата: ", ДатаВСтроку(Штамп.ДатаВремя), ", время: ", ВремяВСтроку(Штамп.ДатаВремя), ", точность: ", ВремяВСтроку(Штамп.Точность));
              ВывестиТекст("Серийный номер штампа: ", Штамп.СерийныйНомер, ", политика: ", Штамп.Политика, ", метка: ", Штамп.Метка);
              ВывестиТекст("Дайджесты совпадают: ", Штамп.Дайджест.Равен(Дайджест));
              ВывестиТекст("Штамп выдан: ", Штамп.Сервис("CN"));
            конец
            иначе
            начало
              ВывестиТекст("Не удалось получить штамп времени: ", Штамп.Статус, ", Отказ: ", Штамп.Отказ);
              если Штамп.Подсказка тогда
                ВывестиТекст("Информация об отказе: ", Штамп.Подсказка);
            конец;   
          конец
          иначе
            ВывестиТекст("Ошибка разбора штампа времени: ", Штамп.ТекстОшибки);              
        конец
        иначе
          ВывестиТекст("Ошибка сервера штампа времени: ", Запрос.СтрокаОтвета);
      конец
      иначе
        ВывестиТекст(Запрос.ТекстОшибки);
    конец
    иначе
      ВывестиТекст("Ошибка формирования запроса штампа времени: ", Дайджест.ТекстОшибки);
  конец
  иначе
    ВывестиТекст("Ошибка при вычислении дайджеста: ", Хэш.ТекстОшибки);
конец;

функции объекта:

  Дайджест
  ДатаВремя
  ЗагрузитьИзБуфера
  КопияБуфера
  Метка
  Отказ
  Подпись
  Подсказка
  Политика
  Сервис
  СерийныйНомер
  Статус
  ТекстОшибки
  Точность

Дайджест

Формат вызова:
КрШтампВремени.Дайджест: КрДайджест; /*только чтение*/

описание:
Штамп времени, в своем составе, содержит копию дайджеста, для которого данный штамп был создан. Данная функция позволяет получить копию дайджеста, дла которого и был создан данный штамп времени.

результат:
Объект в случае успеха, 0 в случае неудачи.


ДатаВремя

Формат вызова:
КрШтампВремени.ДатаВремя: дробное; /*только чтение*/

описание:
Дата и время получения штампа времени. Семантически означает, что предоставленный на подпись документ (точнее - дайджест документа), был создан НЕ ПОЗЖЕ чем в указанный момент времени. Еще более точным является утверждение, что штам времени гарантирует, что документ уже существовал в диапазоне времени [ДатаВремя - Точность, ДатаВремя + Точность].

результат:
Дата и время в случае успеха, 0 в случае неудачи.


ЗагрузитьИзБуфера

Формат вызова:
КрШтампВремени.ЗагрузитьИзБуфера(Буф: Буфер): целое; /*только чтение*/

описание:
Инициализирует объект бинарными данными: ASN1 (DER) структурой TS_RESP, которая представляет собой штамп времени, полученный от сервера штампа времени.

результат:
В случае успеха - 0, в случае ошибки - код ошибки.


КопияБуфера

Формат вызова:
КрШтампВремени.КопияБуфера(Буф: Буфер): Буфер; /*только чтение*/

описание:
Позволяет получить содержимое метки в ремени в бинарном формате (TS_RESP ASN1 DER). В зависимости от параметра, данные будут возвращены либо в копированием в аргумент функции, либо созданием нового буфера и копированием в него.

результат:
Объект в случае успеха, 0 в случае неудачи.


Метка

Формат вызова:
КрШтампВремени.Метка: целое; /*только чтение*/

описание:
Метка представляет совершенно не обязательный, но в ряде случаев полезный способ хранить в составе метки некое целочисленное значение, заданное при запросе штампа времени для документа. Обычно, на это значение накладывается требование уникальности в определенном контексте. Перед использование имеет смысл проконсультироваться.

результат:
0 в случае неудачи или при отсутствии значения метки, значение метки в случае успеха.


Отказ

Формат вызова:
КрШтампВремени.Отказ: целое; /*только чтение*/

описание:
Целочисленный код причины отказа, представляющий собой битовый набор стандарных причин. Предназначен для программного анализа причин отказа и выбора дальнейших действий (т.е. не для прямого показа пользователю соответствующего текста). Рекомендуемая последовательность проверки результата запроса - проверить Статус и, если его значение не 0 и не 1, проверять отказ. В случае отказа никакие поля кроме Статус, Отказ и Подсказка не существуют.


Подпись

Формат вызова:
КрШтампВремени.Подпись: Подпись7; /*только чтение*/

описание:
Штамп времени содержит в своем составе подпись сервера штампа времени, получив которую можно предпринять ряд действий, например, посмотреть сертификат сервера, проверить подпись самой метки времени и прочее. Данная функция позволяет получить подобную подпись.

результат:
Объект в случае успеха, 0 в случае неудачи.


Подсказка

Формат вызова:
КрШтампВремени.Подсказка: строка; /*только чтение*/

описание:
В состав штампа времени входит НЕОБЯЗАТЕЛЬНАЯ текстовая подсказка, позволяющая интерпритировать результат запроса штампа времени (Отказ и Статус). Поскольку данное поле является необязательным, нет смысла ориентироваться на его наличие и выводить пользователю в случае ошибки. Скорее всего, его можно использовать для диагностики проблем.

результат:
Пустая строка в случае неудачи или отсутствия значения, значение подсказки в случае успеха.


Политика

Формат вызова:
КрШтампВремени.Политика: строка; /*только чтение*/

описание:
Политика определяет собой особые условия, в рамках которого был выдан штамп времени. Выбор политики является обязательным условием при запросе штампа времени, нет "политики по-умолчанию". Политика, обычно, представляется в виде OID строки (например "1.2.3") и формируется администрацией сервера штампа времени самостоятельно. Очень часто политика определяет Точность метки времени (смотри комментарии к свойству Точность).


Сервис

Формат вызова:
КрШтампВремени.Сервис(Ид: строка): строка; /*только чтение*/

описание:
Функция, позволяющая получить информацию о сервере штампа времени. Информация получается из состава штампа времени путем запроса по короткому имени (например "emailAddress") или по OID (например "1.2.840.113549.1.9.1").


СерийныйНомер

Формат вызова:
КрШтампВремени.СерийныйНомер: строка; /*только чтение*/

описание:
В состав штампа времени входит серийный номер, выдаваемый сервисом штампа времени. Данный номер является уникальным (скорее всего инкрементальным) для каждого сервера штампа времени. Данная функция позволяет получить серийный номер штампа в виде строки шестнадцатеричных значений.

результат:
Пустая строка в случае неудачи, значение серийного номера в случае успеха.


Статус

Формат вызова:
КрШтампВремени.Статус: целое; /*только чтение*/

описание:
Целочисленный код результата запроса штампа времени. Представляет собой набор стандарных значений. Положительным результатом считаются значения 0 и 1. Рекомендуемая последовательность проверки результата запроса - проверить Статус и, если его значение не 0 и не 1, проверять отказ. В случае отказа никакие поля кроме Статус, Отказ и Подсказка не существуют.


ТекстОшибки

Формат вызова:
КрШтампВремени.ТекстОшибки: строка; /*только чтение*/

описание:
Представляет собой описание ошибки выполнения операции. ТекстОшибки никак не связан с полями Статус, Отказ и Подсказка. Он содержит описание ошибки, возникающей при попытке использования объекта, находящегося в неподходящем для выполнения операции состоянии.


Точность

Формат вызова:
КрШтампВремени.Точность: дробное; /*только чтение*/

описание:
Точность представляет собой необязательное значение, возвращаемое сервером штампа времени в составе штампа времени. Если его значение отлично от нуля, тогда интервал, в котором был сформирован штамп (а значит и подтверждается существование документа) определяется как [ДатаВремя - Точность, ДатаВремя + Точность]. Если Точность не указана, тогда значение точности необходимо брать из политики (т.е. указывать руками, получив ее по описанию политики, полученной от сервиса, предоставляющего услуги сервера штампа времени).

результат:
0 в случае неудачи или при отсутствии заданного значения, значение точности в случае успеха.


Пакет7

функции объекта:

  Алгоритм
  ЗагрузитьИзБуфера
  КопияБуфера
  ПараметрыАлгоритма
  Подпись
  Получатель
  Сертификат
  СледующаяПодпись
  СледующийПолучатель
  СледующийСертификат
  Содержимое
  ТекстОшибки
  Тип
  ТипСодержимого

Алгоритм

Формат вызова:
Пакет7.Алгоритм: строка; /*только чтение*/


ЗагрузитьИзБуфера

Формат вызова:
Пакет7.ЗагрузитьИзБуфера(Буф: Буфер): целое; /*только чтение*/


КопияБуфера

Формат вызова:
Пакет7.КопияБуфера(Буф: Буфер): Буфер; /*только чтение*/


ПараметрыАлгоритма

Формат вызова:
Пакет7.ПараметрыАлгоритма(Буф: Буфер): Буфер; /*только чтение*/


Подпись

Формат вызова:
Пакет7.Подпись: строка; /*только чтение*/


Получатель

Формат вызова:
Пакет7.Получатель: строка; /*только чтение*/


Сертификат

Формат вызова:
Пакет7.Сертификат(Буф: Буфер): Буфер; /*только чтение*/


СледующаяПодпись

Формат вызова:
Пакет7.СледующаяПодпись: строка; /*только чтение*/


СледующийПолучатель

Формат вызова:
Пакет7.СледующийПолучатель: строка; /*только чтение*/


СледующийСертификат

Формат вызова:
Пакет7.СледующийСертификат(Буф: Буфер): Буфер; /*только чтение*/


Содержимое

Формат вызова:
Пакет7.Содержимое(Буф: Буфер): Буфер; /*только чтение*/


ТекстОшибки

Формат вызова:
Пакет7.ТекстОшибки: строка; /*только чтение*/


Тип

Формат вызова:
Пакет7.Тип: строка; /*только чтение*/


ТипСодержимого

Формат вызова:
Пакет7.ТипСодержимого: строка; /*только чтение*/


КрХМЛ

функции объекта:

  ЗагрузитьИзБуфера
  Зашифровать
  ЗначениеПодписи
  КопияБуфера
  Подписать
  ПрименитьШтампВремени
  Проверить
  Расшифровать
  ТекстОшибки

ЗагрузитьИзБуфера

Формат вызова:
КрХМЛ.ЗагрузитьИзБуфера(Буф: Буфер; [Кодировка]: строка; [Опции]: целое): целое; /*только чтение*/


Зашифровать

Формат вызова:
КрХМЛ.Зашифровать(Прив, Пуб: Сертификат509; [Опции]: целое): целое; /*только чтение*/


ЗначениеПодписи

Формат вызова:
КрХМЛ.ЗначениеПодписи(Буф: Буфер; [Узел]: строка): целое; /*только чтение*/


КопияБуфера

Формат вызова:
КрХМЛ.КопияБуфера([Буф]: Буфер; [Кодировка]: строка; [Опции]: целое): Буфер; /*только чтение*/


Подписать

Формат вызова:
КрХМЛ.Подписать(Прив: Сертификат509; [Узел], [Пин]: строка; [Опции]: целое): целое; /*только чтение*/


ПрименитьШтампВремени

Формат вызова:
КрХМЛ.ПрименитьШтампВремени(Штамп: КрШтампВремени; [Узел]: строка; [Опции]: целое): целое; /*только чтение*/


Проверить

Формат вызова:
КрХМЛ.Проверить([Узел]: строка): целое; /*только чтение*/


Расшифровать

Формат вызова:
КрХМЛ.Расшифровать(Прив: Сертификат509; [Пин]: строка; [Опции]: целое): целое; /*только чтение*/


ТекстОшибки

Формат вызова:
КрХМЛ.ТекстОшибки: строка; /*только чтение*/