Криптография¶
Warning
Не поддерживается в Application Server
Наш API по криптографии базируется на Windows CryptoAPI.
See also
Cryptor¶
- class Cryptor¶
Статический класс, содержит криптографические методы.
See also
- CreateHashByCert(Cert: TbtkCryptorCertificate; AlgID: String = '') TbtkCryptorHash ¶
Создать экземпляр объекта хеширования в соответствии с указанным сертификатом. Если сертификат обладает закрытым ключём - хешер будет ассоциирован с ним (можно подписать хеш закрытым ключём сертификата -
TbtkCryptorHash.Sign()
)- Parameters:
Cert (
TbtkCryptorCertificate
) – Сертификат на основании которого будет создан объект хеширования. По умолчанию из сертификата берутся и алгоритм хеширования - согласно указанному в нём алгоритму подписи.AlgID (
String
) – Опциональный параметр. Позволяет указать алгоритм хеширования отличный от того что соответствует алгоритму подписи указанному в сертификате.
- Return type:
TbtkCryptorHash
New in version 5.5.0.3950.
- CreateProvByType(Type: Integer) TbtkCryptorProvider ¶
Создать новый экземпляр криптопровайдеда, с указанием поддерживаемого функционала.
- Parameters:
- Return type:
New in version 5.5.8.4460.
- CreateCertBySign(Sign: Blob) TbtkCryptorCertificate ¶
Создаёт экземпляр сертификата по подписи (подпись возвращаемая методом
Cryptor.SignMessage()
)- Parameters:
Sign (
Blob
) – блоб, содержащий подпись- Return type:
New in version 5.5.0.3950.
- CreateCertByID(ID: String) TbtkCryptorCertificate ¶
Создаёт экземпляр сертификата с указанным ID -
TbtkCryptorCertificate.ID
.- Parameters:
ID (
String
) – ID сертификата- Return type:
Note
в случае если такой сертификат не существует - возбуждается исключение.
ID может быть получен методом
TbtkCryptorCertificate.OpenCertificateDlg()
, или у другого экземпляра сертификата через свойствоTbtkCryptorCertificate.ID
.
New in version 5.5.0.3950.
- CreateCertByBlob(Data: Blob) TbtkCryptorCertificate ¶
Создаёт экземпляр сертификата безопасности по его бинарному представлению (значение
TbtkCryptorCertificate.RawData
).- Parameters:
Data (
Blob
) – Бинарное представление сертификата безопасности.- Return type:
New in version 5.5.0.3950.
- CreateCertByDialog() TbtkCryptorCertificate ¶
Создаёт экземпляр сертификата выбранного пользователем с помощью UI.
- Return type:
Note
в случае отмены возбуждается исключение EbtkUserCancel.
данный способ идеологически заменяет вызов “устаревшего”
TbtkCryptorCertificate.OpenCertificateDlg()
результат возвращаемый
TbtkCryptorCertificate.OpenCertificateDlg()
можно получить через свойствоTbtkCryptorCertificate.ID
New in version 5.5.0.3950.
- EncryptSessionKey(Key: TbtkCryptorCertificate; RecipientKey: Blob) Blob ¶
Зашифровать сессионный ключ (ключ симметричного шифрования) и закодировать в транспортную ASN1-структуру GostR3410-KeyTransport, см. RFC4490
- Parameters:
Key (
TbtkCryptorKey
) – Выгружаемый/шифруемый ключ симметричного шифрованияRecipientKey (
Blob
) – Блоб публичного ключа получателя, в формате выгрузки CSP, смTbtkCryptorKey.Export()
New in version 5.5.8.4460.
- DecryptSessionKey(Transport: Blob; PrivateKey: TbtkCryptorKey) TbtkCryptorKey ¶
Декодировать и расшифровать сессионный ключ из структуры GostR3410-KeyTransport, см. RFC4490
Метод обратный к
EncryptSessionKey()
.- Parameters:
Transport (
Blob
) – Транспортный блоб, структура GostR3410-KeyTransportPrivateKey (
TbtkCryptorKey
) – Приватный ключ для расшифровки декодированного сессионного ключа.
- Return type:
New in version 5.5.8.4460.
- GetRawDataByCertID(CertID: String) Blob ¶
Массив данных сертификата. Возвращается в виде массива байт.
- Parameters:
CertID (
String
) – Идентификатор сертификата. Полученный, например, с помощьюCryptor.OpenCertificateDlg()
.- Return type:
Blob
Пример использования¶<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
) – Идентификатор сертификата. Полученный, например, с помощьюCryptor.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: Blob) Boolean ¶
Проверяет наличие сертификата из подписи в списках отозванных.
- Parameters:
Sign (
Blob
) – ЭЦП.- 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(Sign: Blob; Log: Sting; Force: Boolean) Boolean ¶
Обновляет списки отозванных сертификатов.
- Parameters:
Sign (
Blob
) – ЭЦП.Log (
String
) – Строка, в которую будет записана информация об ошибках при их наличии.Force (
Boolean
) – Если установлен в False, то функция проверяет действительность списка отозванных сертификатов и обновляет его только при необходимости, иначе обновляет без проверки.
- Return type:
Boolean
Пример использования¶<pascal> var spLog: string; begin if RefreshCRL(sign, spLog, true) then ShowMessage('Списки были удачно обновлены') else ShowMessage(spLog); end; </pascal>
- IsCRLOutOfDate(Sign: Blob) Boolean ¶
Проверка актуальности списка отозванных сертификатов.
- Parameters:
Sign (
Blob
) – Подпись- Return type:
Boolean
- Returns:
- False
Список актуален.
- True
Нет списка или он устарел.
Пример использования¶<pascal> if IsCRLOutOfDate(sign) then ShowMessage('Нет списка или он устарел'); else ShowMessage('Список актуален'); </pascal>
- LoadCRLByURL(Url: String; out Crl: Blob) Boolean ¶
Функция загружает по заданному адресу список отозванных сертификатов.
- Parameters:
Url (
String
) – URL адрес, с которого загружается список сертификатов.Crl (
Blob
) – out параметр. Cписок сертификатов.
- Return type:
Boolean
Пример использования¶<pascal> var crl: string; Begin if LoadCRLByURL('http://test.ru/my.crl', crl) then ShowMessage('Список отозванных сертификатов загружен') else ShowMessage('Ошибка загрузки'); end. </pascal>
- AddCRLToRoot(Crl: Blob) Boolean ¶
Добавление списка отозванных сертификатов в хранилище “Доверенные корневые центры сертификации”.
- Parameters:
Crl (
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(Data: Variant; CertID: String; out Sign: Blob; DetachedSignature: boolean = True)¶
Подписывает переданные данные указанным сертификатом. Если подписать не удаётся возбуждается исключение.
Note
Метод не предполагает возвращение результата, кроме подписи возвращаемой через out параметр. Из-за ошибки допущенной при реализации, метод изначально возвращал
True
. В старой прикладной логике может встречаться проверка возвращаемого результата, такой код будет работать и в этом клиенте. В целях совместимости метод всё ещё возвращает True. Но пользы от этих проверок нет.- Parameters:
Data (
Variant
) –Данные для подписания. Blob, либо строка.
Attention
Не рекомендуется передавать в метод строку. Нет гарантии что кодировки строк на подписывающей и верифицирующей стороне будут совпадать.
CertID (
String
) – Идентификатор сертификата, либо пустая строка. Если передана пустая строка либо сертификат по указанному ID не найден, отобразится диалоговое окно выбора сертификата.Sign (
Blob
) – Сформированная ЭЦП.DetachedSignature (
boolean
) –Подписать с откреплённой подписью.
Необязательный параметр. Значение по-умолчанию -
True
Changed in version Global_5.10.0_ms5: Добавлена возможность подписывать Blob
Changed in version Global_5.12.0_ms14: Добавлен параметр DetachedSignature
Пример использования¶<pascal> blob := StringToBlob('Some text', 65001); cryptor.SignMessage(blob, certID, sign); </pascal>
- GetDateFromSign(Sign: Blob; out Date: TDateTime) Boolean ¶
Получение даты подписи. По умолчанию при подписании данных ставится дата UTC
- Parameters:
Sign (
Blob
) – ЭЦП.Date (
TDateTime
) – out параметр. Дата подписи.
- Return type:
Boolean
Пример использования¶<pascal> var d: TDateTime; Begin if GetDateFromSign(sign, d) then ShowMessage(DateTimeToStr(d)); end. </pascal>
- VerifyCertificate(CertID, MessageError: String) Integer ¶
Проверка сертификата на возможность его использовать, а именно: даты действия, построение цепочки сертификатов и т.д.
- Parameters:
CertID (
String
) – серийный номер сертификатаMessageError (
String
) – возвращаемое текстовое сообщение в результате не прохождения проверки сертификата
- Return type:
Integer
- Returns:
0 - в результате успешного прохождения проверки сертификата или код ошибки.
Пример использования¶<pascal> if Cryptor.VerifyCertificate(VerifyCertID, messageError) = 0 then ShowMessage('Сертификат подтверждён') else ShowMessage('Сертификат не подтверждён: ' + messageError); </pascal>
- VerifyMessage(Data: Variant; Sign: Blob; Log: String; DetachedSignature: Boolean) Boolean ¶
Метод верифицирует ЭЦП.
- Parameters:
Data (
Variant
) –Данные для проверки. Blob, либо строка.
Attention
Не рекомендуется передавать строку. Нет гарантии что кодировки строк на подписывающей и верифицирующей стороне будут совпадать.
Sign (
Blob
) – Проверяемая ЭЦПLog (
String
) – В случае успеха содержит серийный номер сертификата, с помощью которого была создана ЭЦП, либо текст ошибки в противном случае.DetachedSignature (
Boolean
) –Проверяемая ЭЦП подписана с откреплённой подписью.
Необязательный параметр. Значение по-умолчанию -
True
.
- Return type:
Boolean
- Returns:
- True
Подпись подтверждена.
- False
Подпись не подтверждена.
Changed in version Global_5.10.0_ms5: Добавлена возможность верифицировать подпись для Blob
Changed in version Global_5.12.0_ms15: Добавлен параметр DetachedSignature
Пример использования¶<pascal> if Cryptor.VerifyMessage(data, 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>
- SignAndEncryptMessage(BlobToSignAndEncrypt: Blob; SignerCert, RecipientCert: TbtkCryptorCertificate; EncryptionAlgorithm: String) TbtkSignAndEncryptMessageResult ¶
Подписывает и зашифровывает данные в формате PKCS #7.
- Parameters:
BlobToSignAndEncrypt (
Blob
) – Данные для подписания и зашифрования.SignerCert (
TbtkCryptorCertificate
) – Сертификат отправителя. Этим сертификатом данные будут подписаны.RecipientCert (
TbtkCryptorCertificate
) – Сертификат получателя. Данные будут зашифрованы с помощью открытого ключа из этого сертификата.EncryptionAlgorithm (
String
) – OID алгоритма шифрования.
- Return type:
Пример использования¶<pascal> var res: TbtkSignAndEncryptMessageResult; begin res := Cryptor.SignAndEncryptMessage(blobToSignAndEncrypt, signerCert, recipientCert, encryptionAlgorithm); if res.IsSuccessful then ProcessEncryptedData(res.SignedAndEncryptedBlob) else Raise(Format('Не удалось зашифровать или подписать сообщение.'#13#10#13#10'Код ошибки:'#13#10' $%x'#13#10'Текст ошибки:'#13#10' "%s"', [res.ErrorCode, res.ErrorMessage])); end; </pascal>
New in version Global_5.9.0.
- DecryptAndVerifyMessageSignature(SignedAndEncryptedBlob: Blob; CertStores: array of String = ['CA', 'MY', 'ROOT']; SignerIndex: Integer = 0) TbtkDecryptAndVerifyMessageSignatureResult ¶
Расшифровывает данные из PKCS #7 и проверяет подпись.
Указание сертификатов для проверки подписи и расшифрования не поддерживается. Требуемые сертификаты будут искаться в хранилищах указанных в параметре
CertStores
и при успешном завершении вызова будут возвращены в качестве результата.- Parameters:
SignedAndEncryptedBlob (
Blob
) – Зашифрованные подписанные данные.CertStores (
array of String
) – Имена хранилищ, в которых будут искаться сертификаты для проверки подписи и расшифрования данных. Если указывается одно хранилище можно передать просто строку а не массив. Поддерживаются хранилищаCA
,MY
иROOT
. Должно быть указано хотя бы одно хранилище, передача пустой строки, пустого массива либоNull
приведет к ошибке. Если не передавать значение параметра то по умолчанию поиск осуществляется во всех трёх хранилищах.0 (
Integer SignerIndex =
) – Индекс подписи отправителя которую требуется проверить. Первая подпись имеет индекс 0. Для проверки нескольких подписей следует вызвать метод несколько раз, с разным значениемSignerIndex
. Если при выполнении метода вернется ошибкаCRYPT_E_NO_SIGNER = $8009200E
, значит предыдущая подпись была последней. Заранее определить количество подписей или проверить подпись по конкретному сертификату, метод не позволяет.
- Return type:
Пример использования¶<pascal> var res: TbtkDecryptAndVerifyMessageSignatureResult; begin res := Cryptor.DecryptAndVerifyMessageSignature(blobToDecryptAndVerifyMessageSignature); if res.IsSuccessful then ProcessDecryptedBlob(res.DecryptedBlob) else Raise(Format('Не удалось расшифровать сообщение.'#13#10#13#10'Код ошибки:'#13#10' $%x'#13#10'Текст ошибки:'#13#10' "%s"', [res.ErrorCode, res.ErrorMessage])); end; </pascal>
New in version Global_5.9.0.
TbtkCryptorKey¶
- class TbtkCryptorKey¶
Объект высокоуровневого взаимодействия с “MS CryptoAPI”. Реализует сущность “Ключ шифрования”. Служит для шифрования и расшифровывания данных.
New in version 5.5.8.4460.
Все ключи¶
- EncryptData(Data: Blob; Hash: TbtkCryptorHash = nil) Blob ¶
Зашифровать данные
- Parameters:
Data (
Blob
) – Данные для зашифрованияnil (
TbtkCryptorHash Hash =
) – Хеш данных до зашифрования
- DecryptData(Data: Blob; Hash: TbtkCryptorHash = nil) Blob ¶
Расшифровать данные. Метод обратный к
EncryptData()
- Parameters:
Data (
Blob
) – Данные для расшифровкиnil (
TbtkCryptorHash Hash =
) – Хеш расшифрованных данных
- Export(BlobType: Integer; EncKey: TbtkCryptorKey = nil; Flags: Integer = 0) Blob ¶
Сериализовать (выгрузить) ключ шифрования в указанном формате CSP
- Parameters:
BlobType (
Integer
) –Формат предусмотренный CSP для сериализации ключей.
Доступные варианты:
`SIMPLEBLOB` = $1;
- сессионный ключ`PUBLICKEYBLOB` = $6;
- публичный ключ`PRIVATEKEYBLOB` = $7;
- секретный ключ`PLAINTEXTKEYBLOB` $8;
- ключ в открытом форматеТакже, некоторые CSP могут определять свои форматы.
nil (
TbtkCryptorKey EncKey =
) – Ключ которым будет шифроваться сериализованный ключ. Параметр применим, среди стандартных способов сериализации, для выгрузки сессионных ключей.0 (
Integer Flags =
) – Определяет дополнительные опции выгрузки, см. MSDN , параметрdwFlags
- DuplicateKey() TbtkCryptorKey ¶
Метод создаёт дубликат ключа. Может быть полезно, если ожидается модификация ключа, но в будущем потребуется ключ с изначальными параметрами.
- Return type:
- 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 ¶
Значение соли ключа шифрования
Блочные ключи¶
- 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) алгоритма блочного шифра
Разрешения ключа¶
- 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.
Атрибут только для чтения
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:
Если ключи не ассоциированы с хешером (
TbtkCryptorHash.Keyset
=TbtkCryptKeyset.ckNone
).
Attention
после вызова - хеш изменить будет невозможно
TbtkCryptorHash.HashData()
- VerifySign(Sign: Blob; PubKey: TbtkCryptorKey; Flags: Integer = 0) Boolean ¶
Проверить подпись на соответствие хешу. Результат True - фактическое подтверждение, что держатель сертификата (которому принадлежит публичный ключ) подтверждает целостность (неизменённость) данных, по которым рассчитан хеш.
- Parameters:
Sign (
Blob
) – Значение цифровой подписи.PubKey (
TbtkCryptorKey
) – Публичный ключ сертификата, которым подписаны данные.Flags (
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:
Note
если ключи не ассоциированы с хешером (
TbtkCryptKeyset.ckNone
) - методTbtkCryptorHash.Sign()
возбудит исключение.
- HashData(Data: Blob)¶
Метод хеширует указанные данные.
Поддерживается итеративное хеширование - можно последовательно вызвать метод для добавления в хеш новых пакетов данных, что равносильно тому как если бы все пакеты данных были последовательно помещены в один большой блоб и метод был бы вызван один раз. Такой подход позволяет парциально хешировать сколь угодно большой объём данных.
- Parameters:
Data (
Blob
) – Очередной блоб данных для хеширования.
Note
добавлять порции в хеш можно до тех пор пока не будет вызван метод получения хеша (
TbtkCryptorHash.Value()
илиTbtkCryptorHash.Sign()
).
- HashSessionKey(Key: TbtkCryptorKey)¶
Добавить к значению хеша данные ключа шифрования.
- Param:
TbtkCryptorKey Key
Ключ симметричного шифрования
New in version 5.5.8.4460.
TbtkCryptorProvider¶
- class TbtkCryptorProvider¶
Объект высокоуровневого взаимодействия с “MS CryptoAPI”. Объект доступа к хранилищу секретных ключей с использованием выбранного (по типу реализуемого функционала, или иным признакам) CSP(алгоритмов).
New in version 5.5.8.4460.
- CreateHash(AlgID: String) TbtkCryptorHash ¶
Создать новый объект хеширования
- Parameters:
AlgID (
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(KeySet: TbtkCryptKeyset = ckKeyExchange) TbtkCryptorKey ¶
Создать объект секретного ключа из контейнера с которым ассоциирован провайдер
- Parameters:
ckKeyExchange (
TbtkCryptKeyset KeySet =
) – Указывает из какой пары ключ. Ключ обмена данными, или подписания данных. По умолчанию, как наиболее востребованный,- ключ обмена данными.- Raises:
Если ключ запрошенного типа отсутствует в провайдере.
- Return type:
- CreateKeyByPublic(Cert: TbtkCryptorCertificate) TbtkCryptorKey ¶
Создать объект публичного ключа из сертификата безопасности разместив ключ в провайдере
- Parameters:
Cert (
TbtkCryptorCertificate
) – Сертификат, из которого будет загружен публичный ключ- Return type:
- CreateKeyByImport(KeyBlob: Blob; EncKey: TbtkCryptorKey = nil; Flags: Integer = CRYPT_EXPORTABLE) TbtkCryptorKey ¶
Загрузить ключевой блоб в криптопровайдер. Тип ключа и параметры определяются самим блобом. Метод комплементарен
TbtkCryptorKey.Export()
.- Parameters:
KeyBlob (
Blob
) – Сериализованный CSP ключ шифрованияnil (
TbtkCryptorKey EncKey =
) – Ключ которым зашифрован KeyBlob. Необходимость в ключе шифрования определяется типом загружаемого ключа и алгоритмами CSP. Для загрузки блобов публичных ключей ключ шифрования не требуется.CRYPT_EXPORTABLE (
integer Flags =
) – Флаги создания ключа, см. MSDN , параметрdwFlags
.
- Return type:
- CreateKeyByGenKey(AlgID: String; Flags: Integer = CRYPT_EXPORTABLE) TbtkCryptorKey ¶
Сгенерировать новый ключ со случайными параметрами по указанному алгоритму.
- Parameters:
AlgID (
String
) – Алгоритм ключа. Например,1.2.643.2.2.21
- ключ симметричного шифрования, ГОСТ 28147.CRYPT_EXPORTABLE (
Integer Flags =
) – Флаги создания ключа, см. MSDN , параметрdwFlags
.
- Return type:
- CreateKeyByHash(AlgID: String; Hash: TbtkCryptorHash; Flags: Integer = CRYPT_EXPORTABLE) TbtkCryptorKey ¶
Создать новый ключ шифрования по данным хеша
- Parameters:
AlgID (
String
) – Алгоритм ключа. Например,1.2.643.2.2.21
- ключ симметричного шифрования, ГОСТ 28147.Hash (
TbtkCryptorHash
) – Хеш-объект из значения которого будет сконструирован ключ. Для одинаковых хешей будут сконкструированы одинаковые ключи.CRYPT_EXPORTABLE (
Integer Flags =
) – Флаги создания ключа, см. MSDN , параметрdwFlags
.
- Return type:
- KeyExchangeKeySetExists Boolean ¶
Содержатся ли в контейнере ключи обмена данными.
Атрибут только для чтения
- SignatureKeySetExists Boolean ¶
Содержатся ли в контейнере ключи подписания данных.
Атрибут только для чтения
TbtkCryptorCertificate¶
- class TbtkCryptorCertificate¶
Объект высокоуровневого взаимодействия с “MS CryptoAPI”. Реализует сущность “Сертификат безопасности”.
Время жизни управляется счётчиком ссылок :
освобождается простым занулением переменной где он хранится
можно смело передавать его между операциями и выборками, даже асинхронными
See also
- 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 TDateTime ¶
Дата с которой сертификат считается валидным.
- Return type:
TDateTime
- NotAfter TDateTime ¶
Дата с которой сертификат считается невалидным.
- Return type:
TDateTime
- KeepLoggedIn Boolean ¶
- True
Не перезапрашивать пароль на доступ к хранилищу закрытого ключа.
- False
При каждом обращении к закрытому ключу сертификата будет запрашиваться пароль от хранилища.
- Return type:
Boolean
- ID String ¶
Строка используемая для идентификации сертификата в методах
Cryptor
. Свойство добавлено для обратной совместимости с ранее реализованным процедурным подходом.- Return type:
String
- SubjectName(Format: TbtkCertNameFormat = cnfX500; Flags: Variant = null) String ¶
Наименование субъекта которому выдан сертификат.
- Parameters:
Format (
TbtkCertNameFormat
) – Представление в котором будет возвращено имя.Flags (
Variant
) – Зарезервировано. Не используется. Управляющие флаги, могут использоваться различные значения в зависимости от используемого представления.
- Return type:
String
- IssuerName(Format: TbtkCertNameFormat = cnfX500; Flags: Variant = null) String ¶
Наименование организации выдавшей сертификат.
- Parameters:
Format (
TbtkCertNameFormat
) – Представление в котором будет возвращено имя.Flags (
Variant
) – Зарезервировано. Не используется. Управляющие флаги, могут использоваться различные значения в зависимости от используемого представления.
- Return type:
String
- Provider TbtkCryptorProvider ¶
Хранилище приватных ключей сертификата. Если с сертификатом не ассоциированно такого хранилища - генерируется исключение.
Атрибут только для чтения
- Return type:
TbtkCertNameFormat¶
- class TbtkCertNameFormat¶
Перечисление. Формат в котором представлено наименование сертификата.
- cnfX500¶
Имя формируется по правилам определённым Microsoft в CryptoAPI. При формировании используются заголовки (буквенные обозначения) параметров имени.
- cnfOid¶
Имя формируется по правилам определённым Microsoft в CryptoAPI. При формировании используются OID параметров имени.
- cnfSimple¶
Имя формируется по правилам определённым Microsoft в CryptoAPI. Формируется из одних только значений параметров, без заголовков.
- cnfRFC1779¶
Имя формируется в точном соответствии RFC1779, без лирических отступлений Microsoft от стандарта.
TbtkCryptKeyset¶
- class TbtkCryptKeyset¶
Перечисление. Набор ключей шифрования.
See also
TbtkCryptorHash.Keyset
- ckKeyExchange¶
Набор ключей для обмена данными. Также подходит и для подписывания данных (более широкий чем
TbtkCryptKeyset.ckSignature
)
- ckSignature¶
Набор ключей для подписывания данных. Вместо него также может использоваться набор ключей
TbtkCryptKeyset.ckKeyExchange
- ckNone¶
Набор ключей шифрования отсутствует.
TbtkSignAndEncryptMessageResult¶
- class TbtkSignAndEncryptMessageResult¶
Агрегирует информацию о результате выполнения
Cryptor.SignAndEncryptMessage()
.New in version Global_5.9.0.
- IsSuccessful Boolean ¶
True
если данные успешно подисаны и зашифрованы,False
в противном случае.
- SignedAndEncryptedBlob Blob ¶
Содержит зашифрованные и подписанные данные, если вызов завершился успешно.
- ErrorCode Integer ¶
Содержит код ошибки, если вызов не завершился успешно.
- ErrorMessage String ¶
Содержит текст ошибки, если вызов не завершился успешно.
See also
TbtkDecryptAndVerifyMessageSignatureResult¶
- class TbtkDecryptAndVerifyMessageSignatureResult¶
Агрегирует информацию о результате выполнения
Cryptor.DecryptAndVerifyMessageSignature()
.New in version Global_5.9.0.
- IsSuccessful Boolean ¶
True
если данные успешно расшифрованы и подпись проверена,False
в противном случае.
- DecryptedBlob Blob ¶
Содержит расшифрованные данные, если вызов завершился успешно.
- SignerCert TbtkCryptorCertificate ¶
Содержит сертификат отправителя, если вызов завершился успешно.
- RecipientCert TbtkCryptorCertificate ¶
Содержит сертификат получателя, если вызов завершился успешно.
- ErrorCode Integer ¶
Содержит код ошибки, если вызов не завершился успешно.
- ErrorMessage String ¶
Содержит текст ошибки, если вызов не завершился успешно.