<div dir="auto"><div data-smartmail="gmail_signature" dir="auto"><br></div><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">пн, 13 Ñнв. 2020 г., 11:22 Vitaly Chikunov <<a href="mailto:vt@altlinux.org">vt@altlinux.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Jan 13, 2020 at 09:51:18AM +0300, Dmitry Belyavsky wrote:<br>
> On Mon, Jan 13, 2020 at 8:07 AM Vitaly Chikunov <<a href="mailto:vt@altlinux.org" target="_blank" rel="noreferrer">vt@altlinux.org</a>> wrote:<br>
> <br>
> > (В копилку ошибочных реализаций.)<br>
> ><br>
> > Ð’ одном роÑÑийÑком линукÑе, Ñ…Ñш Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð¹ кратной 64<br>
> > ÑчитаютÑÑ Ð¸Ð½Ð°Ñ‡Ðµ чем у вÑех оÑтальных:<br></blockquote></div><div dir="auto"><br></div><div dir="auto">ИмÑ, брат, имÑ!</div><div dir="auto"><br></div><div dir="auto"><br></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> ><br>
> > ...<br>
> <br>
> ><br>
> > ИнтереÑно что там могло пойти не так.<br>
> ><br>
> <br>
> Ðу как. Ð¤Ð¸Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ в ÑÐµÐ±Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ непрохешированного оÑтатка<br>
> до полного блока.<br>
> Вот еÑли оÑтаток не оÑтавить, а вÑÑ‘ равно дополнить - будет именно Ñто<br>
> Ñкорее вÑего.<br>
<br>
1. По-моему мы так и делаем.<br>
<br>
Рвот они не делают заполнение _пуÑтого блока_.<br>
<br>
Ð’ ГОСТ (Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ñ… блоков) они пропуÑкают шаги 3.1, 3.2, 3.3, 3.4.<br>
Ð’ примерах Ñказано "длина ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑŒÑˆÐµ 512, _поÑтому_ проиÑходит<br>
заполнение неполного блока". Рчто же делать когда блок полный?<br>
<br>
Кто прав?<br></blockquote></div><div dir="auto"><br></div><div dir="auto">Пункт 2.1 переход к заполнению еÑли длина оÑтатка меньше 512 бит. Таким образом полный блок обрабатываетÑÑ Ð½Ð° Ñтапе 2, а на Ñтапе три идёт дополнение пуÑтого блока.</div><div dir="auto"><br></div><div dir="auto">Ðо ÑоглашуÑÑŒ Ñ Ð”Ð¼Ð¸Ñ‚Ñ€Ð¸ÐµÐ¼, что Ñто должно бы покрыватьÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð¾Ð¼ из Ñтандарта</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Вот патч который дает результаты "как у них":<br>
<br>
diff --git a/gost3411-2012-core.c b/gost3411-2012-core.c<br>
index de582c6..55aad37 100644<br>
--- a/gost3411-2012-core.c<br>
+++ b/gost3411-2012-core.c<br>
@@ -163,13 +163,15 @@ stage3(GOST34112012Context *CTX)<br>
   buf.QWORD[0] = BSWAP64(CTX->bufsize << 3);<br>
 #endif<br>
<br>
-Â Â pad(CTX);<br>
+Â Â if (CTX->bufsize) {<br>
+Â Â Â Â pad(CTX);<br>
<br>
-Â Â g(&(CTX->h), &(CTX->N), (const unsigned char *) &(CTX->buffer));<br>
+Â Â Â Â g(&(CTX->h), &(CTX->N), (const unsigned char *) &(CTX->buffer));<br>
<br>
-Â Â add512(&(CTX->N), &buf, &(CTX->N));<br>
-Â Â add512(&(CTX->Sigma), (const union uint512_u *) &CTX->buffer[0],<br>
-Â Â Â Â Â Â &(CTX->Sigma));<br>
+Â Â Â Â add512(&(CTX->N), &buf, &(CTX->N));<br>
+Â Â Â Â add512(&(CTX->Sigma), (const union uint512_u *) &CTX->buffer[0],<br>
+Â Â Â Â Â Â &(CTX->Sigma));<br>
+Â Â }<br>
<br>
   g(&(CTX->h), &buffer0, (const unsigned char *) &(CTX->N));<br>
<br>
<br>
2. Кроме того, в нашем коде еÑÑ‚ÑŒ ÑтранноÑÑ‚ÑŒ:<br>
<br>
| static inline void<br>
| pad(GOST34112012Context *CTX)<br>
| {<br>
|Â Â Â if (CTX->bufsize > 63)<br>
|Â Â Â Â Â return;<br>
|<br>
|Â Â Â memset(CTX->buffer + CTX->bufsize,<br>
|Â Â Â Â Â 0x00, sizeof(CTX->buffer) - CTX->bufsize);<br>
|<br>
|Â Â Â CTX->buffer[CTX->bufsize] = 0x01;<br>
| }<br>
<br>
<br>
`CTX->bufsize` никогда не может быть больше 63.<br></blockquote></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">Ð”Ð»Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñти, думаю.</div><div dir="auto"><br></div><div dir="auto">-- </div><div dir="auto">With best wishes</div><div dir="auto">Dmitry</div></div>