11. Криптография¶
Наш API по криптографии базируется на Windows CryptoAPI.
See also
11.1. Cryptor¶
-
class
Cryptor
¶ Статический класс, содержит криптографические методы.
See also
-
CreateHashByCert
(Cert: TbtkCryptorCertificate; AlgID: String = ''): TbtkCryptorHash¶ Создать экземпляр объекта хеширования в соответствии с указанным сертификатом. Если сертификат обладает закрытым ключём - хешер будет ассоциирован с ним (можно подписать хеш закрытым ключём сертификата -
TbtkCryptorHash.Sign()
)Parameters: - Cert (TbtkCryptorCertificate) – Сертификат на основании которого будет создан объект хеширования. По умолчанию из сертификата берутся и алгоритм хеширования - согласно указанному в нём алгоритму подписи.
- AlgID (String) – Опциональный параметр. Позволяет указать алгоритм хеширования отличный от того что соответствует алгоритму подписи указанному в сертификате.
Return type: 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: TbtkCryptorCertificate New in version 5.5.0.3950.
-
CreateCertByID
(ID: String): TbtkCryptorCertificate¶ Создаёт экземпляр сертификата с указанным ID -
TbtkCryptorCertificate.ID
.Parameters: ID (String) – ID сертификата Return type: TbtkCryptorCertificate Note
- в случае если такой сертификат не существует - возбуждается исключение.
- ID может быть получен методом
TbtkCryptorCertificate.OpenCertificateDlg()
, или у другого экземпляра сертификата через свойствоTbtkCryptorCertificate.ID
.
New in version 5.5.0.3950.
-
CreateCertByBlob
(Data: Blob): TbtkCryptorCertificate¶ Создаёт экземпляр сертификата безопасности по его бинарному представлению (значение
TbtkCryptorCertificate.RawData
).Parameters: Data (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
(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-KeyTransport
- PrivateKey (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>
- Data (Variant) –
-
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>
- Data (Variant) –
-
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
приведет к ошибке. Если не передавать значение параметра то по умолчанию поиск осуществляется во всех трёх хранилищах. - SignerIndex = 0 (Integer) – Индекс подписи отправителя которую требуется проверить. Первая подпись имеет индекс 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.
-
11.2. TbtkCryptorKey¶
-
class
TbtkCryptorKey
¶ Объект высокоуровневого взаимодействия с “MS CryptoAPI”. Реализует сущность “Ключ шифрования”. Служит для шифрования и расшифровывания данных.
New in version 5.5.8.4460.
11.2.1. Все ключи¶
-
EncryptData
(Data: Blob; Hash: TbtkCryptorHash = nil): Blob¶ Зашифровать данные
Parameters: - Data (Blob) – Данные для зашифрования
- Hash = nil (TbtkCryptorHash) – Хеш данных до зашифрования
-
DecryptData
(Data: Blob; Hash: TbtkCryptorHash = nil): Blob¶ Расшифровать данные. Метод обратный к
EncryptData()
Parameters: - Data (Blob) – Данные для расшифровки
- Hash = nil (TbtkCryptorHash) – Хеш расшифрованных данных
-
Export
(BlobType: Integer; EncKey: TbtkCryptorKey = nil; Flags: Integer = 0): Blob¶ Сериализовать (выгрузить) ключ шифрования в указанном формате CSP
Parameters: - BlobType (Integer) –
Формат предусмотренный CSP для сериализации ключей.
Доступные варианты:
`SIMPLEBLOB` = $1;
- сессионный ключ`PUBLICKEYBLOB` = $6;
- публичный ключ`PRIVATEKEYBLOB` = $7;
- секретный ключ`PLAINTEXTKEYBLOB` $8;
- ключ в открытом формате- Также, некоторые CSP могут определять свои форматы.
- EncKey = nil (TbtkCryptorKey) – Ключ которым будет шифроваться сериализованный ключ. Параметр применим, среди стандартных способов сериализации, для выгрузки сессионных ключей.
- Flags = 0 (Integer) – Определяет дополнительные опции выгрузки, см. MSDN , параметр
dwFlags
- BlobType (Integer) –
-
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: Если ключи не ассоциированы с хешером ( 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: TbtkCryptKeyset 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.
11.4. 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: KeySet = ckKeyExchange (TbtkCryptKeyset) – Указывает из какой пары ключ. Ключ обмена данными, или подписания данных. По умолчанию, как наиболее востребованный,- ключ обмена данными. Raises: Если ключ запрошенного типа отсутствует в провайдере. Return type: TbtkCryptorKey
-
CreateKeyByPublic
(Cert: TbtkCryptorCertificate): TbtkCryptorKey¶ Создать объект публичного ключа из сертификата безопасности разместив ключ в провайдере
Parameters: Cert (TbtkCryptorCertificate) – Сертификат, из которого будет загружен публичный ключ Return type: TbtkCryptorKey
-
CreateKeyByImport
(KeyBlob: Blob; EncKey: TbtkCryptorKey = nil; Flags: Integer = CRYPT_EXPORTABLE): TbtkCryptorKey¶ Загрузить ключевой блоб в криптопровайдер. Тип ключа и параметры определяются самим блобом. Метод комплементарен
TbtkCryptorKey.Export()
.Parameters: - KeyBlob (Blob) – Сериализованный CSP ключ шифрования
- EncKey = nil (TbtkCryptorKey) – Ключ которым зашифрован KeyBlob. Необходимость в ключе шифрования определяется типом загружаемого ключа и алгоритмами CSP. Для загрузки блобов публичных ключей ключ шифрования не требуется.
- Flags = CRYPT_EXPORTABLE (integer) – Флаги создания ключа, см. MSDN , параметр
dwFlags
.
Return type:
-
CreateKeyByGenKey
(AlgID: String; Flags: Integer = CRYPT_EXPORTABLE): TbtkCryptorKey¶ Сгенерировать новый ключ со случайными параметрами по указанному алгоритму.
Parameters: - AlgID (String) – Алгоритм ключа. Например,
1.2.643.2.2.21
- ключ симметричного шифрования, ГОСТ 28147. - Flags = CRYPT_EXPORTABLE (Integer) – Флаги создания ключа, см. MSDN , параметр
dwFlags
.
Return type: - AlgID (String) – Алгоритм ключа. Например,
-
CreateKeyByHash
(AlgID: String; Hash: TbtkCryptorHash; Flags: Integer = CRYPT_EXPORTABLE): TbtkCryptorKey¶ Создать новый ключ шифрования по данным хеша
Parameters: - AlgID (String) – Алгоритм ключа. Например,
1.2.643.2.2.21
- ключ симметричного шифрования, ГОСТ 28147. - Hash (TbtkCryptorHash) – Хеш-объект из значения которого будет сконструирован ключ. Для одинаковых хешей будут сконкструированы одинаковые ключи.
- Flags = CRYPT_EXPORTABLE (Integer) – Флаги создания ключа, см. MSDN , параметр
dwFlags
.
Return type: - AlgID (String) – Алгоритм ключа. Например,
-
KeyExchangeKeySetExists
: Boolean¶ Содержатся ли в контейнере ключи обмена данными.
Атрибут только для чтения
-
SignatureKeySetExists
: Boolean¶ Содержатся ли в контейнере ключи подписания данных.
Атрибут только для чтения
-
11.5. 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: TbtkCryptorProvider
11.6. TbtkCertNameFormat¶
-
class
TbtkCertNameFormat
¶ Перечисление. Формат в котором представлено наименование сертификата.
-
cnfX500
¶ Имя формируется по правилам определённым Microsoft в CryptoAPI. При формировании используются заголовки (буквенные обозначения) параметров имени.
-
cnfOid
¶ Имя формируется по правилам определённым Microsoft в CryptoAPI. При формировании используются OID параметров имени.
-
cnfSimple
¶ Имя формируется по правилам определённым Microsoft в CryptoAPI. Формируется из одних только значений параметров, без заголовков.
-
cnfRFC1779
¶ Имя формируется в точном соответствии RFC1779, без лирических отступлений Microsoft от стандарта.
-
11.7. TbtkCryptKeyset¶
-
class
TbtkCryptKeyset
¶ Перечисление. Набор ключей шифрования.
See also
TbtkCryptorHash.Keyset
-
ckKeyExchange
¶ Набор ключей для обмена данными. Также подходит и для подписывания данных (более широкий чем
TbtkCryptKeyset.ckSignature
)
-
ckSignature
¶ Набор ключей для подписывания данных. Вместо него также может использоваться набор ключей
TbtkCryptKeyset.ckKeyExchange
-
ckNone
¶ Набор ключей шифрования отсутствует.
11.8. TbtkSignAndEncryptMessageResult¶
-
class
TbtkSignAndEncryptMessageResult
¶ Агрегирует информацию о результате выполнения
Cryptor.SignAndEncryptMessage()
.New in version Global_5.9.0.
-
IsSuccessful
: Boolean¶ True
если данные успешно подисаны и зашифрованы,False
в противном случае.
-
SignedAndEncryptedBlob
: Blob¶ Содержит зашифрованные и подписанные данные, если вызов завершился успешно.
-
ErrorCode
: Integer;¶ Содержит код ошибки, если вызов не завершился успешно.
-
ErrorMessage
: String;¶ Содержит текст ошибки, если вызов не завершился успешно.
See also
-
11.9. 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;¶ Содержит текст ошибки, если вызов не завершился успешно.
-