mirror of
https://github.com/stasenso/SHA256.git
synced 2026-06-26 21:32:43 +03:00
Посчитал Ma
This commit is contained in:
+48
-3
@@ -158,9 +158,13 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C
|
||||
Inithash: ;Инициирую R12D-r15D (ХЭШ)
|
||||
mov rax,CF_digests
|
||||
mov r12,QWORD PTR [rax]
|
||||
;bswap r12 ;привожу в прямой порядок байт r12
|
||||
mov r13,QWORD PTR [rax+8]
|
||||
;bswap r13 ;привожу в прямой порядок байт r13
|
||||
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
|
||||
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 - указатель ┃
|
||||
endingofsegment2: ; ┃
|
||||
mov bl,[rax] ; перебрасываю хвост в локальную область ┃
|
||||
mov [rcx],bl ; ┃
|
||||
mov [rcx],bl ; оптимизировать!!! наверняка - жуткий тормоз!!! ┃
|
||||
inc rax ; ┃
|
||||
inc rcx ; ┃
|
||||
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 XMM3,XMMWORD PTR [rax+48]
|
||||
call Wt ;
|
||||
;Хэширую их
|
||||
call CompCycle
|
||||
ret
|
||||
Sha256 Endp
|
||||
;Инициализация хэш функции, ввод исходных значений
|
||||
@@ -2073,7 +2079,7 @@ Wt proc; вынес в отдельную процедуру заполнени
|
||||
;pshufd xmm15,xmm15,11100100b ;-0 (Rec)
|
||||
;bswap edx
|
||||
movd xmm15,edx
|
||||
;W61---------начать с этого. Нужно заполнить XMM15z\------------------------------------------------------------------
|
||||
;W61---------------------------------------------------------------------------
|
||||
sub rsp,16
|
||||
movdqu [rsp],xmm0; сохраняю в стеке XMM0, чтобы он заменил XMM15
|
||||
xor rcx,rcx ;в ecx будет xor трёх вращений
|
||||
@@ -2194,4 +2200,43 @@ Wt proc; вынес в отдельную процедуру заполнени
|
||||
add rsp,16
|
||||
ret
|
||||
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
|
||||
BIN
Binary file not shown.
@@ -16,4 +16,9 @@
|
||||
искомое слово на младшие 32 бита XMM регистра
|
||||
- Сделано
|
||||
|
||||
Закончил расчёт w16, считает павильно. Но пока не получилось правильно сохранить в XMM4
|
||||
Закончил расчёт w16, считает павильно. Но пока не получилось правильно сохранить в XMM4
|
||||
-Сделано. Причина - при сохренении из памяти в регистр меняется порядок байт. Делал BSWAP и в XMM записывалось нормально. Также был косяк, когда на уже записанные регистры
|
||||
делал BSWAP, что меняло порядок байт (начиная с XMM4) там, где это не нужно.
|
||||
|
||||
Приступаю к смешиванию...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user