From bae0af96936fec8f0651efc3e74d475ed4ffa7f7 Mon Sep 17 00:00:00 2001 From: Stanislav N Mikhailov Date: Wed, 4 Mar 2026 21:05:17 +0300 Subject: [PATCH] Fix SHA-256 DLL stability issues and return code --- .gitignore | 6 +++++- sha-256.asm | 18 +++++++++++------- sha-256.dll | Bin 22528 -> 22528 bytes sha-256.exp | Bin 1088 -> 1123 bytes sha-256.lib | Bin 2198 -> 2198 bytes 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 782b392..2afcf7e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,9 @@ sha-256.obj sha-256.dll sha-256.lib sha-256.exp +tmp_smoke_sha/* +tmp_verify_sha/* +*.h +*.tmp +*.c -sha-256.dll diff --git a/sha-256.asm b/sha-256.asm index a1e710a..ffb43c5 100644 --- a/sha-256.asm +++ b/sha-256.asm @@ -140,9 +140,9 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C movdqu myXMMSAVE+128,XMM14 movdqu myXMMSAVE+144,XMM15 mov myRnSAVE,r12 - mov myRnSAVE+4,r13 - mov myRnSAVE+8,r14 - mov myRnSAVE+12,r15 + mov myRnSAVE+8,r13 + mov myRnSAVE+16,r14 + mov myRnSAVE+24,r15 ;если хэш по предложенному адресу = 0, запускаем Sha256Init mov rax,qword ptr [r9] add r9,8 @@ -190,6 +190,8 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C mov lastblocksize,1 ;сообщаю, что произойдёт переполнение и блока будет 2 (1024 бита) endingofsegment1: ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ lea rcx,lastblock ;rcx - указатель ┃ + test rdx,rdx + jz end_endingofsegment2 endingofsegment2: ; ┃ mov bl,[rax] ; перебрасываю хвост в локальную область ┃ mov [rcx],bl ; оптимизировать!!! наверняка - жуткий тормоз!!! ┃ @@ -197,6 +199,7 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C inc rcx ; ┃ dec rdx ; ┃ jnz endingofsegment2;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + end_endingofsegment2: mov BYTE ptr [rcx],128 ;дописываю 1 и 7 бит mov edx,endingOfSegment inc rdx ;в rdx - длинна хвоста + 8 бит @@ -314,9 +317,10 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C movdqu XMM14,myXMMSAVE+128 movdqu XMM15,myXMMSAVE+144 mov R12,myRnSAVE - mov R13,myRnSAVE+4 - mov R14,myRnSAVE+8 - mov R15,myRnSAVE+12 + mov R13,myRnSAVE+8 + mov R14,myRnSAVE+16 + mov R15,myRnSAVE+24 + xor eax,eax ; NULL (0) = success ret Sha256 Endp ;Инициализация хэш функции, ввод исходных значений @@ -6945,4 +6949,4 @@ CompCycle proc; Цикл сжатия. Вынес в отдельную проц or r12,r11 ;A=T1+T2 ret CompCycle Endp -end \ No newline at end of file +end diff --git a/sha-256.dll b/sha-256.dll index 44c7ea1018d8b2aa1098a502d220abb9503b84de..a4863bc0e7ef195fd312c72e414ba7c1284af555 100644 GIT binary patch delta 884 zcmXw%T}YEr7{}k|w5{b@MmDvi<;-cCUz^fg>Q=hh@+;jEyeM=yLM2gS2xZVB5@ZQ& zPZvp&A4mj|4NNe~G7Q`HzLa^j{7-01rwb z=qsym4MpldtUNLKV{@m;>i;g*X1{sZIS%+*B=u(e=Wy5J=zcED}=-nk)kJp~AXAW>Rsql7~$ksT61; zs^p3q$EtYp@E8N|I9eqD5!HyD)eEHeD1NEs;RQmi06+0F)f9YOClGrQ4%hKyAW_7e ziXsnn4MA8%uqUWuznPML$YnZ%Ep%d*-2h|gv|p4bQ;+j-9-l@fImmHFd~H8}gqeBQ zT~4<%y|?R{yVFH$*0_w|NGO|da@=8dqFp?pr%P^zdSX}9D`egx_2`wcb4AQs#RkU- VCEJOO4ZPzxP9Hnw$REEX`41P@OcDS9 delta 897 zcmZ9KT}YEr7{||Z+NNga<`+uFY-_pHE$2*UZqwn0GgsSFDG&NtWxuTyW-4M+zut$diHr!x(C}7{ARid}Q_X0md{u}KsLi#3l zk*Pmwe`@PH(UfG;y~X4ta}+zSl2J(_TYmX4E7W5L)nX9NKozb-DI{irZb4MG8%(pA zvNFhaZf|dUuFkn7EO^i<*MR{Cbi!!C#~opy)5xW|`Q-IMu6IFlC0{?J88%gVDx_9)L})&ta}M?pP1m%gWf<}_ni zEkFxiQ;Rg{;)2dQC2TffL@Q981n9!BR;1|Q9we|#Cj#)5S{kriC%_;^N=3MhJ$jM8 zvEo_1K=YDlt(Vl;G3=>`!z1jjNYI}aE~p`iKrNP-;`C+>2fRYHDFG_J(&N=QYL3%! zGY34zpgBQ*nIz9>!kL;loX7V^6EKbUY7%ta$Ss;_>-NplihvG9<_v_Ys1s6H9Oz>pdcUScF!OKtC5s&=lgu zHUTk{w&Q>v@#i>QbF~uc`#kw&?sRj8l!5)s2pD|i885vDh zWRm4DG0`(NH8L=t?8X!y@P&baK?8^xfmnfANh@;pu?A@;x$iEABU8_cpSkj*cV^$V gJ4#7XQ>7FQ8yFZqL)GK7=q{5H)3nabg3S7i0PmndF8}}l delta 174 zcmaFNae#v}rHz^4KM=4_k{w&Q>u+sRj8l!5)sflRq+AG8tM<)?t$6FtX4yvNSd} zo*c*&Z^6L8@CAq^fS3`81sHk0ZPmW_FZ4lAW?0jX&35?=44;AGvOtVt;3Q@vrWr+> IO_=o=0qry~#{d8T diff --git a/sha-256.lib b/sha-256.lib index bc54a5dd73a96bfe56854feae0974b88d3921828..d66ca90d40473020dc490d8acd645fa89d38f31d 100644 GIT binary patch delta 108 zcmbOxI8AUv8xu>GY`}xbT}}PPSuJpPbBW!~|sKvr0|g$o!vk(KN$9I~f=l sm?rl#Nl(7Qk_J<$4^dUlA|koq)8tpIa3ho_?`PwHNXl(~&bFQr0PBt=YXATM delta 108 zcmbOxI8AUv8xzadYK7yIyO`Fo$S}+(nrz3aJ~^4$hzZEdXO)_~k@-KT@BP}lI~f=l sm?rl#Nl(7Qk_J<$4^dUl@+EQUy~(dw;YKJ=-p|GXk(Ar~oNYZL05xkSmjD0&