Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline asp  
#1 Оставлено : 18 декабря 2017 г. 11:37:18(UTC)
asp

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.02.2015(UTC)
Сообщений: 3
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Пытаюсь создать хэш на сервере для отправки с последующим подписанием его на клиенте.
Приведенный ниже код работаeт для ГОСТ Р 34.10-2001. Для ГОСТ 34.10-2012 256 падает в функции CryptSetHashParam с ошибкой "Указан неправильный тип (2148073482)"

const PROV_GOST_2001_DH = 75;
PROV_GOST_2012_256 = 80;

ALG_SID_GR3411 = 30;
ALG_SID_GR3411_2012_256 = 33;

CALG_GR3411 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_GR3411);
CALG_GR3411_2012_256 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_GR3411_2012_256);

HP_OID = $000a;

szOID_GostR3411_94_CryptoProParamSet = '1.2.643.2.2.30.1';
szOID_CP_GOST_R3411_12_256 = '1.2.643.7.1.1.2.2';

.......

var Prov: HCRYPTPROV;
Hash: HCRYPTHASH;

HashLen: DWORD;

szOid: ANSIString;
CALG: NativeUInt;
ProvType: Cardinal;
................

if Oid = GOST_2001 then begin
ProvType := PROV_GOST_2001_DH;
HashLen := 32;
szOid := szOID_GostR3411_94_CryptoProParamSet;
CALG := CALG_GR3411;
end
else begin
if Oid = GOST_2012_256 then begin
ProvType := PROV_GOST_2012_256;
HashLen := 32;
szOid := szOID_CP_GOST_R3411_12_256;
CALG := CALG_GR3411_2012_256;
end
else begin
Exit;
end;
end;

if CryptAcquireContext(@Prov, nil, nil, ProvType, CRYPT_VERIFYCONTEXT) then begin
if CryptCreateHash(Prov, CALG, 0, 0, @Hash) then begin
if CryptSetHashParam(Hash, HP_OID, PByte(PANSIChar(szOID)), 0) then begin
.............
end;
end;
end;

Отредактировано пользователем 18 декабря 2017 г. 11:39:38(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#2 Оставлено : 18 декабря 2017 г. 12:32:28(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Здравствуйте.

Для начала: пункт 1 - оформление кода

Код:

const
  PROV_GOST_2001_DH = 75;
  PROV_GOST_2012_256 = 80;
  ALG_SID_GR3411 = 30;
  ALG_SID_GR3411_2012_256 = 33;
  CALG_GR3411 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_GR3411);
  CALG_GR3411_2012_256 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_GR3411_2012_256);
  HP_OID = $000a;
  szOID_GostR3411_94_CryptoProParamSet = '1.2.643.2.2.30.1';
  szOID_CP_GOST_R3411_12_256 = '1.2.643.7.1.1.2.2';
var
  Prov: HCRYPTPROV;
  Hash: HCRYPTHASH;
  HashLen: DWORD;
  szOid: ANSIString;
  CALG: NativeUInt;
  ProvType: Cardinal;
begin 
...
  if Oid = GOST_2001 then
  begin
    ProvType := PROV_GOST_2001_DH;
    HashLen := 32;
    szOid := szOID_GostR3411_94_CryptoProParamSet;
    CALG := CALG_GR3411;
  end
  else
  begin
    if Oid = GOST_2012_256 then
    begin
      ProvType := PROV_GOST_2012_256;
      HashLen := 32;
      szOid := szOID_CP_GOST_R3411_12_256;
      CALG := CALG_GR3411_2012_256;
    end
    else
    begin
      Exit;
    end;
  end;

  if CryptAcquireContext(@Prov, nil, nil, ProvType, CRYPT_VERIFYCONTEXT) then
  begin
    if CryptCreateHash(Prov, CALG, 0, 0, @Hash) then
    begin
      if CryptSetHashParam(Hash, HP_OID, PByte(PANSIChar(szOid)), 0) then
      begin

      end;
    end;
  end;
end; 

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 18 декабря 2017 г. 12:39:52(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,704
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Автор: asp Перейти к цитате
Для ГОСТ 34.10-2012 256 падает в функции CryptSetHashParam с ошибкой "Указан неправильный тип (2148073482)"


И чему равны переменные в этот момент для функций?

Цитата:

CryptAcquireContext
CryptCreateHash
CryptSetHashParam


Техническую поддержку оказываем тут
Наша база знаний
Offline Максим Коллегин  
#4 Оставлено : 18 декабря 2017 г. 13:01:09(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
У хэша 2012 года другие параметры OID. Точнее он там один.
Знания в базе знаний, поддержка в техподдержке
Offline asp  
#5 Оставлено : 18 декабря 2017 г. 14:02:46(UTC)
asp

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.02.2015(UTC)
Сообщений: 3
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: maxdm Перейти к цитате
У хэша 2012 года другие параметры OID. Точнее он там один.


Вот как раз эти параметры я и хотел бы узнать :)
Я передаю

Код:

ProvType := PROV_GOST_2012_256;      //80;
szOid := szOID_CP_GOST_R3411_12_256; //'1.2.643.7.1.1.2.2'
CALG := CALG_GR3411_2012_256;        //32801

Отредактировано пользователем 18 декабря 2017 г. 15:07:40(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 18 декабря 2017 г. 15:27:27(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,926
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Попробуйте для ГОСТ 34.11-2012 не задавать параметры.

Отредактировано пользователем 18 декабря 2017 г. 15:28:03(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
asp оставлено 18.12.2017(UTC)
Offline asp  
#7 Оставлено : 18 декабря 2017 г. 16:02:26(UTC)
asp

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.02.2015(UTC)
Сообщений: 3
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: afev Перейти к цитате
Попробуйте для ГОСТ 34.11-2012 не задавать параметры.


Спасибо, работает!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.