namespace GostCryptography.Native
{
///
/// Константы для работы с криптографическим провайдером
///
public static class Constants
{
// ReSharper disable InconsistentNaming
#region Идентификаторы криптографических алгоритмов ГОСТ
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа пользователя. Открытый ключ получается по ГОСТ Р 34.10 2001
///
public const int CALG_DH_EL_SF = 0xaa24;
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа пользователя. Открытый ключ получается по ГОСТ Р 34.10 2012 (256 бит)
///
public const int CALG_DH_GR3410_2012_256_SF = 0xaa46;
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа пользователя. Открытый ключ получается по ГОСТ Р 34.10 2012 (512 бит)
///
public const int CALG_DH_GR3410_2012_512_SF = 0xaa42;
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа эфемерной пары. Открытый ключ получается по ГОСТ Р 34.10 2001
///
public const int CALG_DH_EL_EPHEM = 0xaa25;
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа эфемерной пары. Открытый ключ получается по ГОСТ Р 34.10 2012 (256 бит)
///
public const int CALG_DH_GR3410_12_256_EPHEM = 0xaa47;
///
/// Идентификатор алгоритма обмена ключей по Диффи-Хеллману на базе закрытого ключа эфемерной пары. Открытый ключ получается по ГОСТ Р 34.10 2012 (512 бит)
///
public const int CALG_DH_GR3410_12_512_EPHEM = 0xaa43;
///
/// Идентификатор алгоритма ЭЦП по ГОСТ Р 34.10-2001
///
public const int CALG_GR3410EL = 0x2e23;
///
/// Идентификатор алгоритма ЭЦП по ГОСТ Р 34.10-2012 (256 бит)
///
public const int CALG_GR3410_2012_256 = 0x2e49;
///
/// Идентификатор алгоритма ЭЦП по ГОСТ Р 34.10-2012 (512 бит)
///
public const int CALG_GR3410_2012_512 = 0x2e3d;
///
/// Идентификатор алгоритма хэширования в соответствии с ГОСТ Р 34.11-94
///
public const int CALG_GR3411 = 0x801e;
///
/// Идентификатор алгоритма хэширования в соответствии с ГОСТ Р 34.11-2012, длина выхода 256 бит
///
public const int CALG_GR3411_2012_256 = 0x8021;
///
/// Идентификатор алгоритма хэширования в соответствии с ГОСТ Р 34.11-2012, длина выхода 512 бит
///
public const int CALG_GR3411_2012_512 = 0x8022;
///
/// Идентификатор алгоритма ключевого хэширования (HMAC, Hash-based Message Authentication Code) на базе алгоритма ГОСТ Р 34.11-94 и сессионного ключа
///
public const int CALG_GR3411_HMAC = 0x8027;
///
/// Идентификатор алгоритма ключевого хэширования (HMAC, Hash-based Message Authentication Code) на базе алгоритма ГОСТ Р 34.11-94 и сессионного ключа , длина выхода 256 бит
///
public const int CALG_GR3411_2012_256_HMAC = 0x8034;
///
/// Идентификатор алгоритма ключевого хэширования (HMAC, Hash-based Message Authentication Code) на базе алгоритма ГОСТ Р 34.11-94 и сессионного ключа , длина выхода 512 бит
///
public const int CALG_GR3411_2012_512_HMAC = 0x8035;
///
/// Идентификатор алгоритма ключевого хэширования (HMAC, Hash-based Message Authentication Code) на базе алгоритма хэширования по ГОСТ Р 34.11
///
public const int CALG_GR3411_HMAC34 = 0x8028;
///
/// Идентификатор алгоритма симметричного шифрования по ГОСТ 28147-89
///
public const int CALG_G28147 = 0x661e;
///
/// Идентификатор алгоритма вычисления имитовставки по ГОСТ 28147-89
///
public const int CALG_G28147_IMIT = 0x801f;
///
/// Идентификатор алгоритма экспорта ключа КриптоПро
///
public const int CALG_PRO_EXPORT = 0x661f;
///
/// Идентификатор алгоритма экспорта ключа по ГОСТ 28147-89
///
public const int CALG_SIMPLE_EXPORT = 0x6620;
#endregion
#region Настройки контекста криптографического провайдера
///
/// Создать новый ключевой контейнер
///
public const uint CRYPT_NEWKEYSET = 8;
///
/// Использовать ключи локальной машины
///
public const uint CRYPT_MACHINE_KEYSET = 0x20;
///
/// Получить доступ к провайдеру без необходимости доступа к приватным ключам.
///
public const uint CRYPT_VERIFYCONTEXT = 0xf0000000;
#endregion
#region Параметры криптографического провайдера
public const int PP_CLIENT_HWND = 1;
///
/// Удаляет текущий контейнер с носителя
///
public const int PP_DELETE_KEYSET = 0x7d;
///
/// Задаёт пароль (PIN) для доступа к ключу AT_KEYEXCHANGE
///
public const int PP_KEYEXCHANGE_PIN = 0x20;
///
/// Задаёт пароль (PIN) для доступа к ключу AT_SIGNATURE
///
public const int PP_SIGNATURE_PIN = 0x21;
///
/// Тип криптопровайдера
///
public const int PP_PROVTYPE = 0x10;
///
/// Перечисление контейнеров криптопровайдера
///
public const int PP_ENUMCONTAINERS = 0x2;
///
/// Получение первого элемента в перечислении
///
public const uint CRYPT_FIRST = 0x1;
///
/// Получение следующего элемента в перечислении
///
public const uint CRYPT_NEXT = 0x2;
///
/// Возвращает FQCN (Fully Qualified Container Name) контейнера VipNet
///
public const uint CRYPT_UNIQUE = 0x8;
///
/// Возвращает FQCN (Fully Qualified Container Name) контейнера CryptoPro
///
public const uint CRYPT_FQCN = 0x10;
///
/// В перечислении нет больше элементов
///
public const uint ERROR_NO_MORE_ITEMS = 0x103;
///
/// Искомый сертификат не найден
///
public const int ERROR_NO_SUCH_CERTIFICATE = -2146435028; // 8010002C
#endregion
#region Параметры функции хэширования криптографического провайдера
///
/// Стартовый вектор функции хэширования, устанавливаемый приложением
///
public const int HP_HASHSTARTVECT = 8;
///
/// Значение функции хэширования в little-endian порядке байт в соотвествии с типом GostR3411-94-Digest CPCMS [RFC 4490]
///
public const int HP_HASHVAL = 2;
#endregion
#region Параметры функций шифрования криптографического провайдера
///
/// Признак ключей ГОСТ 28147-89 и мастер ключей TLS
///
public const int G28147_MAGIC = 0x374A51FD;
///
/// Признак ключей ГОСТ Р 34.10-94 и ГОСТ Р 34.10-2001
///
public const int GR3410_1_MAGIC = 0x3147414D;
#endregion
#region Параметры транспортировки ключей
///
/// Используется для транспортировки симметричных ключей CALG_G28147, CALG_UECSYMMETRIC
///
public const int SIMPLEBLOB = 1;
///
/// Используется для транспортировки открытых ключей
///
public const int PUBLICKEYBLOB = 6;
#endregion
#region Параметры ключей криптографического провайдера
///
/// Вектор инициализации (IV, синхропосылки) алгоритма шифрования
///
public const int KP_IV = 1;
///
/// Метод дополнения шифра ключа
///
public const int KP_PADDING = 3;
///
/// Режим шифра ключа
///
public const int KP_MODE = 4;
///
/// Идентификатор алгоритма ключа
///
public const int KP_ALGID = 7;
///
/// Идентификатор алгоритма экспорта для симметричного ключа
///
public const int KP_EXPORTID = 108;
///
/// Строковый идентификатор узла замены
///
public const int KP_CIPHEROID = 0x68;
///
/// Строковый идентификатор параметров ключа ГОСТ Р 34.10-2001, применяемых в алгоритме Диффи-Хеллмана
///
public const int KP_DHOID = 0x6a;
///
/// Строковый идентификатор функции хэширования
///
public const int KP_HASHOID = 0x67;
///
/// Закрытый ключ в ключевой паре
///
public const int KP_X = 14;
///
/// Сертификат X.509 в формате Distinguished Encoding Rules (DER)
///
public const int KP_CERTIFICATE = 0x1a;
///
/// Произведенный ключ может быть передан из криптопровайдера в ключевой блоб при экспорте ключа независимо от сессии криптопровайдера (исключает CRYPT_ARCHIVABLE)
///
public const int CRYPT_EXPORTABLE = 1;
///
/// Произведенный ключ может быть передан из криптопровайдера в ключевой блоб при экспорте ключа в раках одной сессии криптопровайдера (исключает CRYPT_EXPORTABLE)
///
public const int CRYPT_ARCHIVABLE = 0x4000;
///
/// При любом запросе на доступ к носителю закрытого ключа пользователя выводится окно диалога, запрашивающего право доступа к ключу
///
public const int CRYPT_USER_PROTECTED = 2;
///
/// Генерация пустой ключевой пары обмена
///
public const int CRYPT_PREGEN = 0x40;
///
/// Пара ключей для обмена ключами
///
public const int AT_KEYEXCHANGE = 1;
///
/// Пара ключей для формирования цифровой подписи
///
public const int AT_SIGNATURE = 2;
#endregion
#region Методы дополнения шифра ключа (KP_PADDING)
///
/// PKCS#5
///
public const int PKCS5_PADDING = 1;
///
/// Дополнение случайными байтами
///
public const int RANDOM_PADDING = 2;
///
/// Дополнение нулевыми байтами
///
public const int ZERO_PADDING = 3;
#endregion
#region Режимы шифра ключа (KP_MODE)
///
/// Cipher Block Chaining (CBC)
///
public const int CRYPT_MODE_CBC = 1;
///
/// Electronic codebook (ECB)
///
public const int CRYPT_MODE_ECB = 2;
///
/// Output Feedback (OFB)
///
public const int CRYPT_MODE_OFB = 3;
///
/// Cipher Feedback (CFB)
///
public const int CRYPT_MODE_CFB = 4;
///
/// Ciphertext stealing (CTS)
///
public const int CRYPT_MODE_CTS = 5;
#endregion
#region Коды ошибок
///
/// Aлгоритм, который данный криптопровайдер не поддерживает
///
public const int NTE_BAD_ALGID = -2146893816;
///
/// Данные некорректного размера
///
public const int NTE_BAD_DATA = -2146893819;
///
/// Дескриптор хэша ошибочен
///
public const int NTE_BAD_HASH = -2146893822;
///
/// Ключевой контейнер не был открыт или не существует
///
public const int NTE_BAD_KEYSET = -2146893802;
///
/// Ключевой контейнер с заданным именем не существует
///
public const int NTE_KEYSET_NOT_DEF = -2146893799;
///
/// Ключ с заданным параметром (AT_KEYEXCHANGE, AT_SIGNATURE или AT_UECSYMMETRICKEY) не существует
///
public const int NTE_NO_KEY = -2146893811;
///
/// Пользователь прервал операцию
///
public const int SCARD_W_CANCELLED_BY_USER = -2146434962;
#endregion
// ReSharper restore InconsistentNaming
}
}