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 } }