mirror of
https://github.com/stasenso/SHA256.git
synced 2026-06-26 21:32:43 +03:00
Первый проход цикла смешивания готов!
This commit is contained in:
+61
-22
@@ -2203,29 +2203,30 @@ Wt Endp
|
|||||||
CompCycle proc; Цикл сжатия. Вынес в отдельную процедуру
|
CompCycle proc; Цикл сжатия. Вынес в отдельную процедуру
|
||||||
; на входе: R12-R15 текущий хэш
|
; на входе: R12-R15 текущий хэш
|
||||||
; XMM0 - XMM15 - Wt
|
; 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
|
;i=0
|
||||||
rol r12,32 ;B=A
|
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)
|
||||||
shl r13,32 ;D=C
|
mov r8,r12
|
||||||
rol r14,32 ;F=E
|
mov r9,r13
|
||||||
shl r15,32 ;H=G
|
mov r10,r14
|
||||||
mov eax,r12d
|
mov r11,r15
|
||||||
or r13,rax ;C=B
|
rol r12,32 ;B=A
|
||||||
mov eax,r14d
|
shl r13,32 ;D=C
|
||||||
or r15,rax ;G=F
|
rol r14,32 ;F=E
|
||||||
mov rax,0ffffffffh
|
shl r15,32 ;H=G
|
||||||
shl rax,32
|
mov eax,r12d
|
||||||
and r12,rax ;A=null
|
or r13,rax ;C=B
|
||||||
and r14,rax ;E=null
|
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
|
;Ma
|
||||||
mov eax,r8d ;eax=A
|
mov eax,r8d ;eax=A
|
||||||
mov rbx,r8
|
mov rbx,r8
|
||||||
shr rbx,32 ;ebx=B
|
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 eax,ebx ;A and B
|
||||||
and ebx,ecx ;B and C
|
and ebx,ecx ;B and C
|
||||||
mov edx,r8d ;edx=A
|
mov edx,r8d ;edx=A
|
||||||
@@ -2233,10 +2234,48 @@ CompCycle proc; Цикл сжатия. Вынес в отдельную проц
|
|||||||
or eax,ebx ;(A and B) or (B and C)
|
or eax,ebx ;(A and B) or (B and C)
|
||||||
or edx,eax ;(A and C) or ((A and B) or (B and C))
|
or edx,eax ;(A and C) or ((A and B) or (B and C))
|
||||||
;edx=Ma
|
;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
|
ret
|
||||||
CompCycle Endp
|
CompCycle Endp
|
||||||
end
|
end
|
||||||
BIN
Binary file not shown.
Binary file not shown.
+10
-9
@@ -1,14 +1,15 @@
|
|||||||
RAX 64(double) 00000000 00000000 8 байт
|
RAX 64(double) 00000000 00000000 8 байт
|
||||||
|
RBX 64(double) 00000000 00000000 8 байт
|
||||||
RCX 64(double) 00000000 00000000 8 байт
|
RCX 64(double) 00000000 00000000 8 байт
|
||||||
RDX 64(double) 00000000 00000000 8 байт
|
RDX 64(double) 00000000 00000000 8 байт
|
||||||
R8 64(double) 00000000 00000000 8 байт - A,B (Занят только во время цикла)
|
R8 64(double) 00000000 00000000 8 байт - B,A (Занят только во время цикла)
|
||||||
R9 64(double) 00000000 00000000 8 байт - C,D (Занят только во время цикла)
|
R9 64(double) 00000000 00000000 8 байт - D,C (Занят только во время цикла)
|
||||||
R10 64(double) 00000000 00000000 8 байт - E,F (Занят только во время цикла)
|
R10 64(double) 00000000 00000000 8 байт - F,E (Занят только во время цикла)
|
||||||
R11 64(double) 00000000 00000000 8 байт - G,H (Занят только во время цикла)
|
R11 64(double) 00000000 00000000 8 байт - H,G (Занят только во время цикла)
|
||||||
R12 64(double) 00000000 00000000 8 байт - H1,H2
|
R12 64(double) 00000000 00000000 8 байт - H2,H1
|
||||||
R13 64(double) 00000000 00000000 8 байт - H3,H4
|
R13 64(double) 00000000 00000000 8 байт - H4,H3
|
||||||
R14 64(double) 00000000 00000000 8 байт - H5,H6
|
R14 64(double) 00000000 00000000 8 байт - H6,H5
|
||||||
R15 64(double) 00000000 00000000 8 байт - H7,H8
|
R15 64(double) 00000000 00000000 8 байт - H8,H7
|
||||||
XMM0 128 00000000 00000000 00000000 00000000 16 байт - W3,W2,W1,W0
|
XMM0 128 00000000 00000000 00000000 00000000 16 байт - W3,W2,W1,W0
|
||||||
XMM1 128 00000000 00000000 00000000 00000000 16 байт - W7,W6,W5,W4
|
XMM1 128 00000000 00000000 00000000 00000000 16 байт - W7,W6,W5,W4
|
||||||
XMM2 128 00000000 00000000 00000000 00000000 16 байт - W11,W10,W9,W8
|
XMM2 128 00000000 00000000 00000000 00000000 16 байт - W11,W10,W9,W8
|
||||||
|
|||||||
Reference in New Issue
Block a user