Привет!
пт, 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) {