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

Наш API по криптографии базируется на Windows CryptoAPI.

11.1. Cryptor

class Cryptor

Статический класс, содержит криптографические методы.

CreateHashByCert(ACert: TbtkCryptorCertificate; AAlgID: String = ''): TbtkCryptorHash

Создать экземпляр объекта хеширования в соответствии с указанным сертификатом. Если сертификат обладает закрытым ключём - хешер будет ассоциирован с ним (можно подписать хеш закрытым ключём сертификата - TbtkCryptorHash.Sign())

Parameters:
  • ACert (TbtkCryptorCertificate) -- Сертификат на основании которого будет создан объект хеширования. По умолчанию из сертификата берутся и алгоритм хеширования - согласно указанному в нём алгоритму подписи.
  • AAlgID (String) -- Опциональный параметр. Позволяет указать алгоритм хеширования отличный от того что соответствует алгоритму подписи указанному в сертификате.
Return type:

TbtkCryptorHash

New in version 5.5.0.3950.

CreateProvByType(AType: Integer): TbtkCryptorProvider

Создать новый экземпляр криптопровайдеда, с указанием поддерживаемого функционала.

Parameters:
  • AProvType (Integer) --

    Тип криптопровайдера. Примеры:

    • Стандартные типы, MSDN
    • PROV_GOST_94_DH = 71
    • PROV_GOST_2001_DH = 75
  • AFlags = CRYPT_VERIFYCONTEXT (Integer) -- Флаги создания экземпляра, см. MSDN , параметр dwFlags.
Return type:

TbtkCryptorProvider

New in version 5.5.8.4460.

CreateCertBySign(ASign: blob): TbtkCryptorCertificate

Создаёт экземпляр сертификата по подписи (подпись возвращаемая методом Cryptor.SignMessage())

Parameters:ASign (blob) -- блоб, содержащий подпись
Return type:TbtkCryptorCertificate

New in version 5.5.0.3950.

CreateCertByID(AID: String): TbtkCryptorCertificate

Создаёт экземпляр сертификата с указанным AID - TbtkCryptorCertificate.ID.

Parameters:AID (String) -- ID сертификата
Return type:TbtkCryptorCertificate

Note

  • в случае если такой сертификат не существует - возбуждается исключение.
  • ID может быть получен методом TbtkCryptorCertificate.OpenCertificateDlg(), или у другого экземпляра сертификата через свойство TbtkCryptorCertificate.ID.

New in version 5.5.0.3950.

CreateCertByBlob(AData: blob): TbtkCryptorCertificate

Создаёт экземпляр сертификата безопасности по его бинарному представлению (значение TbtkCryptorCertificate.RawData).

Parameters:AData (blob) -- Описание отсутствует
Return type:TbtkCryptorCertificate

New in version 5.5.0.3950.

CreateCertByDialog(): TbtkCryptorCertificate

Создаёт экземпляр сертификата выбранного пользователем с помощью UI.

Return type:TbtkCryptorCertificate

Note

  • в случае отмены возбуждается исключение EbtkUserCancel.
  • данный способ идеологически заменяет вызов "устаревшего" TbtkCryptorCertificate.OpenCertificateDlg()
  • результат возвращаемый TbtkCryptorCertificate.OpenCertificateDlg() можно получить через свойство TbtkCryptorCertificate.ID

New in version 5.5.0.3950.

EncryptSessionKey(AKey: TbtkCryptorCertificate; ARecipientKey: blob): blob;

Зашифровать сессионный ключ (ключ симметричного шифрования) и закодировать в транспортную ASN1-структуру GostR3410-KeyTransport, см. RFC4490

Parameters:
  • AKey (TbtkCryptorKey) -- Выгружаемый/шифруемый ключ симметричного шифрования
  • ARecipientKey (blob) -- Блоб публичного ключа получателя, в формате выгрузки CSP, см TbtkCryptorKey.Export()

New in version 5.5.8.4460.

DecryptSessionKey(ATransport: blob; APrivateKey: TbtkCryptorKey): TbtkCryptorKey;

Декодировать и расшифровать сессионный ключ из структуры GostR3410-KeyTransport, см. RFC4490

Метод обратный к EncryptSessionKey().

Parameters:
  • ATransport (blob) -- Транспортный блоб, структура GostR3410-KeyTransport
  • APrivateKey (TbtkCryptorKey) -- Приватный ключ для расшифровки декодированного сессионного ключа.
Return type:

TbtkCryptorKey

New in version 5.5.8.4460.

GetRawDataByCertID(CertID: String): Variant

Массив данных сертификата. Возвращается в воде массива байт.

Parameters:CertID (String) -- Идентификатор сертификата. Полученный, например, с помощью OpenCertificateDlg.
Return type:Variant
Пример использования
<pascal>
  CertID := Cryptor.OpenCertificateDlg;
  rawData := Cryptor.GetRawDataByCertID(CertID);

  // красивый вывод на экран
  strRawData := 'RawData = ' + #13#10;

  for i := 0 to length(rawData)-1 do
  begin
    strRawData := strRawData + IntToStr(rawData[i]) + ', ';
    if (i mod 20 = 0) and (i <> 0) then
    strRawData := strRawData + #13#10;
  end;

  ShowMessage(strRawData);
</pascal>

Deprecated since version 5.5.0.3950: Следует использовать TbtkCryptorCertificate.RawData.

CertInfoByCertID(СertID: String; out Issuer: String; out Subject: String; out NotBefore: TDateTime; out NotAfter: TDateTime; out SignatureAlgorithm: String): boolean

Получить данные сертификата по ID

Parameters:
  • CertID (String) -- ID сертификата.
  • Issuer (String) -- out параметр. Наименование организации выдавшей сертификат.
  • Subject (String) -- out параметр. Наименование субъекта которому выдан сертификат.
  • NotBefore (TDateTime) -- out параметр. Дата с которой сертификат считается валидным.
  • NotAfter (TDateTime) -- out параметр. Дата с которой сертификат считается невалидным.
  • SignatureAlgorithm (String) -- out параметр. OID алгоритма подписи сертификата.
Return type:

boolean

CertInfoBySign(Sign: Blob; out Issuer: String; out Subject: String; out NotBefore: TDateTime; out NotAfter: TDateTime; out SignatureAlgorithm: String): boolean
Получить данные сертификата из подписи.
Parameters:
  • Sign (Blob) -- Подпись.
  • Issuer (String) -- out параметр. Наименование организации выдавшей сертификат.
  • Subject (String) -- out параметр. Наименование субъекта которому выдан сертификат.
  • NotBefore (TDateTime) -- out параметр. Дата с которой сертификат считается валидным.
  • NotAfter (TDateTime) -- out параметр. Дата с которой сертификат считается невалидным.
  • SignatureAlgorithm (String) -- out параметр. OID алгоритма подписи сертификата.
Return type:

boolean

CertInfoByBlob(Data: Blob; out Issuer: String; out Subject: String; out NotBefore: TDateTime; out NotAfter: TDateTime; out SignatureAlgorithm: String): boolean

Получить данные сертификата из его бинарного представления (TbtkCryptorCertificate.RawData).

Parameters:
  • Data (Blob) -- Бинарное представление сертификата.
  • Issuer (String) -- out параметр. Наименование организации выдавшей сертификат.
  • Subject (String) -- out параметр. Наименование субъекта которому выдан сертификат.
  • NotBefore (TDateTime) -- out параметр. Дата с которой сертификат считается валидным.
  • NotAfter (TDateTime) -- out параметр. Дата с которой сертификат считается невалидным.
  • SignatureAlgorithm (String) -- out параметр. OID алгоритма подписи сертификата.
Return type:

boolean

GetThumbprintHexStringByCertID(CertID: String): String

Отпечаток сертификата в виде строки шестнадцитиричных цифр без пробелов.

Например:

ca28201a69d921711ba37eac4676028647b5fb12
Parameters:CertID (String) -- Идентификатор сертификата. Полученный, например, с помощью OpenCertificateDlg.
Return type:String
Пример использования
<PASCAL>
  CertID := Cryptor.OpenCertificateDlg;
  thumbPrint := Cryptor.GetThumbprintHexStringByCertID(CertID);
  ShowMessage('Отпечаток выбранного сертификата = ' + thumbPrint);
</PASCAL>

Deprecated since version 5.5.0.3950: Следует использовать TbtkCryptorCertificate.Thumbprint.

VerifyCertFromSignInCRL(sign: String): Boolean

Проверяет наличие сертификата из подписи в списках отозванных.

Parameters:sign (String) -- Описание отсутствует
Return type:Boolean
Пример использования
<pascal>
if VerifyCertFromSignInCRL(sign) then
  ShowMessage('Сертификату, которым была создана данная подпись, можно доверять')
else
  ShowMessage('Сертификат, которым создали данну подпись, был отозван');
</pascal>
VerifyCertInCRL(CertID: String): Boolean

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

Parameters:CertID (String) -- Описание отсутствует
Return type:Boolean
Пример использования
<pascal>
  CertID := Cryptor.OpenCertificateDlg;
  if VerifyCertFromSignInCRL(CertID) then
    ShowMessage('Сертификату можно доверять')
  else
    ShowMessage('Сертификат отозван');
</pascal>
RefreshCRL(ASign, ALog, AForce: String): Boolean

Обновляет списки отозванных сертификатов и обновляет их по необходимости

Если установлен флаг AForce в False, то функция проверяет действие CRL списков и обновляет только по необходимости. Иначе обновляет в любом случае.

Parameters:
  • ASign (String) -- Описание отсутствует
  • ALog (String) -- Описание отсутствует
  • AForce (String) --
Return type:

Boolean

Пример использования
<pascal>
  var
    spLog: string;
  begin
    if RefreshCRL(sign, spLog, true) then
      ShowMessage('Списки были удачно обновлены')
    else
      ShowMessage(spLog);
  end;
</pascal>
IsCRLOutOfDate(sign: String): Boolean

Проверка по дате подписи актуальность списков CRL

Parameters:sign (String) -- Описание отсутствует
Return type:Boolean
Returns:
True
если есть список и дата удовлетворяет
False
нет списка или нужно обновить CRL
Пример использования
<pascal>
  if IsCRLOutOfDate(sign) then
    ShowMessage('Список есть и дата удовлетворяет')
  else
    ShowMessage('Нет списка или он устарел');
</pascal>
LoadCRLByURL(url, crl: String): Boolean

Функция загружает по заданному адресу CRL список.

Parameters:
  • url (String) -- Описание отсутствует
  • crl (String) -- Описание отсутствует
Return type:

Boolean

Пример использования
<pascal>
var
  crl: string;
Begin
  if LoadCRLByURL('http://test.ru/my.crl', crl) then
    ShowMessage('Список отозванных сертификатов загружен')
  else
    ShowMessage('Ошибка загрузки');
end.
</pascal>
AddCRLToRoot(ACrl: blob): Boolean

Добавление списка отозванных в хранилище (по умолчанию в Доверительные корневые центры сертификации) списка отозванных сертификтов.

Parameters:ACrl (blob) -- Описание отсутствует
Return type:Boolean
Пример использования
<pascal>
  var
    crl: text;
  begin
    if LoadCRLByURL('http://aaaaa.ru/new.crl', crl) then
      ShowMessage('crl загружен');

    if AddCRLToRoot(crl) then
      ShowMessage('crl установлен');
  end;
</pascal>
SignMessage(AData, ACertID, ARslt: String): Boolean

Метод создаёт ЭЦП подпись к тексту AData и возвращает её в ARslt. ACertID - серийный номер сертификата, с помощью которого будет создана подпись. Если ACertID будет не указан или не найден, то отобразится диалоговое окно выбора сертификата.

Parameters:
  • Adata (String) -- Описание отсутствует
  • ACertID (String) -- Описание отсутствует
  • ARslt (String) -- Описание отсутствует
Return type:

Boolean

Returns:

True

если подпись создана успешно

False

если при создании произошла ошибка.

Пример использования
<pascal>
  var
    Text, certID, sign: string;
  begin
    Text := 'Hello';
    if cryptor.SignMessage(Text, certID, sign) then
      ShowMessage('Текст подписан.')
    else
      ShowMessage('Не удалось создать подпись.');
  end;
</pascal>
GetDateFromSign(Sign: String; Date: TDateTime): Boolean

Получение даты подписи. По умолчанию при подписании данных ставится дата UTC

Parameters:
  • Sign (String) -- Описание отсутствует
  • Date (TDateTime) -- Описание отсутствует
Return type:

Boolean

Пример использования
<pascal>
  var
    d: TDateTime;
  Begin
    if GetDateFromSign(sign, d) then
      ShowMessage(DateTimeToStr(d));
  end.
</pascal>
VerifyCertificate(ACertID, AMessageError: String): Integer

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

Parameters:
  • ACertID (String) -- серийный номер сертификата
  • AMessageError (String) -- возвращаемое текстовое сообщение в результате не прохождения проверки сертификата
Return type:

Integer

Returns:

0 - в результате успешного прохождения проверки сертификата или код ошибки.

Пример использования
<pascal>
  if Cryptor.VerifyCertificate(VerifyCertID, messageError) = 0 then
    ShowMessage('Сертификат подтверждён')
  else
    ShowMessage('Сертификат не подтверждён: ' + messageError);
</pascal>
VerifyMessage(AData, ASign, ALog: String): Boolean

Метод проверяет на соответствие подписи ASign к сообщению AData.

Parameters:
  • AData (String) -- проверяемое сообщение
  • ASign (String) -- проверяемая ЭЦП к AData
  • ALog (String) -- возвращаемый серийный номер сертификата, с помощью которого была создана ЭЦП
Return type:

Boolean

Returns:

True

результате соответствия ЭЦП к сообщению AData

False

если подпись не подтверждена.

Пример использования
<pascal>
  if Cryptor.VerifyMessage('text', sign, spLog) then
    ShowMessage('Подпись подтверждена!')
  else
    ShowMessage('Подпись не подтверждена! Причина:' + spLog );
</pascal>
OpenCertificateDlg(): String

Открывает диалоговое окно выбора сертификата.

Return type:String
Returns:серийный номер сертификата в шестнадцатеричной системе счисления.
Пример использования
<pascal>
  var
    CertID: string;
  begin
    CertID := Cryptor.OpenCertificateDlg;
    ShowMessage(CertID);
  end.
</pascal>

11.2. TbtkCryptorKey

class TbtkCryptorKey

Объект высокоуровневого взаимодействия с "MS CryptoAPI". Реализует сущность "Ключ шифрования". Служит для шифрования и расшифровывания данных.

New in version 5.5.8.4460.

11.2.1. Все ключи

EncryptData(AData: blob; AHash: TbtkCryptorHash = nil): blob

Зашифровать данные

Parameters:
  • AData (blob) -- Данные для зашифрования
  • AHash = nil (TbtkCryptorHash) -- Хеш данных до зашифрования
DecryptData(AData: blob; AHash: TbtkCryptorHash = nil): blob

Зашифровать данные. Метод обратный к EncryptData()

Parameters:
  • AData (blob) -- Данные для расшифровки
  • AHash = nil (TbtkCryptorHash) -- Хеш расшифрованных данных
Export(ABlobType: Integer; AEncKey: TbtkCryptorKey = nil; AFlags: Integer = 0): blob

Сериализовать (выгрузить) ключ шифрования в указанном формате CSP

Parameters:
  • ABlobType (Integer) --

    Формат предусмотренный CSP для сериализации ключей.

    Доступные варианты:

    • `SIMPLEBLOB` = $1; - сессионный ключ
    • `PUBLICKEYBLOB` = $6; - публичный ключ
    • `PRIVATEKEYBLOB` = $7; - секретный ключ
    • `PLAINTEXTKEYBLOB`  $8; - ключ в открытом формате
    • Также, некоторые CSP могут определять свои форматы.
  • AEncKey = nil (TbtkCryptorKey) -- Ключ которым будет шифроваться сериализованный ключ. Параметр применим, среди стандартных способов сериализации, для выгрузки сессионных ключей.
  • AFlags = 0 (Integer) -- Определяет дополнительные опции выгрузки, см. MSDN , параметр dwFlags
DuplicateKey(): TbtkCryptorKey

Метод создаёт дубликат ключа. Может быть полезно, если ожидается модификация ключа, но в будущем потребуется ключ с изначальными параметрами.

Return type:TbtkCryptorKey
AlgID: string

Алгоритм ключа в представлении OID-идентификатора

AlgID: Integer

Алгоритм ключа в числовом представлении. Не каждому алгоритму ключа будет соответствовать международный стандартизированный идентификатор (Object ID), в связи с чем реализована возможность задать его значение специфичным для CSP.

Например, смешанным (mixture) ключам по алгоритму Диффи-Хеллмана присущ алгоритм выгрузки сессионных ключей, но такие алгоритмы локальной значимости не стандартизируются.

В CSP CryptoPro реализованы два таких алгоритма выгрузки:

  • CALG_PRO_EXPORT = 661F
  • CALG_SIMPLE_EXPORT = 6620
BlockLen: Integer

Свойство присущее ключам блочного шифрования - размер блока шифра, исчисляется в битах.

Может зависеть от CypherMode

Атрибут только для чтения

KeyLen: Integer

Действительная (без учёта выравниваний) длина ключа, в битах.

Атрибут только для чтения

Salt: blob

Значение соли ключа шифрования

11.2.2. Блочные ключи

CypherMode: Integer

Режим шифрования

Стандартные режимы :

  • CBC = 1
  • ECB = 2
  • OFB = 3
  • CFB = 4
  • CTS = 5
  • Могут дополняться (и запрещаться) реализацией используемого CSP
CypherModeBits: Integer

Дополнительный параметр для режимов шифрования CFB и OFB. Количество передаваемых от блока к блоку бит.

Padding: Integer

Способ дополнения блоков блочного шифра

Доступные варианты:

  • PKCS5_PADDING = 1
  • RANDOM_PADDING = 2
  • ZERO_PADDING = 3
Vector: blob

Вектор инициализации (IV) алгоритма блочного шифра

11.2.3. Разрешения ключа

AllowArchive: Boolean

Свойство сообщает, что данный ключ доступен для выгрузки. Но только до момента закрытия объекта ключа. Выставляется флагами при генерации ключа и сбрасывается CSP после (открыв ключ в слелующи раз - будет невыгружаемым)

Атрибут только для чтения

AllowDecrypt: Boolean

Ключ можно использовать в методах дешифрации

Атрибут только для чтения

AllowEncrypt: Boolean

Ключ можно использовать в методах шифрования

Атрибут только для чтения

AllowExport: Boolean

Ключ можно выгрузить в открытом виде.

Атрибут только для чтения

AllowExportKey: Boolean

ключ может использоваться для шифрования экспортируемых ключей

Атрибут только для чтения

AllowImportKey: Boolean

ключ может использоваться для расшифровки импортируемых ключей

Атрибут только для чтения

AllowRead: Boolean

Значение CRYPT_READ бита в параметре KP_PERMISSIONS.

Атрибут только для чтения

AllowWrite: Boolean

Значение CRYPT_WRITE бита в параметре KP_PERMISSIONS.

Атрибут только для чтения

11.3. TbtkCryptorHash

class TbtkCryptorHash

Объект высокоуровневого взаимодействия с "MS CryptoAPI". Реализует сущность "Хешер".

Время жизни управляется счётчиком ссылок :

  • освобождается простым занулением переменной где он хранится
  • можно смело передавать его между операциями и выборками, даже асинхронными

New in version 5.5.0.3950.

Value(): blob

Получить рассчитанный хеш данных.

Return type:blob

Attention

после вызова - хеш изменить будет невозможно TbtkCryptorHash.HashData()

Sign(): blob

Подписать рассчитанный хеш (TbtkCryptorHash.Value) данных ассоциированным с хешером набором ключей шифрования(TbtkCryptorHash.Keyset)

Return type:blob
Raises:Если ключи не ассоциированы с хешером (Keyset = TbtkCryptKeyset.ckNone).

Attention

после вызова - хеш изменить будет невозможно TbtkCryptorHash.HashData()

VerifySign(ASign: blob; APubKey: TbtkCryptorKey; AFlags = 0): Boolean

Проверить подпись на соответствие хешу. Результат True - фактическое подтверждение, что держатель сертификата (которому принадлежит публичный ключ) подтверждает целостность (неизменённость) данных, по которым рассчитан хеш.

Parameters:
  • ASign (blob) -- Значение цифровой подписи.
  • APubKey (TbtkCryptorKey) -- Публичный ключ сертификата, которым подписаны данные.
  • AFlags (Integer) -- Управляющие флаги, необязательный параметр. Использование флагов регламентируется конкретной реализацией CSP. В подавляющем большинстве случаев их передача не требуется.
Пример использования
<PASCAL>
  cert := Cryptor.CreateCertByDialog;
  hash := Cryptor.CreateHashByCert(cert);
  hash.HashData([1,2,3,4,5,6]);
  sig := hash.Sign;
  hash := nil;

  newOneHash := Cryptor.CreateHashByCert(cert);
  newOneHash.HashData([1,2,3,4,5,6]);

  ok := newOneHash.VerifySign(sig, cert.Provider.CreateKeyByPublic(cert));
</PASCAL>
Keyset(): TbtkCryptKeyset

Набор ключей который будет использован для подписания (TbtkCryptorHash.Sign) хеша.

Return type:TbtkCryptKeyset

Note

если ключи не ассоциированы с хешером (TbtkCryptKeyset.ckNone) - метод TbtkCryptorHash.Sign возбудит исключение.

HashData(AData: blob)

Метод хеширует указанные данные.

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

Parameters:AData (blob) -- Очередной блоб данных для хеширования.

Note

добавлять порции в хеш можно до тех пор пока не будет вызван метод получения хеша (TbtkCryptorHash.Value или TbtkCryptorHash.Sign).

HashSessionKey(AKey: TbtkCryptorKey)

Добавить к значению хеша данные ключа шифрования.

Param:

TbtkCryptorKey AKey

Ключ симметричного шифрования

New in version 5.5.8.4460.

11.4. TbtkCryptorProvider

class TbtkCryptorProvider

Объект высокоуровневого взаимодействия с "MS CryptoAPI". Объект доступа к хранилищу секретных ключей с использованием выбранного (по типу реализуемого функционала, или иным признакам) CSP(алгоритмов).

New in version 5.5.8.4460.

CreateHash(AAlgID: string): TbtkCryptorHash

Создать новый объект хеширования

Parameters:AAlgID (string) --

OID алгоритма хеширования.

Примеры:

  • szOID_RSA_MD5 = "1.2.840.113549.2.5"
  • szOID_RSA_SHA1RSA = "1.2.840.113549.1.1.5"
  • szOID_CP_GOST_R3411 = "1.2.643.2.2.9"
Return type:TbtkCryptorHash
CreateKeyByPrivate(AKeySet: TbtkCryptKeyset = ckKeyExchange): TbtkCryptorKey

Создать объект секретного ключа из контейнера с которым ассоциирован провайдер

Parameters:AKeySpec = ckKeyExchange (TbtkCryptKeyset) -- Указывает из какой пары ключ. Ключ обмена данными, или подписания данных. По умолчанию, как наиболее востребованный,- ключ обмена данными.
Raises:Если ключ запрошенного типа отсутствует в провайдере.
Return type:TbtkCryptorKey
CreateKeyByPublic(ACert: TbtkCryptorCertificate): TbtkCryptorKey

Создать объект публичного ключа из сертификата безопасности разместив ключ в провайдере

Parameters:ACert (TbtkCryptorCertificate) -- Сертификат, из которого будет загружен публичный ключ
Return type:TbtkCryptorKey
CreateKeyByImport(AKeyBlob: blob; AEncKey: TbtkCryptorKey = nil; AFlags: Integer = CRYPT_EXPORTABLE): TbtkCryptorKey

Загрузить ключевой блоб в криптопровайдер. Тип ключа и параметры определяются самим блобом. Метод комплементарен TbtkCryptorKey.Export().

Parameters:
  • AKeyBlob (blob) -- Сериализованный CSP ключ шифрования
  • AEncKey = nil (TbtkCryptorKey) -- Ключ которым зашифрован AKeyBlob. Необходимость в ключе шифрования определяется типом загружаемого ключа и алгоритмами CSP. Для загрузки блобов публичных ключей ключ шифрования не требуется.
  • AFlags = CRYPT_EXPORTABLE (integer) -- Флаги создания ключа, см. MSDN , параметр dwFlags.
Return type:

TbtkCryptorKey

CreateKeyByGenKey(AAlgID: string; AFlags: integer = CRYPT_EXPORTABLE): TbtkCryptorKey

Сгенерировать новый ключ со случайными параметрами по указанному алгоритму.

Parameters:
  • AAlgID (string) -- Алгоритм ключа. Например, 1.2.643.2.2.21 - ключ симметричного шифрования, ГОСТ 28147.
  • AFlags = CRYPT_EXPORTABLE (integer) -- Флаги создания ключа, см. MSDN , параметр dwFlags.
Return type:

TbtkCryptorKey

CreateKeyByHash(AAlgID: string; AHash: TbtkCryptorHash; AFlags: Integer = CRYPT_EXPORTABLE): TbtkCryptorKey

Создать новый ключ шифрования по данным хеша

Parameters:
  • AAlgID (string) -- Алгоритм ключа. Например, 1.2.643.2.2.21 - ключ симметричного шифрования, ГОСТ 28147.
  • AHash (TbtkCryptorHash) -- Хеш-объект из значения которого будет сконструирован ключ. Для одинаковых хешей будут сконкструированы одинаковые ключи.
  • AFlags = CRYPT_EXPORTABLE (integer) -- Флаги создания ключа, см. MSDN , параметр dwFlags.
Return type:

TbtkCryptorKey

KeyExchangeKeySetExists: Boolean

Содержатся ли в контейнере ключи обмена данными.

Атрибут только для чтения

SignatureKeySetExists: Boolean

Содержатся ли в контейнере ключи подписания данных.

Атрибут только для чтения

11.5. TbtkCryptorCertificate

class TbtkCryptorCertificate

Объект высокоуровневого взаимодействия с "MS CryptoAPI". Реализует сущность "Сертификат безопасности".

Время жизни управляется счётчиком ссылок :

  • освобождается простым занулением переменной где он хранится
  • можно смело передавать его между операциями и выборками, даже асинхронными
Thumbprint: blob

Хеш бинарного представления сертификата (TbtkCryptorCertificate.RawData) рассчитанный алгоритмом SHA1.

Return type:blob
SerialNumber: blob

Пордяковый номер сертификата присвоенный ему издателем. Integer неограниченной длинны (в нотации BigEndian).

Return type:blob
RawData: blob

Бинарное представление сертификата.

Return type:blob
SignatureAlgorithm: String

OID алгоритма подписи сертификата.

Return type:String
PublicKeyAlgorithm: String

OID алгоритма хеширования публичного ключа.

Return type:String
NotBefore: date

Дата с которой сертификат считается валидным.

Return type:date
NotAfter: date

Дата с которой сертификат считается невалидным.

Return type:date
KeepLoggedIn: Boolean
True
Не перезапрашивать пароль на доступ к хранилищу закрытого ключа.
False
При каждом обращении к закрытому ключу сертификата будет запрашиваться пароль от хранилища.
Return type:Boolean
ID: String

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

Return type:String
SubjectName(AFormat: TbtkCertNameFormat = cnfX500; AFlags: Variant = null): String

Наименование субъекта которому выдан сертификат.

Parameters:
  • AFormat (TbtkCertNameFormat) -- Представление в котором будет возвращено имя.
  • AFlags (Variant) -- Зарезервировано. Не используется. Управляющие флаги, могут использоваться различные значения в зависимости от используемого представления.
Return type:

String

IssuerName(AFormat: TbtkCertNameFormat = cnfX500; AFlags: Variant = null): String

Наименование организации выдавшей сертификат.

Parameters:
  • AFormat (TbtkCertNameFormat) -- Представление в котором будет возвращено имя.
  • AFlags (Variant) -- Зарезервировано. Не используется. Управляющие флаги, могут использоваться различные значения в зависимости от используемого представления.
Return type:

String

Provider: TbtkCryptorProvider

Хранилище приватных ключей сертификата. Если с сертификатом не ассоциированно такого хранилища - генерируется исключение.

Атрибут только для чтения

Return type:TbtkCryptorProvider

11.6. TbtkCertNameFormat

class TbtkCertNameFormat

Перечисление. Формат в котором представлено наименование сертификата.

cnfX500

Имя формируется по правилам определённым Microssoft в CryptoAPI. При формировании используются заголовки (буквенные обозначения) параметров имени.

cnfOid

Имя формируется по правилам определённым Microssoft в CryptoAPI. При формировании используются OID параметров имени.

cnfSimple

Имя формируется по правилам определённым Microssoft в CryptoAPI. Формируется из одних только значений параметров, без заголовков.

cnfRFC1779

Имя формируется в точном соответствии RFC1779, без лирических отступлений Microsoft от стандарта.

11.7. TbtkCryptKeyset

class TbtkCryptKeyset

Перечисление. Набор ключей шифрования.

See also

  • TbtkCryptorHash.Keyset
ckKeyExchange

Набор ключей для обмена данными. Также подходит и для подписывания данных (более широкий чем TbtkCryptKeyset.ckSignature)

ckSignature

Набор ключей для подписывания данных. Вместо него также может использоваться набор ключей TbtkCryptKeyset.ckKeyExchange

ckNone

Набор ключей шифрования отсутствует.