|
|
|
TITLE sha512-586.asm
|
|
|
|
IF @Version LT 800
|
|
|
|
ECHO MASM version 8.00 or later is strongly recommended.
|
|
|
|
ENDIF
|
|
|
|
.586
|
|
|
|
.MODEL FLAT
|
|
|
|
OPTION DOTNAME
|
|
|
|
IF @Version LT 800
|
|
|
|
.text$ SEGMENT PAGE 'CODE'
|
|
|
|
ELSE
|
|
|
|
.text$ SEGMENT ALIGN(64) 'CODE'
|
|
|
|
ENDIF
|
|
|
|
ALIGN 16
|
|
|
|
_sha256_block_data_order PROC PUBLIC
|
|
|
|
$L_sha256_block_data_order_begin::
|
|
|
|
push ebp
|
|
|
|
push ebx
|
|
|
|
push esi
|
|
|
|
push edi
|
|
|
|
mov esi,DWORD PTR 20[esp]
|
|
|
|
mov edi,DWORD PTR 24[esp]
|
|
|
|
mov eax,DWORD PTR 28[esp]
|
|
|
|
mov ebx,esp
|
|
|
|
call $L000pic_point
|
|
|
|
$L000pic_point:
|
|
|
|
pop ebp
|
|
|
|
lea ebp,DWORD PTR ($L001K256-$L000pic_point)[ebp]
|
|
|
|
sub esp,16
|
|
|
|
and esp,-64
|
|
|
|
shl eax,6
|
|
|
|
add eax,edi
|
|
|
|
mov DWORD PTR [esp],esi
|
|
|
|
mov DWORD PTR 4[esp],edi
|
|
|
|
mov DWORD PTR 8[esp],eax
|
|
|
|
mov DWORD PTR 12[esp],ebx
|
|
|
|
ALIGN 16
|
|
|
|
$L002loop:
|
|
|
|
mov eax,DWORD PTR [edi]
|
|
|
|
mov ebx,DWORD PTR 4[edi]
|
|
|
|
mov ecx,DWORD PTR 8[edi]
|
|
|
|
mov edx,DWORD PTR 12[edi]
|
|
|
|
bswap eax
|
|
|
|
bswap ebx
|
|
|
|
bswap ecx
|
|
|
|
bswap edx
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
mov eax,DWORD PTR 16[edi]
|
|
|
|
mov ebx,DWORD PTR 20[edi]
|
|
|
|
mov ecx,DWORD PTR 24[edi]
|
|
|
|
mov edx,DWORD PTR 28[edi]
|
|
|
|
bswap eax
|
|
|
|
bswap ebx
|
|
|
|
bswap ecx
|
|
|
|
bswap edx
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
mov eax,DWORD PTR 32[edi]
|
|
|
|
mov ebx,DWORD PTR 36[edi]
|
|
|
|
mov ecx,DWORD PTR 40[edi]
|
|
|
|
mov edx,DWORD PTR 44[edi]
|
|
|
|
bswap eax
|
|
|
|
bswap ebx
|
|
|
|
bswap ecx
|
|
|
|
bswap edx
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
mov eax,DWORD PTR 48[edi]
|
|
|
|
mov ebx,DWORD PTR 52[edi]
|
|
|
|
mov ecx,DWORD PTR 56[edi]
|
|
|
|
mov edx,DWORD PTR 60[edi]
|
|
|
|
bswap eax
|
|
|
|
bswap ebx
|
|
|
|
bswap ecx
|
|
|
|
bswap edx
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
add edi,64
|
|
|
|
sub esp,32
|
|
|
|
mov DWORD PTR 100[esp],edi
|
|
|
|
mov eax,DWORD PTR [esi]
|
|
|
|
mov ebx,DWORD PTR 4[esi]
|
|
|
|
mov ecx,DWORD PTR 8[esi]
|
|
|
|
mov edi,DWORD PTR 12[esi]
|
|
|
|
mov DWORD PTR 4[esp],ebx
|
|
|
|
mov DWORD PTR 8[esp],ecx
|
|
|
|
mov DWORD PTR 12[esp],edi
|
|
|
|
mov edx,DWORD PTR 16[esi]
|
|
|
|
mov ebx,DWORD PTR 20[esi]
|
|
|
|
mov ecx,DWORD PTR 24[esi]
|
|
|
|
mov edi,DWORD PTR 28[esi]
|
|
|
|
mov DWORD PTR 20[esp],ebx
|
|
|
|
mov DWORD PTR 24[esp],ecx
|
|
|
|
mov DWORD PTR 28[esp],edi
|
|
|
|
ALIGN 16
|
|
|
|
$L00300_15:
|
|
|
|
mov ebx,DWORD PTR 92[esp]
|
|
|
|
mov ecx,edx
|
|
|
|
ror ecx,6
|
|
|
|
mov edi,edx
|
|
|
|
ror edi,11
|
|
|
|
mov esi,DWORD PTR 20[esp]
|
|
|
|
xor ecx,edi
|
|
|
|
ror edi,14
|
|
|
|
xor ecx,edi
|
|
|
|
mov edi,DWORD PTR 24[esp]
|
|
|
|
add ebx,ecx
|
|
|
|
mov DWORD PTR 16[esp],edx
|
|
|
|
xor esi,edi
|
|
|
|
mov ecx,eax
|
|
|
|
and esi,edx
|
|
|
|
mov edx,DWORD PTR 12[esp]
|
|
|
|
xor esi,edi
|
|
|
|
mov edi,eax
|
|
|
|
add ebx,esi
|
|
|
|
ror ecx,2
|
|
|
|
add ebx,DWORD PTR 28[esp]
|
|
|
|
ror edi,13
|
|
|
|
mov esi,DWORD PTR 4[esp]
|
|
|
|
xor ecx,edi
|
|
|
|
ror edi,9
|
|
|
|
add edx,ebx
|
|
|
|
xor ecx,edi
|
|
|
|
mov edi,DWORD PTR 8[esp]
|
|
|
|
add ebx,ecx
|
|
|
|
mov DWORD PTR [esp],eax
|
|
|
|
mov ecx,eax
|
|
|
|
sub esp,4
|
|
|
|
or eax,esi
|
|
|
|
and ecx,esi
|
|
|
|
and eax,edi
|
|
|
|
mov esi,DWORD PTR [ebp]
|
|
|
|
or eax,ecx
|
|
|
|
add ebp,4
|
|
|
|
add eax,ebx
|
|
|
|
add edx,esi
|
|
|
|
add eax,esi
|
|
|
|
cmp esi,3248222580
|
|
|
|
jne $L00300_15
|
|
|
|
mov ebx,DWORD PTR 152[esp]
|
|
|
|
ALIGN 16
|
|
|
|
$L00416_63:
|
|
|
|
mov esi,ebx
|
|
|
|
mov ecx,DWORD PTR 100[esp]
|
|
|
|
shr ebx,3
|
|
|
|
ror esi,7
|
|
|
|
xor ebx,esi
|
|
|
|
ror esi,11
|
|
|
|
mov edi,ecx
|
|
|
|
xor ebx,esi
|
|
|
|
shr ecx,10
|
|
|
|
mov esi,DWORD PTR 156[esp]
|
|
|
|
ror edi,17
|
|
|
|
xor ecx,edi
|
|
|
|
ror edi,2
|
|
|
|
add ebx,esi
|
|
|
|
xor edi,ecx
|
|
|
|
add ebx,edi
|
|
|
|
mov ecx,edx
|
|
|
|
add ebx,DWORD PTR 120[esp]
|
|
|
|
ror ecx,6
|
|
|
|
mov edi,edx
|
|
|
|
ror edi,11
|
|
|
|
mov esi,DWORD PTR 20[esp]
|
|
|
|
xor ecx,edi
|
|
|
|
ror edi,14
|
|
|
|
mov DWORD PTR 92[esp],ebx
|
|
|
|
xor ecx,edi
|
|
|
|
mov edi,DWORD PTR 24[esp]
|
|
|
|
add ebx,ecx
|
|
|
|
mov DWORD PTR 16[esp],edx
|
|
|
|
xor esi,edi
|
|
|
|
mov ecx,eax
|
|
|
|
and esi,edx
|
|
|
|
mov edx,DWORD PTR 12[esp]
|
|
|
|
xor esi,edi
|
|
|
|
mov edi,eax
|
|
|
|
add ebx,esi
|
|
|
|
ror ecx,2
|
|
|
|
add ebx,DWORD PTR 28[esp]
|
|
|
|
ror edi,13
|
|
|
|
mov esi,DWORD PTR 4[esp]
|
|
|
|
xor ecx,edi
|
|
|
|
ror edi,9
|
|
|
|
add edx,ebx
|
|
|
|
xor ecx,edi
|
|
|
|
mov edi,DWORD PTR 8[esp]
|
|
|
|
add ebx,ecx
|
|
|
|
mov DWORD PTR [esp],eax
|
|
|
|
mov ecx,eax
|
|
|
|
sub esp,4
|
|
|
|
or eax,esi
|
|
|
|
and ecx,esi
|
|
|
|
and eax,edi
|
|
|
|
mov esi,DWORD PTR [ebp]
|
|
|
|
or eax,ecx
|
|
|
|
add ebp,4
|
|
|
|
add eax,ebx
|
|
|
|
mov ebx,DWORD PTR 152[esp]
|
|
|
|
add edx,esi
|
|
|
|
add eax,esi
|
|
|
|
cmp esi,3329325298
|
|
|
|
jne $L00416_63
|
|
|
|
mov esi,DWORD PTR 352[esp]
|
|
|
|
mov ebx,DWORD PTR 4[esp]
|
|
|
|
mov ecx,DWORD PTR 8[esp]
|
|
|
|
mov edi,DWORD PTR 12[esp]
|
|
|
|
add eax,DWORD PTR [esi]
|
|
|
|
add ebx,DWORD PTR 4[esi]
|
|
|
|
add ecx,DWORD PTR 8[esi]
|
|
|
|
add edi,DWORD PTR 12[esi]
|
|
|
|
mov DWORD PTR [esi],eax
|
|
|
|
mov DWORD PTR 4[esi],ebx
|
|
|
|
mov DWORD PTR 8[esi],ecx
|
|
|
|
mov DWORD PTR 12[esi],edi
|
|
|
|
mov eax,DWORD PTR 20[esp]
|
|
|
|
mov ebx,DWORD PTR 24[esp]
|
|
|
|
mov ecx,DWORD PTR 28[esp]
|
|
|
|
mov edi,DWORD PTR 356[esp]
|
|
|
|
add edx,DWORD PTR 16[esi]
|
|
|
|
add eax,DWORD PTR 20[esi]
|
|
|
|
add ebx,DWORD PTR 24[esi]
|
|
|
|
add ecx,DWORD PTR 28[esi]
|
|
|
|
mov DWORD PTR 16[esi],edx
|
|
|
|
mov DWORD PTR 20[esi],eax
|
|
|
|
mov DWORD PTR 24[esi],ebx
|
|
|
|
mov DWORD PTR 28[esi],ecx
|
|
|
|
add esp,352
|
|
|
|
sub ebp,256
|
|
|
|
cmp edi,DWORD PTR 8[esp]
|
|
|
|
jb $L002loop
|
|
|
|
mov esp,DWORD PTR 12[esp]
|
|
|
|
pop edi
|
|
|
|
pop esi
|
|
|
|
pop ebx
|
|
|
|
pop ebp
|
|
|
|
ret
|
|
|
|
ALIGN 64
|
|
|
|
$L001K256:
|
|
|
|
DD 1116352408,1899447441,3049323471,3921009573
|
|
|
|
DD 961987163,1508970993,2453635748,2870763221
|
|
|
|
DD 3624381080,310598401,607225278,1426881987
|
|
|
|
DD 1925078388,2162078206,2614888103,3248222580
|
|
|
|
DD 3835390401,4022224774,264347078,604807628
|
|
|
|
DD 770255983,1249150122,1555081692,1996064986
|
|
|
|
DD 2554220882,2821834349,2952996808,3210313671
|
|
|
|
DD 3336571891,3584528711,113926993,338241895
|
|
|
|
DD 666307205,773529912,1294757372,1396182291
|
|
|
|
DD 1695183700,1986661051,2177026350,2456956037
|
|
|
|
DD 2730485921,2820302411,3259730800,3345764771
|
|
|
|
DD 3516065817,3600352804,4094571909,275423344
|
|
|
|
DD 430227734,506948616,659060556,883997877
|
|
|
|
DD 958139571,1322822218,1537002063,1747873779
|
|
|
|
DD 1955562222,2024104815,2227730452,2361852424
|
|
|
|
DD 2428436474,2756734187,3204031479,3329325298
|
|
|
|
_sha256_block_data_order ENDP
|
|
|
|
DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
|
|
|
|
DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
|
|
|
|
DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
|
|
|
|
DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
|
|
|
|
DB 62,0
|
|
|
|
.text$ ENDS
|
|
|
|
END
|