[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[openssl-gost] Re: [openssl-gost] ГОСТ 94 года



Привет!

пт, 24 мая 2019 г. в 17:51, Dmitry Belyavsky <beldmit@gmail.com>:
>
> Привет!
>
> Мне тут прислали пулл-реквест на исправление старого хеша для файла нулевой длины.
> А на самом деле как должно быть?
>
> https://github.com/gost-engine/engine/pull/143

Интересный вопрос. Если дословно вчитываться в код стандарта, получится,
 что для сообщения нулевой длины на этапе 2 (пп. 2.3 и 2.5) должно быть
вычисление шаговой функции от строки, заполненной нулями.

При этом ccgost engine до 2015 года в этом случае не вычислял шаговую
функцию (см далее). А потом кто-то молча поменял это место.

Свои реализации, кстати,  я проверял на совместимость со старым engine,
поэтому LibreSSL (которая на нем основывается) и libgcrypt тоже
не производят вычислений. rhash и основывающийся на коде из нее nettle
(и GnuTLS) тоже не делает вычислений. И вишенкой на торте в Wiki тоже
висят значения без этого вычисления.

Вопрос, какой из вариантов совместим с коммерческими реализациями?

commit cba16944bff9d8c5dcf37be641822cd3de6d2ec1
Author: Dmitry Belyavskiy <beldmit@gmail.com>
Date:   Fri Aug 14 21:08:23 2015 +0300

    Initial commit providing GOST 2012 algorithms.

diff --git a/gosthash.c b/gosthash.c
index 72faa24ed560..ee4a57debbfe 100644
--- a/gosthash.c
+++ b/gosthash.c
@@ -255,6 +255,8 @@ int finish_hash(gost_hash_ctx * ctx, byte * hashval)
         fin_len += ctx->left;
     }
     memset(buf, 0, 32);
+    if (fin_len == 0)
+        hash_step(ctx->cipher_ctx, H, buf);
     bptr = buf;
     fin_len <<= 3;              /* Hash length in BITS!! */
     while (fin_len > 0) {

-- 
With best wishes
Dmitry