dcsp pg1

45
DEKART CRYPTOGRAPHIC SERVICE PROVIDER 45 2005

Upload: companiadekartsrl

Post on 18-Dec-2014

105 views

Category:

Documents


4 download

DESCRIPTION

 

TRANSCRIPT

УТВЕРЖДЁН

DEKART CRYPTOGRAPHIC SERVICE PROVIDER

Руководство программиста

Листов 45

2005

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 2 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Аннотация Данный документ содержит описание функций, входящих в Dekart Cryptographic

Service Provider.Приводится необходимая справочная информация.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 3 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Оглавление АННОТАЦИЯ...............................................................................................................................2

ОГЛАВЛЕНИЕ ............................................................................................................................3

1. НАЗНАЧЕНИЕ РАЗРАБОТКИ..................................................................................4

2. ОБЩИЕ СВЕДЕНИЯ......................................................................................................4

3. ОПИСАНИЕ ФУНКЦИЙ DEKART RSA CRYPTOGRAPHIC SERVICE PROVIDER...............................................................................................................4

3.1. ФУНКЦИЯ CPACQUIRECONTEXT.....................................................................................................................4 3.2. ФУНКЦИЯ CPGETPROVPARAM........................................................................................................................6 3.3. ФУНКЦИЯ CPRELEASECONTEXT ...................................................................................................................10 3.4. ФУНКЦИЯ CPSETPROVPARAM ......................................................................................................................11 3.5. ФУНКЦИЯ CPDERIVEKEY ..............................................................................................................................13 3.6. ФУНКЦИЯ CPDESTROYKEY ...........................................................................................................................15 3.7. ФУНКЦИЯ CPDUPLICATEKEY........................................................................................................................15 3.8. ФУНКЦИЯ CPEXPORTKEY .............................................................................................................................16 3.9. ФУНКЦИЯ CPGENKEY....................................................................................................................................17 3.10. ФУНКЦИЯ CPGENRANDOM ............................................................................................................................20 3.11. ФУНКЦИЯ CPGETKEYPARAM........................................................................................................................21 3.12. ФУНКЦИЯ CPGETUSERKEY...........................................................................................................................23 3.13. ФУНКЦИЯ CPIMPORTKEY..............................................................................................................................24 3.14. ФУНКЦИЯ CPSETKEYPARAM ........................................................................................................................26 3.15. ФУНКЦИЯ CPDECRYPT...................................................................................................................................29 3.16. ФУНКЦИЯ CPENCRYPT...................................................................................................................................30 3.17. ФУНКЦИЯ CPCREATEHASH ...........................................................................................................................31 3.18. ФУНКЦИЯ CPDESTROYHASH .........................................................................................................................32 3.19. ФУНКЦИЯ CPDUPLICATEHASH......................................................................................................................33 3.20. ФУНКЦИЯ CPGETHASHPARAM .......................................................................................................................34 3.21. ФУНКЦИЯ CPHASHDATA................................................................................................................................36 3.22. ФУНКЦИЯ CPHASHSESSIONKEY....................................................................................................................36 3.23. ФУНКЦИЯ CPSETHASHPARAM ......................................................................................................................37 3.24. ФУНКЦИЯ CPSIGNHASH.................................................................................................................................39 3.25. ФУНКЦИЯ CPVERIFYSIGNATURE...................................................................................................................41

4. ОПИСАНИЕ СТРУКТУР, ИСПОЛЬЗУЕМЫХ В ФУНКЦИЯХ DEKART RSA CRYPTOGRAPHIC SERVICE PROVIDER...................................42

4.1. ОПИСАНИЕ СТРУКТУРЫ _VTABLEPROVSTRUC......................................................................................42 4.2. ОПИСАНИЕ СТРУКТУРЫ _ PUBLICKEYSTRUC.........................................................................................43

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 4 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

1. Назначение разработки Dekart RSA Cryptographic Service Provider предназначен для криптографической защиты данных и представляет собой ядро, интегрируемое в операционные системы Windows. Dekart RSA Cryptographic Service Provider соответствует требованиям Microsoft Cryptographic Service Provider Interface (CryptoSPI), которые определяют правила его использования различными приложениями посредством Microsoft Cryptographic Application Program Interface (CryptoAPI). В Dekart RSA Cryptographic Service Provider реализованы современные механизмы криптографической защиты данных: цифровая подпись,шифрование и аутентификация данных.

.

2. Общие сведения

Dekart RSA Cryptographic Service Provider включает в себя следующие функции:� функции инициализации контекста и получения параметров криптопровайдера;

� функции генерации ключей и работы с ними;

� функции шифрования/расшифровывания данных;

� Функции хеширования и получения цифровой подписи данных.

Необходимое оборудование:• Компьютер IBM PC (486 и выше).

Необходимое программное обеспечение:• Операционная система MS Windows.

3. Описание функций Dekart RSA Cryptographic Service Provider 3.1. Функция CPAcquireContext

Название: CPAcquireContext Назначение: Позволяет создать дескриптор криптопровайдера с именем ключевого

контейнера.Синтаксис: #include “Wincrypt.h”

BOOL WINAPI CPAcquireContext ( HCRYPTPROV * phProv ,CHAR * pszContainer , DWORD dwFlags ,PVTABLEPROVSTRUCpVTable )

Входные данные:PszContainer - имя ключевого контейнера. Это указатель на строку, длиной не больше, чем MAX_PATH знаков, включая признак конца строки. Если данный

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 5 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

параметр - NULL, то криптопровайдер будет использовать в качестве имени контейнера имя пользователя, вошедшего в систему.dwFlags - Параметр имеет нулевое или одно из следующих значений:

Значение dwFlags Описание CRYPT_VERIFYCONTEXT Приложение не имеет доступа к секретным ключам

ключевого контейнера. Флаг предназначен для использования с приложениями, для которых требуется проверка цифровой подписи. Операции, обычно необходимые в этом случае, – получение дескрипторов открытых ключей, хэширование и проверка подписи.При вызове функции CPAcquireContextкриптопровайдер не требует от пользователя ввода ключевой информации.

CRYPT_NEWKEYSET Если флаг установлен, то будет создан новый ключевой контейнер с именем, соответствующим pszContainer.Если pszContainer - NULL, то в качестве имени контейнера используется имя пользователя, вошедшего в систему.

CRYPT_MACHINE_KEYSET Флаг может использоваться при вызове функцииCPAcquireContext c CRYPT_NEW_KEYSET илифлагом CRYPT_DELETE_KEYSET. В этом случае ключи будут сохранены в ключе HKEY_LOCAL_MACHINE системного реестра. Флаг предназначен для использования криптопровайдера всоставе системных приложений.

CRYPT_DELETEKEYSET Ключевой контейнер, соответствующий pszContainer,удаляется. Если pszContainer - NULL, то удаляется ключевой контейнер с именем, заданным по умолчанию. Все ключевые пары в ключевом контейнере также уничтожаются. Когда флаг CRYPT_DELETEKEYSET установлен, значение,возвращенное в phProv, не определено и функция CPAcquireContext не должна вызываться повторно.

PVTable - указатель на структуру _VTABLEPROVSTRUC, которая содержит список callback функций, представляемых операционной системой для использования криптопровайдером

Выходные данные:PhProv - адрес, по которому функция копирует дескриптор криптопровайдера.

Возвращаемое значение:При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError().

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 6 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Возвращаемые значения Описание NTE_BAD_FLAGS Параметр dwFlags имеет запрещенное значение.

NTE_BAD_KEYSET Ключевой контейнер не был открыт, и, возможно,не существует.

NTE_BAD_KEYSET_PARAM Параметр pszContainer установлен в запрещенное значение.

NTE_BAD_SIGNATURE Не прошла проверка цифровой подписи DLL криптопровайдера. DLL или цифровая подпись искажены.

NTE_EXISTS Параметр dwFlags установлен вCRYPT_NEWKEYSET, а ключевой контейнер уже существует.

NTE_KEYSET_ENTRY_BAD Ключевой контейнер, соответствующий pszContainer найден, но искажен.

NTE_KEYSET_NOT_DEF Ключевой контейнер, соответствующий pszContainer, не существует.

NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию, нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam, неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam, имеет неправильный формат.Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой,т.к. исчерпалось количество попыток,разрешенное картой для ввода.

NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации.

3.2. Функция CPGetProvParam

Название: CPGetProvParam Назначение: Возвращает параметры криптопровайдера.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGetProvParam ( HCRYPTPROV hProv ,

DWORD dwParam , BYTE * pbData ,DWORD * pdwDataLen , DWORD dwFlags )

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 7 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.dwParam - значение аргумента определяет тип запроса. В настоящее время определены следующие значения dwParam.

Значение dwParam Содержимое буфера pbData

PP_CONTAINER

Имя ключевого контейнера вида CONTAINER, если онимеет имя, в противном случае уникальное имя (см.PP_UNIQUE_CONTAINER). Строковая величина спризнаком конца строки, содержащая имя текущего ключевого контейнера.

PP_UNIQUE_CONTAINER

Уникальное имя ключевого контейнера. Уникальное имя зависит от типа ключевого носителя и может иметь вид:MEDIA\FOLDER, MEDIA\UNIQUE\FOLDER или MEDIA\UNIQUE. Строковая величина с признаком конца строки, содержащая имя текущего ключевого контейнера.

PP_ENUMALGS Поддерживаемые алгоритмы.PP_ENUMALGS_EX Поддерживаемые алгоритмы.

PP_ENUMCONTAINERS

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

PP_PROVTYPE Тип криптопровайдера. Задается величиной DWORD.

PP_IMPTYPE

Тип реализации криптопровайдера. Задается величиной DWORD. В настоящее время определены следующие типы реализации:

• CRYPT_IMPL_HARDWARE

• CRYPT_IMPL_SOFTWARE

• CRYPT_IMPL_MIXED

• CRYPT_IMPL_UNKNOWN

PP_NAME

Строковая величина с признаком конца строки,содержащая имя криптопровайдера. Соответствует вхождениям "CSP Name", которые программа setup установила вWindows® Registry.

PP_VERSION Версия криптопровайдера. Задается величиной DWORD. Например, версия 1.0 представляется как 0x00000100.

PP_KEYSPEC Тип ключа. Задается величиной DWORD. PP_KEYX_KEYSIZE_INC Модуль открытого ключа обмена. Задается величиной

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 8 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

DWORD.

PP_SIG_KEYSIZE_INC Модуль открытого ключа ЭЦП. Задается величиной DWORD.

PP_KEYSET_SEC_DESCR Возвращает дескриптор безопасности раздела реестра Windows, где хранятся ключи пользователя.

PP_ENUMOIDS_EX Поддерживаемые параметры алгоритмов. Перечисляются строковые величины - OID поддерживаемых наборов параметров алгоритмов.

PP_HASHOID OID текущих параметров алгоритма функции хеширования.

PP_SIGNATUREOID OID текущих параметров алгоритма подписи.

PP_DHOID OID текущих параметров алгоритма Диффи-Хеллмана.

PP_CIPHEROID OID текущих параметров алгоритма шифрования.

PP_RANDOM

Выдаёт в pbData ключевой блоб типа для установки программного ДСЧ провайдера уровня ядра ОС. Если контекст криптопровайдера hProv открыт в режиме CRYPT_VERIFYCONTEXT, то предварительно будут получены случайные числа с физического или клавиатурного ДСЧ.

PP_LAST_ERROR

Код последней ошибки криптопровайдера. В pbData буфер будет помещена величина DWORD - код последней ошибки, возвращённой одной из функций криптопровайдера. Коды ошибок даны в файле WincryptEx.h.

PP_MUTEX_ARG

Для использования в ядре ОС. Возвращает значение последнего аргумента функции mutex_init (указатель на обработчик прерывания) для всех mutex, используемых при работе CSP.

dwFlags - Значения флагов. В настоящее время определены следующие значения флагов:Значение dwFlags Описание

CRYPT_FIRST

Когда читается параметр перечисления (например,PP_ENUMALGS, PP_ENUMALGS_EX или PP_ENUMCONTAINERS) и установлен этот флаг,должен быть возвращен первый элемент в списке перечисления. Иначе - возвращается следующий элемент в списке. Если флажок установлен, и читается параметр неперечисления, возвращается код ошибки NTE_BAD_FLAGS.

CRYPT_MACHINE_KEYSET Когда читается параметр перечисления PP_ENUMCONTAINERS, может быть определен флаг CRYPT_MACHINE_KEYSET. Этот флаг должен быть

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 9 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

установлен, если нужно, чтобы перечисление проходило в разделе HKEY_LOCAL_MACHINE, а не вразделе HKEY_CURRENT_USER (значение по умолчанию) системного реестра.

SECURITY_INFORMATION

Если dwParam установлен в PP_KEYSET_SEC_DESCR, будет возвращен дескриптор безопасности раздела реестра, содержащего ключевой контейнер. В этом случе dwFlags используется, чтобы передать битовые флаги, объединяемые поразрядной операцией OR. Указатель на дескриптор безопасности возвращается варгументе pbData, длина дескриптора безопасности возвращается в аргументе pcbData. Для получения дополнительной информации, см. RegGetKeySecurity иRegSetKeySecurity. Следующий список содержит имена битов, определяющих затребованную информацию обезопасности.

• OWNER_SECURITY_INFORMATION - Указывает идентификатор владельца упомянутого объекта.

• GROUP_SECURITY_INFORMATION - Указывает идентификатор первичный группы упомянутого объекта.

• DACL_SECURITY_INFORMATION - Указывает идентификатор дискреционного ACL упомянутого объекта.

• SACL_SECURITY_INFORMATION - Указывает идентификатор системного ACL упомянутого объекта.

dwBufLen – размер входного буфера данных.DwFlags – неиспользуемый параметр, обычно устанавливается в 0.PbData - указатель на массив входных данных.

Выходные данные:pbData - Буфер данных параметра. Функция копирует соответствующие параметру данные в буфер. Формат этих данных зависит от значения dwParam.Если аргумент функции - NULL, то данные не копируются. Требуемый размер буфера в байтах возвращается в pdwDataLen..

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 10 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

ERROR_MORE_DATA Размер буфера pbData не достаточен для копирования затребованных данных.

NTE_BAD_FLAGS Параметр dwFlags имеет запрещенное значение.NTE_BAD_TYPE dwParam определяет неизвестный параметр.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль,установленный функцией SetProvParam, неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam, имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к.исчерпалось количество попыток, разрешенное картой для ввода.

3.3. Функция CPReleaseContext

Название: CPReleaseContext Назначение: Используется для удаления дескриптора криптопровайдера, созданного

CPAcquireContext.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPReleaseContext ( HCRYPTPROV hProv ,

DWORD dwFlags ); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.dwFlags - Параметр имеет нулевое значение:

Выходные данные: Отсутствуют.Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.

Примечание. После того, как эта функция была вызвана, дескриптор hProv становится недействительным. Сессионные ключи и объекты функции хэширования, созданные сиспользованием дескриптора hProv, разрушаются.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 11 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

3.4. Функция CPSetProvParam

Название: CPSetProvParam Назначение: Используется для установления параметров криптопровайдера.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPSetProvParam ( HCRYPTPROV hProv ,

DWORD dwParam , BYTE * pbData , DWORD dwFlags); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.dwParam - значение аргумента определяет тип запроса. В настоящее время определены следующие значения dwParam.

Значение dwParam Содержимое буфера pbData

PP_KEYSET_SEC_DESCR Устанавливает дескриптор безопасности раздела реестра Windows, где хранятся ключи пользователя. Значение дескриптора передаётся в pbData.

PP_HASHOID Устанавливает идентификатор алгоритма функции хеширования.

PP_CIPHEROID Устанавливает идентификатор алгоритма шифрования.PP_SIGNATUREOID Устанавливает идентификатор алгоритма подписи.

PP_DHOID Устанавливает идентификатор алгоритма Диффи-Хеллмана.

PP_KEYEXCHANGE_PIN

Задаёт пароль (PIN) для доступа к ключу AT_KEYEXCHANGE, в противном случае онзапрашивается у пользователя посредством UI (если не был установлен флаг CRYPT_SILENT, см.CPAcquireContext()).

PP_SIGNATURE_PIN

Задаёт пароль (PIN) для доступа к ключу AT_SIGNATURE, в противном случае он запрашивается у пользователя посредством UI (если не был установлен флаг CRYPT_SILENT, см. CPAcquireContext ()).

PP_USE_HARDWARE_RNG

Иницирует добавление к ДСЧ контекста криптопровайдера hProv значения с физического или клавиатурного ДСЧ. В случае, если в данной системе поддерживается только биологический ДСЧ, то выдаётся UI для ввода событий мыши и/или клавиатуры (если не был установлен флаг CRYPT_SILENT, см.CPAcquireContext ()). Обычно, при отсуствии в системе физического ДСЧ,данные с клавиатурного (клавиатура, мышь) ДСЧ добавляются в обязательном порядке к контексту криптопровайдера (в контейнер ключевой информации)только при создании постоянных ключей AT_KEYEXCHANGE или AT_SIGNAUTURE функцией

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 12 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

CPGenKey ().

PP_RANDOM

Получает из pbData ключевой блоб типа CRYPT_SIMPLEBLOB для установки программного ДСЧ уровня ядра ОС. См. описание параметра PP_RANDOM функции CPGetProvParam ().

PP_MUTEX_ARG

Для использования в ядре ОС. Устанавливает значение последнего аргумента функции mutex_init (указатель на обработчик прерывания) для всех mutex, используемых при работе CSP. Этот параметр должен быть установлен до первого вызова CPAcquireContext ().

pbData - Буфер данных параметра. Этот буфер при обращении к функции должен содержать данные, которые соответствуют типу параметра,помещённому в dwParam. Формат данных зависит от типа параметра.

dwFlags - Значения флагов. Используются следующие значения флагов::Значение dwFlags Описание

SECURITY_INFORMATION

Флаг устанавливается,если dwParam установлен вдескриптор безопасности раздела реестра PP_KEYSET_SEC_DESCR,содержащего ключевой контейнер. Указатель на дескриптор безопасности передаётся в аргументе pbData, его длина передаётся варгументе pcbData. Используются следующие битовые флаги:

• OWNER_SECURITY_INFORMATION - Указывает идентификатор владельца объекта.

• GROUP_SECURITY_INFORMATION - Указывает идентификатор первичный группы объекта.

• DACL_SECURITY_INFORMATION - Указывает идентификатор дискреционного ACL объекта.

• SACL_SECURITY_INFORMATION - Указывает идентификатор системного ACL объекта.

Выходные данные: Отсутствуют.Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_DATA Длина идентификатора главного ключа пользователя превышает максимально

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 13 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

допустимую.NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.NTE_BAD_TYPE dwParam определяет неизвестный параметр.NTE_KEYSET_ENTRY_BAD Нарушение целостности ключей в ОЗУ.

NTE_FAIL Ошибка при считывании данных из системного реестра.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam, неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат.Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой,т.к. исчерпалось количество попыток разрешенное картой для ввода.

NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации.

Примечание. После того, как эта функция была вызвана, дескриптор hProv становится недействительным. Сессионные ключи и объекты функции хэширования, созданные сиспользованием дескриптора hProv, разрушаются.

3.5. Функция CPDeriveKey

Название: CPDeriveKey Назначение: Используется для создания криптографических ключей сессии на основе

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

Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDeriveKey ( HCRYPTPROV hProv ,

ALG_ID AlgId , HCRYPTHASH hBaseData ,DWORD dwFlags , HCRYPTKEY * phKey );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.AlgId - Идентификатор алгоритма шифрования, для которого должен быть произведен ключ.Значение AlgId Описание

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 14 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

CALG_SCHANNEL_ENC_KEY

Ключ шифрования данных. Алгоритм шифрования иразмер ключа предварительно определяются функцией CPSetKeyParam. Инициализирующий вектор (IV) обычно устанавливается CPSetKeyParam (с KP_IV). Для SSL 2 данный ключ используется как МАС-ключ.

CALG_SCHANNEL_MAC_KEYГенерируется МАС-ключ. Алгоритм генерации ключа предварительно определяются функцией CPSetKeyParam

CALG_TLS1_MAC_KEY Ключ имитозащиты на основе объекта TLS1_MASTER_HASH.

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

Значение dwFlags Описание

CRYPT_EXPORTABLE

Если флаг установлен, то произведённый ключ может быть передан из криптопровайдера в ключевой блоб через функцию CPExportKey (). Если флаг не установлен, ключ не будет экспортируемым и будет доступен только в пределах текущей сессии приложению, которое создало этот ключ.Действие этого флага не распространяются на открытый ключ ключевой пары.

CRYPT_SERVER Если при работе с TLS флаг установлен, то создается ключ шифрования сервера, если не установлен - создается ключ шифрования клиента.

Выходные данные:phKey - Адрес, по которому функция копирует дескриптор произведённого ключа.

.Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Параметр AlgId определяет алгоритм, который не поддерживается криптопровайдером.

NTE_BAD_FLAGS Величина dwFlags имеет ошибочное значение.NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.NTE_FAIL Ошибка при считывании данных из системного реестра.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 15 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

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

3.6. Функция CPDestroyKey

Название: CPDestroyKey Назначение: Используется для удаления ключей, передаваемый через параметр hKey. После

удаления ключ (дескриптор ключа) не может использоваться.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDestroyKey ( HCRYPTPROV hProv,

HCRYPTKEY hKey ); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор удаляемого ключа.

Выходные данные: Отсутствуют.Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_TYPE Тип алгоритма hKey ошибочен.

3.7. Функция CPDuplicateKey

Название: CPDuplicateKey Назначение: Используется для создания копии заданного ключа, включая все его

переменные, определяющие внутреннее состояние ключа (например, вектор IV).

Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDuplicateKey ( HCRYPTPROV hProv ,

HCRYPTKEY hKey , DWORD * pdwReserved ,DWORD dwFlags , HCRYPTKEY * phKey );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор исходного (копируемого) ключа.pdwReserved - Параметр зарезервирован для будущего использования и должен быть NULL. dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 16 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Выходные данные:phKey - Адрес, по которому функция возвращает дескриптор скопированного ключа.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_KEY Ключевой контейнер не был открыт и, возможно, не существует.

3.8. Функция CPExportKey

Название: CPExportKey Назначение: Используется для экспорта криптографических ключей из ключевого

контейнера криптопровайдера, сохраняя их в защищённом виде.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPExportKey ( HCRYPTPROV hProv ,

HCRYPTKEY hKey , HCRYPTKEY hExpKey ,DWORD dwBlobType , DWORD dwFlags ,BYTE * pbData , DWORD * pdwDataLen );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор экспортируемого ключа.hExpKey - Дескриптор ключа, на котором осуществляется криптографическая защита экспортируемого ключа. Это должен быть ключ, общий с получателем корреспонденции. Зашифрованные данные ключа помещаются в ключевой блоб, предназначенный для внешнего хранения и передачи по каналам связи.Алгоритмы функции экспорта ключей гарантируют, что только пользователь предназначения сможет использовать этот ключевой блоб. Для защиты ключа используется алгоритм, указанный при создании ключа экспорта. Если ключевой блоб не должен быть зашифрован (например, тип ключевого блоба - PUBLICKEYBLOB), этот параметр должен быть нулевой.dwBlobType - Тип ключевого блоба, предназначенного для экспорта ключа. Внастоящее время определены три типа ключевых блобов:Тип Использование

SIMPLEBLOB Используется для транспортировки ключа сессии. pbData указывает на структуру CRYPT_SIMPLEBLOB.

PUBLICKEYBLOB Используется для транспортировки открытых ключей. pbData указывает на структуру CRYPT_PUBLICKEYBLOB.

PRIVATEKEYBLOB Используется для транспортировки ключевых пар (секретных ключей). pbData указывает на структуру CRYPT_PRIVATEKEYBLOB.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 17 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

dwFlags - Значения флагов. Параметр зарезервирован для будущего использования и должен быть 0.pbData - Буфер данных, куда функция копирует ключевой блоб.pdwDataLen - Адрес длины ключевого блоба. При вызове функции указанный параметр содержит число байтов в буфере pbData.

Выходные данные:pdwDataLen - Адрес длины ключевого блоба. После выполнения функции параметр будет установлен числом байтов данных, скопированных в буфер pbData. Если буфер, соответствующий pbData, недостаточно большой, будет возвращен код ошибки ERROR_MORE_DATA через функцию SetLastError(). Вэтом случае требуемый размер буфера возвращается в pdwDataLen. Если эта функция завершается с кодом ошибки, отличным от ERROR_MORE_DATA, вэтом параметре возвращается ноль.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

ERROR_MORE_DATA Буфер pbData недостаточно большой, чтобы копировать затребованные данные.

NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.

NTE_BAD_KEY Один или оба из ключей, указанных hKey и hExpKey, не действительны.

NTE_BAD_KEY_STATE

Попытка экспорта ключа, когда право экспорта криптопровайдером не предоставлено; попытка экспорта на ключе, для которого разрешение экспортировать не установлено.

NTE_BAD_TYPE dwBlobType параметр определяет неизвестный тип блоба.NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.NTE_FAIL Ошибка при считывании данных из системного реестра.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей.

3.9. Функция CPGenKey

Название: CPGenKey Назначение: Используется для генерации случайных криптографических ключей или

парных (секретный/открытый) ключей.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGenKey ( HCRYPTPROV hProv ,

ALG_ID AlgId , DWORD dwFlags , HCRYPTKEY * phKey ); Входные данные:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 18 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.AlgId - Идентификатор алгоритма шифрования или ЭЦП, для которого должен быть произведен ключ.Могут быть произведены ключи следующих классов:

• временные симметричные ключи (сессионые ключи);

• временные (эфемерные) ключевые пары алгоритмов Диффи-Хеллмана;

• долговременные ключевые пары, сохраняемые в ключевом контейнере.

Возможные сессионные ключи:

Значение AlgId

Описание CALG_G28147

Ключ шифрования и/или имтозащиты данных по ГОСТ 28147-89. В последствии этот ключ можно пометить как ключ для импорта/экспорта с помощью функции CPSetKeyParam ().

CALG_TLS1_MASTER Специальный ключ для реализации протокола TLS.

• Возможные эфемерные ключи Диффи-Хеллмана:

AlgId Описание

CALG_DH_EX_EPHEM Эфемерная ключевая пара на базе ГОСТ Р 34.10-94. Предназначена для обмена сессионными ключами.

CALG_DH_EL_EPHEM Эфемерная ключевая пара на базе ГОСТ Р 34.10-2001. Предназначена для обмена сессионными ключами.

• Возможные долговременные ключевые пары:

AlgId Описание

AT_KEYEXCHANGE

Производится ключевая пара, сохраняемая в ключевом контейнере. Предназначена для обмена сессионными ключами и ЭЦП. В качестве алгоритма ключевой пары выбирается алгоритм по умолчанию для hProv, параметр PP_DHOID CPGetProvParam ().

CALG_DH_EX_SF Производится ключевая пара согласно ГОСТ Р 34.10-94, сохраняемая в ключевом контейнере. Предназначена для обмена сессионными ключами и ЭЦП.

CALG_DH_EL_SF

Производится ключевая пара согласно ГОСТ Р 34.10-2001, сохраняемая в ключевом контейнере.Предназначена для обмена сессионными ключами иЭЦП.

AT_SIGNATURE Производится ключевая пара, сохраняемая в ключевом контейнере. Предназначена для ЭЦП. В качестве алгоритма ключевой пары выбирается алгоритм по

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 19 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

умолчанию для hProv, параметр PP_SIGNATUREOID функции CPGetProvParam ().

CALG_GR3410 Производится ключевая пара согласно ГОСТ Р 34.10-94, сохраняемая в ключевом контейнере. Предназначена для ЭЦП.

CALG_GR3410EL Производится ключевая пара согласно ГОСТ Р 34.10-2001, сохраняемая в ключевом контейнере.Предназначена для ЭЦП.

dwFlags - Флаги определяют признаки производимого ключа. Размеры ключей подписи и ключей обмена могут быть установлены при выработке ключа.Размер ключа устанавливается в старших 16 битах параметра dwFlags, эти 16 бит представляют размер модуля в битах. В данной версии криптопровайдера размер модуля ключа равен 1024. В настоящее время определенны следующие флаги:Значение dwFlags Описание

CRYPT_EXPORTABLE

Если этот флаг установлен, то произведённый ключ может быть передан из криптопровайдера в ключевой блоб через функцию CPExportKey (). Если этот флаг не установлен, ключ не будет экспортируемым и будет доступен только в пределах текущей сессии приложению, которое создало этот ключ. Действие этого флага не распространяются на открытые ключи ключевых пары.

CRYPT_USER_PROTECTED

Если этот флаг установлен, то при любом запросе на доступ к носителю секретного ключа пользователя выводится окно диалога, запрашивающего право доступа к ключу.

CRYPT_PREGEN

Если этот флаг установлен, то генерируется "пустая"ключевая пара обмена. Параметры этой ключевой пары должны быть установлены с использованием функции CPSetKeyParam ().

Выходные данные:phKey - Адрес, по которому функция копирует дескриптор сформированного

ключа (ключевой пары открытый/секретный ключи). Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_ALGID Параметр AlgId определяет алгоритм, не

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 20 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

поддерживаемый криптопровайдером.NTE_BAD_FLAGS Величина dwFlags имеет ошибочное значение.

NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.

NTE_FAIL Ошибка при считывании данных из системного реестра.

GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат.Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой,т.к. исчерпалось количество попыток разрешенное картой для ввода.

NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации

3.10. Функция CPGenRandom

Название: CPGenRandom Назначение: Используется для заполнения буфера случайными байтами..Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGenRandom ( HCRYPTPROV hProv ,

DWORD dwLen , BYTE * pbBuffer ); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.dwLen - Число байтов случайных данных, которые будут произведены.

Выходные данные:pbBuffer - Буфер, куда копируются случайные данные. Длина этого буфера вбайтах передаётся параметром dwLen.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 21 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Возвращаемые значения Описание

NTE_FAIL RPE_FAIL_STATBUFFER

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

NTE_FAIL RPE_FAIL_TESTBUFFER

Неудовлетворительная постоянно действующая статистика датчика случайных чисел. Эта ошибка носит вероятностный характер. Для корректно работающей программы вероятность возникновения ошибки не превышает 10^(-16).

NTE_KEYSET_ENTRY_BAD Данные неверно считаны из системного реестра.

Примечание. Функция CPGenRandom () получает случайные числа с программного ДСЧ контекста криптопровайдера hProv, который инициализируется при выполнении функции CPAcquireContext() c накопленного в контейнере ключевого носителя состояния ДСЧ иустановленных в системе физических ДСЧ. В случае, если контекст криптопровайдера открыт в режиме CRYPT_VERIFYCONTEXT и в системе не установлено физических ДСЧ,программный ДСЧ инициализируется с накапливаемого в реестре общесистемного состояния ДСЧ.

3.11. Функция CPGetKeyParam

Название: CPGetKeyParam Назначение: Возвращает параметры ключа.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGetKeyParam ( HCRYPTPROV hProv ,

HCRYPTKEY hKey , DWORD dwParam ,BYTE * pbData , DWORD * pdwDataLen ,DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор ключа, параметры которого устанавливаются.dwParam - Параметр, принимающий следующие возможные значения:

Значение dwParam Содержимое буфера pbData

KP_ALGID Идентификатор алгоритма (ALG_ID), соответствующий данному ключу.

KP_PERMISSIONS Флаги разрешения использования ключа. Задается величиной DWORD.

KP_IV Начальный вектор инициализации (IV или синхропосылка)алгоритма шифрования.

KP_MODE Режим алгоритма шифрования. Задается величиной DWORD. Используются режимы шифрования:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 22 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

• CRYPT_MODE_ECB - ГОСТ 28147-89 режим простой замены;

• CRYPT_MODE_OFB - ГОСТ 28147-89 режим гаммирования;

• CRYPT_MODE_CFB - ГОСТ 28147-89 режим гаммирования с обратной связью.

• CRYPT_MODE_CBC - блочный шифр с обратной связью на базе ГОСТ 28147-89;

KP_MODE_BITS

Глубина обратной связи. Задается величиной DWORD. По умолчанию значение этой величины равно 64, что соответствует режиму гаммирования с обратной связью ГОСТ 28147-89.

KP_MIXMODE Дополнительный параметр ключа. Устанавливает режим преобразованием ключа после зашифрования каждых 1024 байт информации.

KP_KEYLEN Длина ключа в битах. Задается величиной DWORD, указывающей число бит в ключе.

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

KP_DHOID Идентификатор алгоритма Диффи-Хеллмана. Строковая величина с признаком конца строки.

KP_SIGNATUREOID Идентификатор алгоритма подписи. Строковая величина спризнаком конца строки.

KP_HASHOID Идентификатор функции хеширования, устанавливаемой приложением. Строковая величина с признаком конца строки.

KP_Y Открытый ключ ключевой пары.

dwFlags - Параметр имеет нулевое значение:pdwDataLen - Адрес длины данных параметра. При вызове функции указанный параметр содержит число байтов в буфере pbData.

Выходные данные:pbData - Буфер данных параметра. Функция копирует соответствующие параметру данные в буфер. Формат этих данных зависит от значения dwParam.Если параметр - NULL, то данные не копируются. Требуемый размер буфера вбайтах возвращается в pdwDataLen.pdwDataLen - Адрес длины данных параметра. После выполнения функции параметр будет установлен числом байтов данных параметра, скопированных вбуфер pbData. Если буфер, соответствующий pbData, недостаточно велик,чтобы в него копировать запрошенные данные, через функцию GetLastError() будет возвращен код ошибки ERROR_MORE_DATA. В этом случае требуемый размер буфера возвращается в pdwDataLen. Если эта функция

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 23 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом параметре возвращается ноль.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

ERROR_MORE_DATA Размер буфера pbData недостаточен для копирования затребованных данных.

NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.NTE_BAD_TYPE Параметр dwParam передаёт неизвестное значение параметра.

NTE_PERM Попытка чтения ключевых параметров, когда право чтения криптопровайдером не представлено.

Примечание. После того, как эта функция была вызвана, дескриптор hProv становится недействительным. Сессионные ключи и объекты функции хэширования, созданные сиспользованием дескриптора hProv, разрушаются.

3.12. Функция CPGetUserKey

Название: CPGetUserKey Назначение: возвращает дескриптор одной из постоянных ключевых пар в ключевом

контейнере.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGetUserKey ( HCRYPTPROV hProv ,

+D dwKeySpec , HCRYPTKEY * phUserKey); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.dwKeySpec - Спецификация возвращаемого ключа. Следующие типы лючевых пар и ключей определены в настоящее время:Значение Описание

AT_KEYEXCHANGE Ключевая пара обмена AT_SIGNATURE Ключевая пара цифровой подписи

dwFlags - Параметр имеет нулевое значение:

Выходные данные:phUserKey - Адрес, по которому функция копирует дескриптор ключа.

Возвращаемое значение:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 24 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_NO_KEY Ключ, указанный dwKeySpec параметром, не существует.

NTE_BAD_TYPE Значение параметра dwKeySpec неизвестно.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль,установленный функцией SetProvParam(), неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к.исчерпалось количество попыток, разрешенное картой для ввода.

3.13. Функция CPImportKey

Название: CPImportKey Назначение: Используется для импорта криптографического ключа из ключевого блоба в

контейнер криптопровайдера.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPImportKey ( HCRYPTPROV hProv ,

BYTE * pbData , DWORD dwDataLen ,HCRYPTKEY hImpKey , DWORD dwFlags ,HCRYPTKEY * phKey );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.pbData - Буфер, содержащий ключевой блоб, произведенный с иcпользованием функции CPExportKey () данным или другим криптопровайдером,функционирующим на удаленном компьютере.dwDataLen - Длина ключевого блоба в байтах.hImpKey - Дескриптор ключа, на котором осуществляется снятие криптографической защиты импортируемого ключа. Значение этого параметра должно соответствовать значению hExpKey, определённому для функции CPExportKey () при создании ключевого блоба. Если ключевой блоб зашифрован на сессионном ключе, этот параметр должен содержать дескриптор на сессионный ключ. Если ключевой блоб не зашифрован

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 25 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

(например, PUBLICKEYBLOB), то этот параметр не используется и должен быть равен нулю.dwFlags - Значение флага. Этот параметр в настоящее время используется только, когда ключевая пара (секретный/открытый ключи) импортируется вкриптопровайдер (в форме PRIVATEKEYBLOB). В этом случае, если импортируемый ключ должен заново экспортироваться, в этот параметр должен быть помещен флаг CRYPT_EXPORTABLE. Если этот флаг не используется, вызовы к CryptExportKey с дескриптором ключа будут терпеть неудачу.

Выходные данные:phKey - Адрес, по которому функция копирует дескриптор импортированного ключа.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_DATA Не прошёл контроль целостности импортируемого ключевого блоба.

NTE_BAD_FLAGS Параметр dwFlags содержит ошибочную величину.

NTE_BAD_KEY Один или оба из ключей, указанных hKey иhImpKey, не действительны.

NTE_BAD_TYPE Тип ключевого блоба не поддерживается этим криптопровайдером и, возможно, ошибочен.

NTE_PERM Попытка импорта ключа, когда право импорта криптопровайдером не предоставлено.

NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.

NTE_FAIL Нарушение целостности ключей в ОЗУ.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат.Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой,т.к. исчерпалось количество попыток,

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 26 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

разрешенное картой для ввода.

NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации

Примечание. Обычно для согласования (экспорта/импорта) сессионного ключа применяют алгоритм Диффи-Хеллмана. В этом случае ключ парной связи (ключ экспорта/импорта сессионного ключа) порождается операцией импорта открытого ключа получателя (отправителя) на ключевой паре отправителя (получателя).

3.14. Функция CPSetKeyParam

Название: CPSetKeyParam Назначение: Устанавливает параметры ключа.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPSetKeyParam ( HCRYPTPROV hProv ,

HCRYPTKEY hKey , DWORD dwParam ,BYTE * pbData , DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор ключа, параметры которого устанавливаются.dwParam - Параметр, принимающий следующие возможные значения:

Значение dwParam Содержимое буфера pbData

KP_ALGID

Идентификатор алгоритма ключа (ALG_ID),соответствующий данному ключу. Передаётся функции через буфер pbData. Возможо установить значение CALG_G28147 для ключей класса ALG_CLASS_DATA_ENCRYPT (сессионных ключей).

ALG_ID Описание

CALG_G28147

Ключ шифрования и/или имтозащиты данных по ГОСТ 28147-89. В последствии этот ключ можно пометить как ключ для импорта/экспорта спомощью функции CPSetKeyParam ().

CALG_PRO_EXPORT

Ключ экспорта/импорта ключей типа CALG_G28147 для хранения на диске или передачи по каналу связи.

CALG_SIMPLE_EXPORT

Ключ экспорта/импорта ключей типа CALG_G28147 по ГОСТ 28147-89 в режиме простой замены для хранения на

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 27 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

ключевом носителе.

Использование CALG_SIMPLE_EXPORT для ключей CALG_G28147, переданых в канале связи,возможно только в случае обеспечения строгой однократности операции импорта ключа принимающей стороной и гарантированой случайности получения ключа передающей стороной.

Недопустимо использование CALG_SIMPLE_EXPORT для экспорта/импорта ключей сцелью хранения их диске.

CALG_TLS1_MASTER Ключ для реализации протокола TLS.

CALG_TLS1_MAC_KEY Ключ для реализации протокола TLS.

CALG_TLS1_ENC_KEY Ключ для реализации протокола TLS.

KP_IV Начальный вектор (IV). Последовательность байтов,содержащая IV, передаётся функции через буфер pbData.

KP_PADDING

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

• PKCS5_PADDING - PKCS 5

KP_MODE

Режим шифра. Задается величиной DWORD. Передаётся функции через буфер pbData. В следующем списке приведены режимы шифрования, определённые в настоящее время:• CRYPT_MODE_ECB - ГОСТ 28147-89 режим простой замены;• CRYPT_MODE_OFB - ГОСТ 28147-89 режим гаммирования;• CRYPT_MODE_CFB - ГОСТ 28147-89 режим гаммирования с обратной связью.• CRYPT_MODE_CBC - блочный шифр с обратной связью;

KP_MODE_BITS Глубина обратной связи. Задается величиной DWORD. По умолчанию значение этой величины равно 64, что

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 28 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

соответствует режиму гаммирования с обратной связью ГОСТ 28147-89.

KP_MIXMODE

Дополнительный параметр ключа. Устанавливает режим преобразования ключа после зашифрования каждых 1024байт информации. Режим преобразования ключа установлен по умолчанию. Выйти из этого режима можно, если для этого параметра pbData будет установлена в FALSE. Если pbData установлена в TRUE, устанавливается режим преобразования ключа. Размер pbData - 4 байта.Может быть установлен для ключей типа CALG_G28147. Задается величиной DWORD.

KP_CIPHEROID Идентификатор узла замены. Строковая величина спризнаком конца строки.

KP_DHOID Идентификатор параметров ключа ГОСТ Р 34.10-94 и ГОСТ Р 34.10-2001 применяемых в алгоритме Диффи-Хеллмана.Строковая величина с признаком конца строки.

KP_HASHOID Идентификатор функции хеширования. Строковая величина с признаком конца строки.

KP_CLIENT_RANDOM

Идентификатор величины ClientRandom, используемой сключами типа CALG_TLS1_MASTER. Размер ClientRandom - 32 байта. Используется при преобразовании premaster_secret в master_secret и при генерации ключевой информации в момент создания хэша CALG_TLS1_MASTER_HASH

KP_SERVER_RANDOM

Идентификатор величины ServerRandom, используемой сключами типа CALG_TLS1_MASTER.Размер ServerRandom - 32 байта. Используется при преобразовании premaster_secret в master_secret и при генерации ключевой информации в момент создания хэша CALG_TLS1_MASTER_HASH

KP_PREHASH

Идентификатор, используемый ключами типа CALG_TLS1_MASTER. Предварительно требуется установить KP_CLIENT_RANDOM иKP_SERVER_RANDOM. Вызов преобразует premaster_secret в master_secret

KP_X Секретный ключ в ключевой паре. 32 байта в форме little endian.

pbData - Буфер данных параметра. При вызове функции буфер должен содержать данные, соответствующие значению параметра в dwParam. Формат данных зависит от типа параметра.dwFlags - Значения флагов. Параметр зарезервирован для будущего использования и должен быть 0.

Выходные данные: Отсутствуют.Возвращаемое значение:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 29 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.

NTE_BAD_TYPE Параметр dwParam передаёт неизвестное значение параметра.

NTE_PERM Попытка чтения ключевых параметров, когда право чтения криптопровайдером не предоставлено.

NTE_FIXEDPARAMETER Была произведена попытка установить параметры,постоянные для данного криптопровайдера.

3.15. Функция CPDecrypt

Название: CPDecrypt Назначение: Расшифровывает данные, предварительно зашифрованные функцией

CPEncrypt(). Одновременно может быть произведено хэширование данных.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDecrypt ( HCRYPTPROV hProv ,

RYPTKEY hKey , HCRYPTHASH hHash , BOOL Final ,ORD dwFlags , BYTE * pbData , DWORD * pdwDataLen );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор экспортируемого ключа.hHash - Дескриптор объекта хэширования. Если хэширование данных одновременно с их расшифрованием не требуется, этот параметр должен быть нулевой.Final - Булева величина. Определяет, является ли переданный функции блок последним расшифрованным блоком данных. Она должна быть установлена TRUE, если блок - последний или единственный, и FALSE – в противном случае.dwFlags - Значения флагов. Параметр зарезервирован для будущего использования и должен быть 0.pbData - Буфер, содержащий данные для расшифрования.pdwDataLen - Адрес длины данных. Параметр dwDataLen определяет число байтов шифртекста в буфере pbData.

Выходные данные:pbData - Буфер, содержащий открытый текст.pdwDataLen - Адрес длины данных. Через этот параметр функция возвращает указатель на число байтов открытого текста, помещенного в буфер pbData.

Возвращаемое значение:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 30 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Параметр AlgId определяет алгоритм, который не поддерживается криптопровайдером.

NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.NTE_BAD_DATA Данные для расшифрования недействительны.NTE_BAD_LEN Размер буфера для полученного открытого текста.

NTE_PERM Право расшифрования на данном ключе криптопровайдером не предоставлено.

NTE_FAIL Нарушение целостности ключей в ОЗУ.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей.

3.16. Функция CPEncrypt

Название: CPEncrypt Назначение: Производит шифрование данных. Одновременно может быть произведено их

хэширование.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPEncrypt ( HCRYPTPROV hProv ,

HCRYPTKEY hKey , HCRYPTHASH hHash ,BOOL Final , DWORD dwFlags , BYTE * pbData ,DWORD * pdwDataLen , DWORD dwBufLen );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hKey - Дескриптор экспортируемого ключа.hHash - Дескриптор объекта хэширования. Если хэширование данных не требуется, этот параметр должен быть нулевой.Final - Булева величина. Определяет, является ли переданный функции блок последним шифруемым блоком данных. Она должна быть установлена TRUE, если блок - последний или единственный, и FALSE – в противном случае.dwFlags - Значения флагов. Параметр зарезервирован для будущего использования и должен быть 0.pbData - Буфер, содержащий данные для шифрования.pdwDataLen - Адрес длины данных. Параметр dwDataLen определяет число байтов в буфере pbData.dwBufLen - Размер буфера pbData в байтах.

Выходные данные:pbData - Буфер, содержащий зашифрованный текст.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 31 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

pdwDataLen - Адрес длины данных. Через этот параметр функция возвращает указатель на число байтов шифртекста, помещенного в буфер pbData.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Ключ hKey определяет алгоритм, который данный криптопровайдер не поддерживает.

NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.NTE_BAD_DATA Данные для зашифрования недействительны.

NTE_BAD_LEN Размер буфера недостаточен для помещения в него шифртекста.

ERROR_MORE_DATA Размер буфера pbData не достаточен для копирования затребованных данных.

NTE_PERM Право зашифрования на данном ключе криптопровайдером не предоставлено.

NTE_FAIL Нарушение целостности ключей в ОЗУ.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей.

3.17. Функция CPCreateHash

Название: CPCreateHash Назначение: Инициализирует дескриптор нового объекта функции хэширования потока

данных.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPCreateHash ( HCRYPTPROV hProv ,

ALG_ID AlgId , HCRYPTKEY hKey ,DWORD dwFlags , HCRYPTHASH * phHash);

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.AlgId - Идентификатор используемого алгоритма хэширования. Вкриптопровайдере определены следующие алгоритмы хэширования:

• CALG_GR3411 - Алгоритм хэширования в соответствии с ГОСТ Р34.11-94;

• CALG_G28147_IMIT - Алгоритм имитозащиты в соответствии сГОСТ 28147-89;

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 32 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

• CALG_TLS1_MASTER_HASH - Объект, содержащий ключевую информацию для создания ключей CALG_TLS1_ENC_KEY иCALG_TLS1_MAC_KEY;

• CALG_TLS1PRF - Алгоритм "производящей функции" (PRF), генерирующей блок данных произвольной длины на основе ключа,метки и бинарных данных.

hKey - Если используется алгоритм имитозащиты по ГОСТ 28147-89 (CALG_G28147_IMIT), в этом параметре передаётся ключ сессии для объекта функции хэширования. Если используется алгоритм CALG_TLS1_MASTER_HASH, в этом параметре передается master_secret (ключ типа CALG_TLS1_MASTER), на основе которого будет создана ключевая информация по следующей формуле:

key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random); Предварительно следует установить KP_CLIENT_RANDOM иKP_SERVER_RANDOM. Если используется алгоритм CALG_TLS1PRF, в этом параметре передается ключ типа CALG_TLS1_MASTER. dwFlags - Значения флагов. Параметр зарезервирован для будущего использования и должен быть 0.

Выходные данные:phHash – Адрес, по которому функция копирует дескриптор нового объекта функции хэширования.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Параметр AlgId определяет алгоритм, который не поддерживается криптопровайдером.

NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.NTE_FAIL Ошибка при считывании данных из системного реестра.GPE_CORRUPT_KEYCONTEXT Нарушение целостности ключей

3.18. Функция CPDestroyHash

Название: CPDestroyHash

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 33 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Назначение: Разрушает объект функции хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDestroyHash ( HCRYPTPROV hProv ,

HCRYPTHASH hHash ); Входные данные:

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор разрушаемого объекта функции хэширования

Выходные данные: Отсутствуют.Возвращаемое значение:

При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание NTE_BAD_TYPE Тип алгоритма hHash ошибочен.

3.19. Функция CPDuplicateHash

Название: CPDuplicateHash Назначение: Создает точную копию объекта функции хэширования, включая все его

переменные, определяющие внутреннее состояние объекта функции хэширования.

Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPDuplicateHash ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , DWORD * pdwReserved ,DWORD dwFlags , HCRYPTHASH * phHash );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования.pdwReserved - Параметр зарезервирован для будущего использования и должен быть NULL. dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.

Выходные данные:phHash - Адрес по которому функция копирует дескриптор нового объекта функции хэширования.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 34 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

Возвращаемые значения Описание NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.

3.20. Функция CPGetHashParam

Название: CPGetHashParam Назначение: Возвращает параметры объекта функции хэширования и значение функции

хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPGetHashParam ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , DWORD dwParam ,BYTE * pbData , DWORD * pdwDataLen , DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования.pdwReserved - Параметр зарезервирован для будущего использования и должен быть NULL. dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.pdwDataLen - Адрес длины данных параметра.dwParam - Параметр, принимающий следующие возможные значения:

Значение dwParam Содержимое буфера pbData

HP_ALGID

Алгоритм функции хэширования. Идентификатор алгоритма(ALG_ID), соответствующий данному объекту функции хэширования. Возвращается через буфер pbData. ВpdwDataLen будет возвращена величина 4.

HP_HASHSIZE

Размер значения функции хэширования. Величина DWORD, определяющая число байтов в значении функции хэширования, будет возвращена через буфер pbData. ВpdwDataLen будет возвращена величина 4.

HP_HASHVAL

Значение функции хэширования. Вычисленное значение функции хэширования будет возвращено через буфер pbData. Длина значения функции хэширования будет возвращена вpdwDataLen.

HP_HASHSTARTVECT Стартовый вектор функции хеширования, устанавливаемый приложением.Массив из 32 байт.

KP_HASHOID Идентификатор функции хеширования, устанавливаемой приложением. Строковая величина с признаком конца строки.

Следующее значение параметра устанавливается для объекта функции хеширования типа CALG_GR341:

Значение dwParam Содержимое буфера pbData

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 35 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

HP_HASHSTARTVECT

Значение стартового вектора объекта функции хэширования.Значение стартового вектора объекта функции хэширования будет возвращено через буфер pbData. Длина значения стартового вектора объекта функции хэширования будет возвращена в pdwDataLen.

Выходные данные:pbData - Буфер данных параметра. Функция копирует соответствующие параметру данные в буфер. Формат этих данных зависит от значения dwParam. Если параметр - NULL, то данные не копируются. Требуемый размер буфера вбайтах возвращается в pdwDataLen. pdwDataLen - Адрес длины данных параметра. После исполнения функции параметр будет установлен числом байтов данных параметра, скопированных вбуфер pbData. Если буфер, соответствующий pbData недостаточно большой,чтобы в него копировать запрошенные данные, будет возвращен код ошибки ERROR_MORE_DATA через функцию SetLastError(). В этом случае требуемый размер буфера возвращается в pdwDataLen. Если функция завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом параметре возвращается ноль.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

ERROR_MORE_DATA Размер буфера pbData недостаточен для копирования затребованных данных.

NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.

NTE_BAD_TYPE Параметр dwParam передаёт неизвестное значение параметра.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль установленный функцией SetProvParam неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к.исчерпалось количество попыток разрешенное картой для ввода.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 36 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

3.21. Функция CPHashData

Название: CPHashData Назначение: Передаёт данные указанному объекту функции хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPHashData ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , BYTE * pbData ,DWORD dwDataLen , DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования.pbData - Адрес хэшируемых данных.dwDataLen - Число байтов хэшируемых данных.dwFlags - Значения флагов. В настоящее время для этой функции значения флагов не определены. Криптопровайдер игнорирует этот параметр.

Выходные данные: Отсутствуют.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Ключ сессии hKey определяет алгоритм, который данный криптопровайдер не поддерживает.

NTE_BAD_HASH_STATE Была сделана попытка добавить данные к объекту функции хэширования, который уже отмечен как "закрытый".

NTE_BAD_KEY Используется алгоритм хэширования (CALG_G28147_IMIT), но сессионный ключ разрушен прежде, чем действие хэширования завершено.

NTE_FAIL Нарушение целостности ключей в ОЗУ.

3.22. Функция CPHashSessionKey

Название: CPHashSessionKey Назначение: Передаёт криптографический ключ указанному объекту функции

хэширования. Это позволяет хэшировать ключи сессии без передачи ключа приложению.

Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPHashSessionKey ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , HCRYPTKEY hKey ,DWORD dwFlags );

Входные данные:

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 37 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования.hKey - Дескриптор хэшируемого ключа сессии.dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.

Выходные данные: Отсутствуют.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Параметр AlgId определяет алгоритм, который не поддерживается криптопровайдером.

NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.

NTE_BAD_HASH_STATE Была сделана попытка добавить данные к объекту функции хэширования, который уже отмечен как "закрытый".

NTE_BAD_KEY Тип хэшируемого ключа не соответствует ALG_TYPE_BLOCK.

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

3.23. Функция CPSetHashParam

Название: CPSetHashParam Назначение: Устанавливает параметры объекта хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPSetHashParam ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , DWORD dwParam ,BYTE * pbData , DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования.dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.dwParam - Параметр, принимающий следующие возможные значения:

Значение dwParam Содержимое буфера pbData

HP_HASHVAL Устанавливается для объекта функции хэширования типа CALG_GR3411. Величина, 32 байта, должна быть установлена

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 38 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

в буфер pbData.

HP_HASHSIZE

Устанавливается для объекта функции хэширования типа CALG_G12847_IMIT. В буфер pbData записывается величина DWORD, определяющая число байтов имитовставки вдиапазоне от 1 до 4. По умолчанию длина имитовставки равна 4 байтам.

KP_HASHOID Идентификатор функции хеширования. Строковая величина спризнаком конца строки.

HP_TLS1PRF_SEED

Составляющая аргумента функции GOSTR3411_PRF. Принимает различные значения в сообщениях клиента исервера при реализации TLS Handshake Protocol. Задается ввиде структуры CRYPT_DATA_BLOB.

HP_TLS1PRF_LABEL

Составляющая аргумента функции GOSTR3411_PRF. Принимает различные значения в сообщениях клиента исервера при реализации TLS Handshake Protocol. Задается ввиде структуры CRYPT_DATA_BLOB.

pbData - Буфер данных параметра. При вызове функции буфер должен содержать данные, соответствующие значению параметра в dwParam. Формат данных зависит от типа параметра dwParam.

Выходные данные: Отсутствуют.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.

NTE_BAD_TYPE Параметр dwParam передаёт неизвестное значение параметра.

NTE_BAD_HASH_STATE Была сделана попытка получить значение функции хэширвания для "не закрытого" объекта функции хэширования.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат.Например, пароль имеет недопустимую длину или содержит недопустимые символы.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 39 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой,т.к. исчерпалось количество попыток,разрешенное картой для ввода.

NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации.

3.24. Функция CPSignHash

Название: CPSignHash Назначение: Возвращает значение цифровой подписи от значения функции хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPSignHash ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , DWORD dwKeySpec ,LPCWSTR sDescription , DWORD dwFlags , BYTE * pbSignature , DWORD * pdwSigLen );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования, который будет подписан.dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.dwKeySpec - Тип ключевой пары, использующейся при подписи значения функции хэширования.Могут быть использованы следующие значения:

Значение Описание AT_KEYEXCHANGE Ключевая пара обмена AT_SIGNATURE Ключевая пара цифровой подписи

sDescription - Описание подписываемых данных, добавляемых к объекту hash перед тем, как будет произведена подпись. При проверке подписи функцией CPVerifySignature(), должно использоваться то же описание подписанных данных. Это гарантирует, что подписывающая сторона и проверяющая знают то, что подписывается или проверяется. Если описание не включается вподпись, этот параметр устанавливается в NULL. Параметр сохранён для совместимости со спецификацией Microsoft Cryptographic Service Provider. Сцелью предотвращения уязвимости безопасности ЭЦП использовать этот параметр не рекомендуется. Он должен быть установлен в NULL. pbSignature - Буфер, через который возвращается значение подписи. Если через этот параметр паредаётся NULL, то подпись не вычисляется. В этом случае требуемый размер буфера (в байтах) возвращается через параметр pdwSigLen. pdwSigLen - Адрес длины данных подписи. При вызове функции указанный параметр должен содержать число байтов в буфере pbSignature.

Выходные данные:pdwSigLen - Адрес длины данных подписи. После исполнения функции параметр будет установлен числом байтов данных, скопированных в буфер pbSignature. Если буфер, соответствующий pbSignature, недостаточно большой,

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 40 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

чтобы в него копировать подпись, будет возвращен код ошибки ERROR_MORE_DATA через функцию SetLastError(). В этом случае требуемый размер буфера возвращается в pdwSigLen. Если эта функция завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом параметре возвращается ноль.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Дескриптор hHash определяет алгоритм, который данный криптопровайдер не поддерживает.

NTE_BAD_FLAGS dwFlags параметр отличен от нуля, либо параметр dwKeySpec содержит ошибочную величину.

NTE_BAD_KEY Секретный ключ, указанный dwKeySpec, не существует.

NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.

ERROR_MORE_DATA pbSignature буфер мал для копирования затребованных данных.

NTE_FAIL Нарушение целостности ключей в ОЗУ.GPE_CORRUPT_KEYPAIR_INFO Нарушение целостности ключей.

SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel

SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль установленный функцией SetProvParam неправильный

SCARD_E_INVALID_CHV

Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.

SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к.исчерпалось количество попыток разрешенное картой для ввода.

Примечание: Перед вызовом функции CPSignHash() должен быть получен дескриптор объекта хэширования через вызов функции CPCreateHash(). После этого используется функция CPHashData() или CPHashSessionKey() чтобы добавить данные или ключи сессии кобъекту хэширования. Функция CPSignHash() выполняет следующие внутренние шаги:

• объект функции хэширования "закрывается”; извлекается значение функции хэширования;

• значение функции хэширования дополняется, как это требуется алгоритмом подписи;

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 41 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

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

• После того, как объект функции хэширования подписан, приложение не может добавлять к нему новые данные. Приложение должно разрушить объект функции хэширования через вызов функции CPDestroyHash().

3.25. Функция CPVerifySignature

Название: CPVerifySignature Назначение: Осуществляет проверку цифровой подписи, соответствующей объекту

функции хэширования.Синтаксис: #include <Wincrypt.h> BOOL WINAPI CPVerifySignature ( HCRYPTPROV hProv ,

HCRYPTHASH hHash , BYTE * pbSignature ,DWORD dwSigLen , HCRYPTKEY hPubKey ,LPCWSTR sDescription , DWORD dwFlags );

Входные данные:hProv - дескриптор криптопровайдера. Получается через запрос функции CPAcquireContext.hHash - Дескриптор объекта функции хэширования, подпись которого проверяется.dwFlags - Параметр зарезервирован для будущего использования и должен быть 0.pbSignature - Буфер, содержащий значение проверяемой подписи.dwSigLen - Длина (в байтах) значения подписи.sDescription - Описание подписанных данных идентичное описанию,использованному при создании подписи. Это должна быть точно та же самая последовательность, которая использовалась в функции CPSignHash() при создании подписи. Если эта последовательность не соответствует использованной в функции CPSignHash(), проверка подписи сообщит, что подпись не верна.

Возвращаемое значение:При успешном завершении функция возвращает TRUE. В противном случае – FALSE. Соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.

Возвращаемые значения Описание

NTE_BAD_ALGID Дескриптор hHash определяет алгоритм, который этот криптопровайдер не поддерживает.

NTE_BAD_FLAGS dwFlags параметр отличен от нуля, либо параметр dwKeySpec содержит ошибочную величину.

NTE_BAD_KEY hPubKey параметр содержит дескриптор на недопустимый открытый ключ.

NTE_BAD_SIGNATURE Проверка подписи не прошла. Это могло случиться

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 42 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

потому, что изменились сами данные, последовательность описания не соответствует, или открытый ключ был определен ошибочно параметром hPubKey. Эта ошибка может быть возвращена также, если алгоритмы хэширования или подписи не соответствуют тем, спомощью которых вычислялась подпись.

NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.NTE_FAIL Нарушение целостности ключей в ОЗУ.RPE_CORRUPT_KEYPAIR_INFO Нарушение целостности ключей.Примечание: Функция CPVerifySignature выполняет следующие внутренне шаги:

• если параметр описания sDescription поддержан, он добавляется к объекту функции хэширования;

• объект функции хэширования "закрывается" и значение функции хэширования извлекается;

• значение функции хэширования дополняется, как это требуется алгоритмом подписи;

• осуществляется проверка подписи c использованием открытого ключа hPubKey;

• если подпись, переданная через буфер pbSignature, и вычисленное значение подписи не совпадают, возвращается код ошибки NTE_BAD_SIGNATURE.

После выполнения проверки подписи приложение не может добавлять новые данные кобъекту функции хэширования. Приложение должно разрушить объект функции хэширования через вызов функции CPDestroyHash().

4. Описание структур, используемых в функциях Dekart RSA Cryptographic Service Provider 4.1. Описание структуры _VTABLEPROVSTRUC

Структура VTABLEPROVSTRUC содержит указатели на callback функции, которые могут быть использованы функция криптопровайдера (CSP). struct _VTABLEPROVSTRUC { DWORD Version; FARPROC FuncVerifyImage; FARPROC FuncReturnhWnd; DWORD dwProvType; BYTE* pbContextInfo; DWORD cbContextInfo; LPSTR pszProvName; }; Описание данных, членов структуры FuncReturnhWnd - Указатель на callback функцию, возвращаемую информацию одескрипторе окна. Дескриптор окна будет использован для взаимодействия с пользователем через Microsoft® Win32®.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 43 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

FuncVerifyImage - Указатрль на callback функцию, используемую для проверки ЭЦП модуля.См. Примечание.Version - DWORD значение, определяющее версию структуры. Используются три версии структуры. Microsoft® Windows NT® версия 4.0 and Microsoft® Windows® 95 используют версию 1, которая содержит только три первых члена: Version, FuncVerifyImage, FuncReturnhWnd. Версия 2 используется в Windows 98. Используются первые шесть членов структуры. Версия 3 используется в Windows 2000. Оба включает все семь членов структуры.cbContextInfo - Значение, определяющее количество элементов в массиве pbContextInfo. dwProvType - Значение, определяющее тип криптопровайдера. Определены следующие типы криптопровайдеров:• PROV_GOST_DH • PROV_RSA_FULL • PROV_RSA_SIG • PROV_DSS • PROV_FORTEZZA • PROV_MS_EXCHANGE pbContextInfo - Указатель на массив контекстной информации. Переменные pbContextInfo иcbContextInfo определяют состав передаваемой информации, используемо при вызове функции CPSetProvParam с параметром PP_CONTEXT_INFO. pszProvName - Строка, содержащая имя провайдера.Примечание: Указатель на структуру VTABLEPROVSTRUC доступен только во врема вызова функции CPAcquireContext. Если члены структуры необходимы для дальнейшей работы, необходимо произвести копирование значений. Скопированные указатели на функции, содержащиеся в струкруре и сами функции, могут быть использованы до тех пор пока не закрылась сессия с криптопровайдером. Все дополнительные модули (DLL), которые использует криптопровайдер могут быть подписаны, как и основной модуль. Перд загрузкой дополнительны модулей с использованием функции LoadLib, можно проверить подпись дополнительных модулей. Криптопровайдер может производить такую проверку, используя указатель на функцию FuncVerifyImage

4.2. Описание структуры _ PUBLICKEYSTRUC Структура PUBLICKEYSTRUC, так же известная, как структура BLOBHEADER, указывает тип ключевого блоба и алгоритм ключа находящегося в нём. Экземпляр этой структуры находится в начале поля pbData каждого ключевого блоба.

struct _PUBLICKEYSTRUC { BYTE bType; BYTE bVersion; WORD reserved; ALG_ID aiKeyAlg; }; Описание данных, членов структуры aiKeyAlg - Алгоритм ключа содержащегося в ключевом блобе.bType - Тип ключевого блоба. Поддерживаются следующие типы ключевых блобов:

bType Описание

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 44 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

PUBLICKEYBLOB Предназначен для транспорта открытых ключей.

PRIVATEKEYBLOB Предназначен для транспорта ключевых пар (секретных ключей).

SIMPLEBLOB Предназначен для транспорта сессионых ключей.bVersion - Номер версии формата ключевого блоба. В настоящий момент, версия всегда должна быть равна 0x02. reserved - Зарезервировано для использования в будущем. Должно устанавливаться в 0.

4.3. Описание структуры _ CRYPT_SIMPLEBLOB_HEADER Структура CRYPT_SIMPLEBLOB_HEADER является расширением структуры BLOBHEADER и находится в начале поля pbData ключевого блоба типа SIMPLEBLOB. struct CRYPT_SIMPLEBLOB_HEADER { BLOBHEADER BlobHeader; ALG_ID EncryptKeyAlgId; }; Описание данных, членов структуры BlobHeader - Общий заголовок ключевого блоба. Определяет алгоритм ключа находящегося в ключевом блобе.EncryptKeyAlgId -Определяет алгоритм экспорта ключа. Этот алгоритм является параметром ключа экспорта.

4.4. Описание структуры _ CRYPT_SIMPLEBLOB Псевдоструктура CRYPT_SIMPLEBLOB полностью описывает ключевой блоб типа SIMPLEBLOB. Все поля этой псевдоструктуры выравнены по границе байта и находятся всетевом порядке байт (ASN1 DER). struct CRYPT_SIMPLEBLOB { CRYPT_SIMPLEBLOB_HEADERt SimpleBlobHeader; BYTE bSV [SEANCE_VECTOR_LEN]; BYTE bEncryptedKey [G28147_KEYLEN]; BYTE bMacKey [EXPORT_IMIT_SIZE]; BYTE bEncryptionParamSet [1]; }; Описание данных, членов структуры bEncryptedKey - Зашифрованный ключ ГОСТ 28147-89. bEncryptionParamSet - Содержит ASN1 структуру в DER кодировке, определяющую параметры алгоритма шифрования.bMacKey - Имитовставка на ключ. Рассчитывается до зашифрования и проверяется после расшифрования.bSV - Вектор инциализации для алгоритма CALG_PRO_EXPORT. tSimpleBlobHeader - Общий заголовок ключевого блоба типа SIMPLEBLOB.

4.5. Описание структуры _ CRYPT_PUBKEYPARAM_Структура CRYPT_PUBKEYPARAM содержит признак ключей.

DSSSCT File : DCSP_pg1.doc Ref : DCSPPG0010 Revision:1.0 Page: 45 Copyright © Dekart S.R.L (www.dekart.com ) – 2005

This document shall not be disclosed to a third party without prior written consent of Dekart S.R.L. Никакая часть данного документа не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без

письменного разрешения владельца авторских прав.Ссылка на оригинал обязательна.

struct _CRYPT_PUBKEYPARAM_ { DWORD Magic; DWORD BitLen; }; Описание данных, членов структуры BitLen - Длина открытого ключа в битах.Magic - Признак ключей.

4.6. Описание структуры CRYPT_PUBKEY_INFO_HEADER Структура CRYPT_PUBKEY_INFO_HEADER содержит заголовок блоба открытго ключа или блоба ключевой пары

struct CRYPT_PUBKEY_INFO_HEADER { BLOBHEADER BlobHeader; CRYPT_PUBKEYPARAMKeyParam; }; Описание данных, членов структуры BlobHeader - Общий заголовок ключевого блоба. Определяет его тип и алгоритм ключа находящегося в ключевом блобе. Для ключевых пар алгоритм отражает её назначение.KeyParam - Основной признак и длинна ключей

4.7. Описание структуры CRYPT_PUBLICKEYBLOB Псевдоструктура CRYPT_PUBLICKEYBLOB полность описывает ключевой блоб типа PUBLICKEYBLOB. Все поля этой псевдоструктуры выравнены по границе байта инаходятся в сетевом порядке байт (ASN1 DER). struct CRYPT_PUBLICKEYBLOB { CRYPT_PUBKEY_INFO_HEADER tPublicKeyParam; BYTE bASN1GostR3410_94_PublicKeyParameters [1]; BYTE bPublicKey [1]; }; Описание данных, членов структуры bASN1GostR3410_94_PublicKeyParameters Содержит ASN1 структуру в DER кодировке, определяющую параметры открытого ключа