Посчитал Ma

This commit is contained in:
Стас Михайлов WindowsDesktop
2021-08-16 23:32:51 +03:00
parent d5294cff26
commit fa75eebfdd
3 changed files with 54 additions and 4 deletions
+48 -3
View File
@@ -158,9 +158,13 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C
Inithash: ;Инициирую R12D-r15D (ХЭШ) Inithash: ;Инициирую R12D-r15D (ХЭШ)
mov rax,CF_digests mov rax,CF_digests
mov r12,QWORD PTR [rax] mov r12,QWORD PTR [rax]
;bswap r12 ;привожу в прямой порядок байт r12
mov r13,QWORD PTR [rax+8] mov r13,QWORD PTR [rax+8]
;bswap r13 ;привожу в прямой порядок байт r13
mov r14,QWORD PTR [rax+16] mov r14,QWORD PTR [rax+16]
mov r15,QWORD PTR [rax+24] ;bswap r14 ;привожу в прямой порядок байт r14
mov r15,QWORD PTR [rax+24]
;bswap r15 ;привожу в прямой порядок байт r15
;Является ли массив последним? ;Является ли массив последним?
mov rax,CF_Last mov rax,CF_Last
cmp rax,1 ;1-блок является последним cmp rax,1 ;1-блок является последним
@@ -188,7 +192,7 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C
lea rcx,lastblock ;rcx - указатель ┃ lea rcx,lastblock ;rcx - указатель ┃
endingofsegment2: ; ┃ endingofsegment2: ; ┃
mov bl,[rax] ; перебрасываю хвост в локальную область ┃ mov bl,[rax] ; перебрасываю хвост в локальную область ┃
mov [rcx],bl ; mov [rcx],bl ; оптимизировать!!! наверняка - жуткий тормоз!!!
inc rax ; ┃ inc rax ; ┃
inc rcx ; ┃ inc rcx ; ┃
dec rdx ; ┃ dec rdx ; ┃
@@ -243,6 +247,8 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C
movdqu XMM2,XMMWORD PTR [rax+32] movdqu XMM2,XMMWORD PTR [rax+32]
movdqu XMM3,XMMWORD PTR [rax+48] movdqu XMM3,XMMWORD PTR [rax+48]
call Wt ; call Wt ;
;Хэширую их
call CompCycle
ret ret
Sha256 Endp Sha256 Endp
;Инициализация хэш функции, ввод исходных значений ;Инициализация хэш функции, ввод исходных значений
@@ -2073,7 +2079,7 @@ Wt proc; вынес в отдельную процедуру заполнени
;pshufd xmm15,xmm15,11100100b ;-0 (Rec) ;pshufd xmm15,xmm15,11100100b ;-0 (Rec)
;bswap edx ;bswap edx
movd xmm15,edx movd xmm15,edx
;W61---------начать с этого. Нужно заполнить XMM15z\------------------------------------------------------------------ ;W61---------------------------------------------------------------------------
sub rsp,16 sub rsp,16
movdqu [rsp],xmm0; сохраняю в стеке XMM0, чтобы он заменил XMM15 movdqu [rsp],xmm0; сохраняю в стеке XMM0, чтобы он заменил XMM15
xor rcx,rcx ;в ecx будет xor трёх вращений xor rcx,rcx ;в ecx будет xor трёх вращений
@@ -2194,4 +2200,43 @@ Wt proc; вынес в отдельную процедуру заполнени
add rsp,16 add rsp,16
ret ret
Wt Endp 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
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov ecx,r9d ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A 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))
;edx=Ma
ret
CompCycle Endp
end end
BIN
View File
Binary file not shown.
+6 -1
View File
@@ -16,4 +16,9 @@
искомое слово на младшие 32 бита XMM регистра искомое слово на младшие 32 бита XMM регистра
- Сделано - Сделано
Закончил расчёт w16, считает павильно. Но пока не получилось правильно сохранить в XMM4 Закончил расчёт w16, считает павильно. Но пока не получилось правильно сохранить в XMM4
-Сделано. Причина - при сохренении из памяти в регистр меняется порядок байт. Делал BSWAP и в XMM записывалось нормально. Также был косяк, когда на уже записанные регистры
делал BSWAP, что меняло порядок байт (начиная с XMM4) там, где это не нужно.
Приступаю к смешиванию...