<div dir="ltr"><div dir="ltr">Привет!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jan 13, 2020 at 11:22 AM Vitaly Chikunov &lt;<a href="mailto:vt@altlinux.org">vt@altlinux.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Mon, Jan 13, 2020 at 09:51:18AM +0300, Dmitry Belyavsky wrote:<br>
&gt; On Mon, Jan 13, 2020 at 8:07 AM Vitaly Chikunov &lt;<a href="mailto:vt@altlinux.org" target="_blank">vt@altlinux.org</a>&gt; wrote:<br>
&gt; <br>
&gt; &gt; (В копилку ошибочных реализаций.)<br>
&gt; &gt;<br>
&gt; &gt; В одном российском линуксе, хэш для данных с длинной кратной 64<br>
&gt; &gt; считаются иначе чем у всех остальных:<br>
&gt; &gt;<br>
&gt; &gt; ...<br>
&gt; <br>
&gt; &gt;<br>
&gt; &gt; Интересно что там могло пойти не так.<br>
&gt; &gt;<br>
&gt; <br>
&gt; Ну как. Финализация включает в себя дополнение непрохешированного остатка<br>
&gt; до полного блока.<br>
&gt; Вот если остаток не оставить, а всё равно дополнить - будет именно это<br>
&gt; скорее всего.<br>
<br>
1. По-моему мы так и делаем.<br>
<br>
А вот они не делают заполнение _пустого блока_.<br></blockquote><div><br></div><div>Извини, знак перепутал :)</div><div>Писал по памяти.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">В ГОСТ (для полных блоков) они пропускают шаги 3.1, 3.2, 3.3, 3.4.<br>
В примерах сказано &quot;длина сообщения меньше 512, _поэтому_ происходит<br>
заполнение неполного блока&quot;. А что же делать когда блок полный?<br>
<br>
Кто прав?<br></blockquote><div><br></div><div>Я предполагаю, что Дегтярёв. По-хорошему этот вопрос должен решаться примерами из стандарта.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Вот патч который дает результаты &quot;как у них&quot;:<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-&gt;bufsize &lt;&lt; 3);<br>
 #endif<br>
<br>
-    pad(CTX);<br>
+    if (CTX-&gt;bufsize) {<br>
+       pad(CTX);<br>
<br>
-    g(&amp;(CTX-&gt;h), &amp;(CTX-&gt;N), (const unsigned char *) &amp;(CTX-&gt;buffer));<br>
+       g(&amp;(CTX-&gt;h), &amp;(CTX-&gt;N), (const unsigned char *) &amp;(CTX-&gt;buffer));<br>
<br>
-    add512(&amp;(CTX-&gt;N), &amp;buf, &amp;(CTX-&gt;N));<br>
-    add512(&amp;(CTX-&gt;Sigma), (const union uint512_u *) &amp;CTX-&gt;buffer[0],<br>
-           &amp;(CTX-&gt;Sigma));<br>
+       add512(&amp;(CTX-&gt;N), &amp;buf, &amp;(CTX-&gt;N));<br>
+       add512(&amp;(CTX-&gt;Sigma), (const union uint512_u *) &amp;CTX-&gt;buffer[0],<br>
+           &amp;(CTX-&gt;Sigma));<br>
+    }<br>
<br>
     g(&amp;(CTX-&gt;h), &amp;buffer0, (const unsigned char *) &amp;(CTX-&gt;N));<br>
<br>
<br>
2. Кроме того, в нашем коде есть странность:<br>
<br>
| static inline void<br>
| pad(GOST34112012Context *CTX)<br>
| {<br>
|     if (CTX-&gt;bufsize &gt; 63)<br>
|         return;<br>
|<br>
|     memset(CTX-&gt;buffer + CTX-&gt;bufsize,<br>
|         0x00, sizeof(CTX-&gt;buffer) - CTX-&gt;bufsize);<br>
|<br>
|     CTX-&gt;buffer[CTX-&gt;bufsize] = 0x01;<br>
| }<br>
<br>
<br>
`CTX-&gt;bufsize` никогда не может быть больше 63.<br>
<br></blockquote><div><br></div><div>Возможно, рудимент.</div><div><br></div></div>-- <br><div dir="ltr" class="gmail_signature">SY, Dmitry Belyavsky</div></div>