diff --git a/sha-256.asm b/sha-256.asm index 8d07005..b18d721 100644 --- a/sha-256.asm +++ b/sha-256.asm @@ -2203,29 +2203,30 @@ Wt Endp CompCycle proc; Цикл сжатия. Вынес в отдельную процедуру ; на входе: R12-R15 текущий хэш ; XMM0 - XMM15 - Wt - ;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11) - mov r8,r12 - mov r9,r13 - mov r10,r14 - mov r11,r15 ;i=0 - rol r12,32 ;B=A - shl r13,32 ;D=C - rol r14,32 ;F=E - shl r15,32 ;H=G - mov eax,r12d - or r13,rax ;C=B - mov eax,r14d - or r15,rax ;G=F - mov rax,0ffffffffh - shl rax,32 - and r12,rax ;A=null - and r14,rax ;E=null + ;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11) + mov r8,r12 + mov r9,r13 + mov r10,r14 + mov r11,r15 + rol r12,32 ;B=A + shl r13,32 ;D=C + rol r14,32 ;F=E + shl r15,32 ;H=G + mov eax,r12d + or r13,rax ;C=B + mov eax,r14d + or r15,rax ;G=F + mov rax,0ffffffffh + shl rax,32 + and r12,rax ;A=null + and r14,rax ;E=null ;Ma mov eax,r8d ;eax=A mov rbx,r8 shr rbx,32 ;ebx=B - mov ecx,r9d ;ecx=C + mov rcx,r13 + shr rcx,32 ;ecx=C and eax,ebx ;A and B and ebx,ecx ;B and C mov edx,r8d ;edx=A @@ -2233,10 +2234,48 @@ CompCycle proc; Цикл сжатия. Вынес в отдельную проц or eax,ebx ;(A and B) or (B and C) or edx,eax ;(A and C) or ((A and B) or (B and C)) ;edx=Ma - - - - + ;Ch + mov eax,r10d;eax=E + and eax,r15d;eax=p1=(E and F) + mov ebx,r10d;ebx=E + xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh) + mov rcx,r15 + shr rcx,32 ;ecx=G + and ecx,ebx ;ecx=p3=(p2 and G) + or ecx,eax + ;ecx=Ch + ;Σо + ror r8d,2 ;a rightrotate 2 + mov eax,r8d + ror r8d,11 ;a rightrotate 13: + xor eax,r8d + ror r8d,9 ;a rightrotate 22: + xor r8d,eax + ;r8d=Σо + ;Σ1 + ror r10d,6 ;a rightrotate 6 + mov eax,r10d + ror r10d,5 ;a rightrotate 11: + xor eax,r10d + ror r10d,14 ;a rightrotate 22: + xor r10d,eax + ;r10d=Σ1 + ;T1 + mov eax,k_konst + pshufd XMM0,XMM0,00111001b + movd ebx,XMM0 + bswap ebx + add eax,ebx ;Wt+kn + add eax,ecx ;Wt+kn+Ch + add eax,r10d ;Wt+kn+Ch+Σ1 + shr r11,32 ;r11d=H + add r11d,eax ;Wt+kn+Ch+Σ1+h + shr r9,32 ;r9d=D + add r9d,r11d ;D+T1 + or r14,r9 ;E=D+T1 + add r11d,r8d ;T1+Σо + add r11d,edx ;T1+Σо+Ma + or r12,r11 ;A=T1+T2 ret CompCycle Endp end \ No newline at end of file diff --git a/sha-256.dll b/sha-256.dll index 41f4e84..cec50c7 100644 Binary files a/sha-256.dll and b/sha-256.dll differ diff --git a/Книга1.2.xlsm b/Книга1.2.xlsm index cb2e108..52e7fbc 100644 Binary files a/Книга1.2.xlsm and b/Книга1.2.xlsm differ diff --git a/Регистры.txt b/Регистры.txt index 20444ab..b32bffc 100644 --- a/Регистры.txt +++ b/Регистры.txt @@ -1,14 +1,15 @@ RAX 64(double) 00000000 00000000 8 байт +RBX 64(double) 00000000 00000000 8 байт RCX 64(double) 00000000 00000000 8 байт -RDX 64(double) 00000000 00000000 8 байт -R8 64(double) 00000000 00000000 8 байт - A,B (Занят только во время цикла) -R9 64(double) 00000000 00000000 8 байт - C,D (Занят только во время цикла) -R10 64(double) 00000000 00000000 8 байт - E,F (Занят только во время цикла) -R11 64(double) 00000000 00000000 8 байт - G,H (Занят только во время цикла) -R12 64(double) 00000000 00000000 8 байт - H1,H2 -R13 64(double) 00000000 00000000 8 байт - H3,H4 -R14 64(double) 00000000 00000000 8 байт - H5,H6 -R15 64(double) 00000000 00000000 8 байт - H7,H8 +RDX 64(double) 00000000 00000000 8 байт +R8 64(double) 00000000 00000000 8 байт - B,A (Занят только во время цикла) +R9 64(double) 00000000 00000000 8 байт - D,C (Занят только во время цикла) +R10 64(double) 00000000 00000000 8 байт - F,E (Занят только во время цикла) +R11 64(double) 00000000 00000000 8 байт - H,G (Занят только во время цикла) +R12 64(double) 00000000 00000000 8 байт - H2,H1 +R13 64(double) 00000000 00000000 8 байт - H4,H3 +R14 64(double) 00000000 00000000 8 байт - H6,H5 +R15 64(double) 00000000 00000000 8 байт - H8,H7 XMM0 128 00000000 00000000 00000000 00000000 16 байт - W3,W2,W1,W0 XMM1 128 00000000 00000000 00000000 00000000 16 байт - W7,W6,W5,W4 XMM2 128 00000000 00000000 00000000 00000000 16 байт - W11,W10,W9,W8