forked from KolibriOS/kolibrios
libcrash: cryptographic hash functions
git-svn-id: svn://kolibrios.org@3115 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8f354bd99d
commit
595e11fbff
147
programs/develop/libraries/libcrash/trunk/crashtest.asm
Normal file
147
programs/develop/libraries/libcrash/trunk/crashtest.asm
Normal file
@ -0,0 +1,147 @@
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01'
|
||||
dd 0x01,start,i_end,e_end,e_end,0,0
|
||||
|
||||
include '../../../../proc32.inc'
|
||||
include '../../../../macros.inc'
|
||||
include '../../../../dll.inc'
|
||||
;include '../../../../debug.inc'
|
||||
include '../../../../develop/libraries/libs-dev/libio/libio.inc'
|
||||
include 'libcrash.inc'
|
||||
BUFFER_SIZE = 8192
|
||||
|
||||
|
||||
start:
|
||||
mcall 68, 11
|
||||
|
||||
stdcall dll.Load, @IMPORT
|
||||
or eax, eax
|
||||
jnz quit
|
||||
|
||||
invoke file.open, input_file, O_READ
|
||||
or eax, eax
|
||||
jz quit
|
||||
mov [fh], eax
|
||||
|
||||
invoke file.size, input_file
|
||||
mov [file_len], ebx
|
||||
|
||||
stdcall mem.Alloc, ebx
|
||||
or eax, eax
|
||||
jz quit
|
||||
mov [file_data], eax
|
||||
|
||||
invoke file.read, [fh], eax, [file_len]
|
||||
cmp eax, -1
|
||||
je quit
|
||||
cmp eax, [file_len]
|
||||
jne quit
|
||||
|
||||
invoke file.close, [fh]
|
||||
inc eax
|
||||
jz quit
|
||||
|
||||
stdcall mem.Free, [file_data]
|
||||
test eax, eax
|
||||
jz quit
|
||||
|
||||
|
||||
invoke crash.hash, LIBCRASH_SHA512, hash, data_buffer, 0, update_data_buffer, msglen
|
||||
invoke crash.bin2hex, hash, hex, LIBCRASH_SHA512
|
||||
|
||||
|
||||
still:
|
||||
mcall 10
|
||||
dec eax
|
||||
jz redraw
|
||||
dec eax
|
||||
jz key
|
||||
|
||||
button:
|
||||
mcall 17
|
||||
shr eax, 8
|
||||
|
||||
cmp eax, 1
|
||||
je quit
|
||||
|
||||
redraw:
|
||||
mcall 12, 1
|
||||
mcall 0, <0,800>, <0,100>, 0x34000000, 0x80000000, window_title
|
||||
|
||||
mcall 4, 0, 0x40ffffff, hex, 128, 0
|
||||
|
||||
mcall 12, 2
|
||||
jmp still
|
||||
|
||||
key:
|
||||
mcall 2
|
||||
jmp still
|
||||
|
||||
|
||||
quit:
|
||||
mcall -1
|
||||
|
||||
|
||||
proc update_data_buffer
|
||||
mcall 70, f70_buf
|
||||
mov eax, ebx
|
||||
cmp eax, -1
|
||||
jne @f
|
||||
inc eax
|
||||
@@:
|
||||
add dword[f70_buf + 4], BUFFER_SIZE
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
szZ window_title ,'libcrash example'
|
||||
|
||||
sz msg_few_args , '2 arguments required',0x0a
|
||||
sz msg_bad_hash_type , 'invalid hash type',0x0a
|
||||
sz msg_file_not_found , 'file not found: '
|
||||
|
||||
input_file db '/hd0/1/crashtest',0
|
||||
|
||||
f70_buf:
|
||||
funcnum dd 0
|
||||
src dd 0
|
||||
res1 dd 0
|
||||
count dd BUFFER_SIZE
|
||||
dst dd data_buffer
|
||||
res2 db 0
|
||||
fname dd input_file
|
||||
|
||||
align 4
|
||||
@IMPORT:
|
||||
|
||||
library \
|
||||
libio , 'libio.obj' , \
|
||||
libcrash, 'libcrash.obj'
|
||||
|
||||
import libio , \
|
||||
libio.init , 'lib_init' , \
|
||||
file.size , 'file_size' , \
|
||||
file.open , 'file_open' , \
|
||||
file.read , 'file_read' , \
|
||||
file.close , 'file_close'
|
||||
|
||||
import libcrash , \
|
||||
libcrash.init , 'lib_init' , \
|
||||
crash.hash , 'crash_hash' , \
|
||||
crash.bin2hex , 'crash_bin2hex'
|
||||
|
||||
i_end:
|
||||
hash rd 16
|
||||
msglen rd 1
|
||||
fd rd 1
|
||||
fh rd 1
|
||||
data_length rd 1
|
||||
hex rb 1024
|
||||
data_buffer rb BUFFER_SIZE
|
||||
file_data rd 1
|
||||
file_len rd 1
|
||||
|
||||
rb 0x400 ;stack
|
||||
e_end:
|
||||
|
73
programs/develop/libraries/libcrash/trunk/crc32.asm
Normal file
73
programs/develop/libraries/libcrash/trunk/crc32.asm
Normal file
@ -0,0 +1,73 @@
|
||||
proc crash.crc32 _crc, _data, _len, _callback, _msglen
|
||||
.begin:
|
||||
mov ecx, [_len]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
mov eax, [_crc]
|
||||
mov eax, [eax]
|
||||
mov esi, [_data]
|
||||
.head:
|
||||
mov ebx, [_data]
|
||||
and ebx, 3
|
||||
jz .body
|
||||
@@:
|
||||
dec ecx
|
||||
js .done
|
||||
movzx edx, al
|
||||
xor dl, byte[esi]
|
||||
add esi, 1
|
||||
shr eax, 8
|
||||
xor eax, [crash._.crc32_table + edx*4]
|
||||
dec ebx
|
||||
jnz @b
|
||||
.body:
|
||||
mov ebx, ecx
|
||||
and ecx, 15
|
||||
shr ebx, 4
|
||||
test ebx, ebx
|
||||
jz .tail
|
||||
@@:
|
||||
repeat 4
|
||||
mov edx, eax
|
||||
mov eax, [esi]
|
||||
add esi, 4
|
||||
xor eax, edx
|
||||
repeat 4
|
||||
movzx edx, al
|
||||
shr eax, 8
|
||||
xor eax, [crash._.crc32_table + edx*4]
|
||||
end repeat
|
||||
end repeat
|
||||
dec ebx
|
||||
jnz @b
|
||||
.tail:
|
||||
test ecx, ecx
|
||||
jz .done
|
||||
@@:
|
||||
movzx edx, al
|
||||
xor dl, byte[esi]
|
||||
add esi, 1
|
||||
shr eax, 8
|
||||
xor eax, [crash._.crc32_table + edx*4]
|
||||
dec ecx
|
||||
jnz @b
|
||||
.done:
|
||||
mov ecx, [_crc]
|
||||
mov [ecx], eax
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
mov [_len], eax
|
||||
test eax, eax
|
||||
jnz .begin
|
||||
@@:
|
||||
mov ecx, [_crc]
|
||||
mov eax, [ecx]
|
||||
xor eax, 0xffffffff
|
||||
bswap eax
|
||||
mov [ecx], eax
|
||||
|
||||
ret
|
||||
endp
|
158
programs/develop/libraries/libcrash/trunk/libcrash.asm
Normal file
158
programs/develop/libraries/libcrash/trunk/libcrash.asm
Normal file
@ -0,0 +1,158 @@
|
||||
format MS COFF
|
||||
|
||||
public @EXPORT as 'EXPORTS'
|
||||
|
||||
include '../../../../struct.inc'
|
||||
include '../../../../proc32.inc'
|
||||
include '../../../../macros.inc'
|
||||
include '../../../../config.inc'
|
||||
;include '../../../../debug.inc'
|
||||
|
||||
purge section,mov,add,sub
|
||||
section '.flat' code readable align 16
|
||||
|
||||
include 'libcrash.inc'
|
||||
include 'crc32.asm'
|
||||
include 'md4.asm'
|
||||
include 'md5.asm'
|
||||
include 'sha1.asm'
|
||||
include 'sha224_256.asm'
|
||||
include 'sha384_512.asm'
|
||||
|
||||
|
||||
proc lib_init
|
||||
; generate crc32 table
|
||||
bts [crash._.init_flags], 0
|
||||
jc .crc32_table_done
|
||||
|
||||
mov edi, crash._.crc32_table
|
||||
xor ecx, ecx
|
||||
mov edx, 0xedb88320
|
||||
.1:
|
||||
mov ebx, 8
|
||||
mov eax, ecx
|
||||
.2:
|
||||
shr eax, 1
|
||||
jnc @f
|
||||
xor eax, edx
|
||||
@@:
|
||||
dec ebx
|
||||
jnz .2
|
||||
stosd
|
||||
inc cl
|
||||
jnz .1
|
||||
|
||||
.crc32_table_done:
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc crash.hash _type, _hash, _data, _len, _callback, _msglen
|
||||
locals
|
||||
hash_func rd 1
|
||||
endl
|
||||
mov eax, [_type]
|
||||
mov ecx, eax
|
||||
and eax, 0x000000ff
|
||||
sub eax, 1
|
||||
mov edx, [crash._.table + eax*8]
|
||||
mov esi, [crash._.table + eax*8 + 4]
|
||||
mov edi, [_hash]
|
||||
mov [hash_func], edx
|
||||
and ecx, 0x0000ff00
|
||||
shr ecx, 8
|
||||
rep movsd
|
||||
|
||||
stdcall [hash_func], [_hash], [_data], [_len], [_callback], [_msglen]
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc crash.bin2hex _bin, _hex, _type
|
||||
xor eax, eax
|
||||
mov ebx, crash._.bin2hex_table
|
||||
mov esi, [_bin]
|
||||
mov edi, [_hex]
|
||||
mov ecx, [_type]
|
||||
and ecx, 0x00ff0000
|
||||
shr ecx, 16 - 2
|
||||
.byte:
|
||||
lodsb
|
||||
mov ah, al
|
||||
shr ah, 4
|
||||
and al, 0x0f
|
||||
xlatb
|
||||
xchg al, ah
|
||||
xlatb
|
||||
stosw
|
||||
dec ecx
|
||||
jnz .byte
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
crash._.bin2hex_table db '0123456789abcdef'
|
||||
crash._.table: ; hash function, address of initial hash value
|
||||
dd crash.crc32, crash._.crc_init
|
||||
dd crash.md4, crash._.md4_init
|
||||
dd crash.md5, crash._.md5_init
|
||||
dd crash.sha1, crash._.sha1_init
|
||||
dd crash.sha256, crash._.sha224_init
|
||||
dd crash.sha256, crash._.sha256_init
|
||||
dd crash.sha512, crash._.sha384_init
|
||||
dd crash.sha512, crash._.sha512_init
|
||||
|
||||
crash._.crc_init dd 0xffffffff
|
||||
crash._.md4_init:
|
||||
crash._.md5_init:
|
||||
crash._.sha1_init dd 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0
|
||||
crash._.sha224_init dd 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
|
||||
crash._.sha256_init dd 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
|
||||
crash._.sha384_init dq 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,\
|
||||
0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4
|
||||
crash._.sha512_init dq 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,\
|
||||
0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
|
||||
|
||||
crash._.init_flags dd 0
|
||||
crash._.sha256_table dd 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\
|
||||
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\
|
||||
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\
|
||||
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\
|
||||
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\
|
||||
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\
|
||||
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\
|
||||
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
||||
|
||||
crash._.sha512_table dq 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,\
|
||||
0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118,\
|
||||
0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,\
|
||||
0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694,\
|
||||
0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,\
|
||||
0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,\
|
||||
0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4,\
|
||||
0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70,\
|
||||
0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,\
|
||||
0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,\
|
||||
0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30,\
|
||||
0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8,\
|
||||
0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,\
|
||||
0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,\
|
||||
0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,\
|
||||
0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b,\
|
||||
0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,\
|
||||
0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b,\
|
||||
0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,\
|
||||
0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
|
||||
|
||||
align 4
|
||||
@EXPORT:
|
||||
|
||||
export \
|
||||
lib_init , 'lib_init' , \
|
||||
crash.hash , 'crash_hash' , \
|
||||
crash.bin2hex , 'crash_bin2hex'
|
||||
|
||||
section '.data' data readable writable align 16
|
||||
crash._.crc32_table rd 256
|
8
programs/develop/libraries/libcrash/trunk/libcrash.inc
Normal file
8
programs/develop/libraries/libcrash/trunk/libcrash.inc
Normal file
@ -0,0 +1,8 @@
|
||||
LIBCRASH_CRC32 = 0x00010101
|
||||
LIBCRASH_MD4 = 0x00040402
|
||||
LIBCRASH_MD5 = 0x00040403
|
||||
LIBCRASH_SHA1 = 0x00050504
|
||||
LIBCRASH_SHA224 = 0x00070805
|
||||
LIBCRASH_SHA256 = 0x00080806
|
||||
LIBCRASH_SHA384 = 0x000c1007
|
||||
LIBCRASH_SHA512 = 0x00101008
|
165
programs/develop/libraries/libcrash/trunk/md4.asm
Normal file
165
programs/develop/libraries/libcrash/trunk/md4.asm
Normal file
@ -0,0 +1,165 @@
|
||||
macro crash.md4.f b, c, d
|
||||
{
|
||||
push c
|
||||
xor c, d
|
||||
and b, c
|
||||
xor b, d
|
||||
pop c
|
||||
}
|
||||
|
||||
macro crash.md4.g b, c, d
|
||||
{
|
||||
push c d
|
||||
mov edi, b
|
||||
and b, c
|
||||
and c, d
|
||||
and d, edi
|
||||
or b, c
|
||||
or b, d
|
||||
pop d c
|
||||
}
|
||||
|
||||
macro crash.md4.h b, c, d
|
||||
{
|
||||
xor b, c
|
||||
xor b, d
|
||||
}
|
||||
|
||||
macro crash.md4.round func, a, b, c, d, index, shift, ac
|
||||
{
|
||||
push b
|
||||
func b, c, d
|
||||
lea a, [a + b + ac]
|
||||
add a, [esi + index*4]
|
||||
rol a, shift
|
||||
pop b
|
||||
}
|
||||
|
||||
|
||||
proc crash.md4 _md4, _data, _len, _callback, _msglen
|
||||
locals
|
||||
final rd 1
|
||||
endl
|
||||
mov [final], 0
|
||||
.first:
|
||||
mov eax, [_msglen]
|
||||
mov ecx, [_len]
|
||||
add [eax], ecx
|
||||
mov esi, [_data]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
.begin:
|
||||
sub [_len], 64
|
||||
jnc @f
|
||||
add [_len], 64
|
||||
jmp .endofblock
|
||||
@@:
|
||||
mov edi, [_md4]
|
||||
mov eax, [edi + 0x0]
|
||||
mov ebx, [edi + 0x4]
|
||||
mov ecx, [edi + 0x8]
|
||||
mov edx, [edi + 0xc]
|
||||
|
||||
crash.md4.round crash.md4.f, eax, ebx, ecx, edx, 0, 3, 0x00000000
|
||||
crash.md4.round crash.md4.f, edx, eax, ebx, ecx, 1, 7, 0x00000000
|
||||
crash.md4.round crash.md4.f, ecx, edx, eax, ebx, 2, 11, 0x00000000
|
||||
crash.md4.round crash.md4.f, ebx, ecx, edx, eax, 3, 19, 0x00000000
|
||||
crash.md4.round crash.md4.f, eax, ebx, ecx, edx, 4, 3, 0x00000000
|
||||
crash.md4.round crash.md4.f, edx, eax, ebx, ecx, 5, 7, 0x00000000
|
||||
crash.md4.round crash.md4.f, ecx, edx, eax, ebx, 6, 11, 0x00000000
|
||||
crash.md4.round crash.md4.f, ebx, ecx, edx, eax, 7, 19, 0x00000000
|
||||
crash.md4.round crash.md4.f, eax, ebx, ecx, edx, 8, 3, 0x00000000
|
||||
crash.md4.round crash.md4.f, edx, eax, ebx, ecx, 9, 7, 0x00000000
|
||||
crash.md4.round crash.md4.f, ecx, edx, eax, ebx, 10, 11, 0x00000000
|
||||
crash.md4.round crash.md4.f, ebx, ecx, edx, eax, 11, 19, 0x00000000
|
||||
crash.md4.round crash.md4.f, eax, ebx, ecx, edx, 12, 3, 0x00000000
|
||||
crash.md4.round crash.md4.f, edx, eax, ebx, ecx, 13, 7, 0x00000000
|
||||
crash.md4.round crash.md4.f, ecx, edx, eax, ebx, 14, 11, 0x00000000
|
||||
crash.md4.round crash.md4.f, ebx, ecx, edx, eax, 15, 19, 0x00000000
|
||||
|
||||
crash.md4.round crash.md4.g, eax, ebx, ecx, edx, 0, 3, 0x5a827999
|
||||
crash.md4.round crash.md4.g, edx, eax, ebx, ecx, 4, 5, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ecx, edx, eax, ebx, 8, 9, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ebx, ecx, edx, eax, 12, 13, 0x5a827999
|
||||
crash.md4.round crash.md4.g, eax, ebx, ecx, edx, 1, 3, 0x5a827999
|
||||
crash.md4.round crash.md4.g, edx, eax, ebx, ecx, 5, 5, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ecx, edx, eax, ebx, 9, 9, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ebx, ecx, edx, eax, 13, 13, 0x5a827999
|
||||
crash.md4.round crash.md4.g, eax, ebx, ecx, edx, 2, 3, 0x5a827999
|
||||
crash.md4.round crash.md4.g, edx, eax, ebx, ecx, 6, 5, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ecx, edx, eax, ebx, 10, 9, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ebx, ecx, edx, eax, 14, 13, 0x5a827999
|
||||
crash.md4.round crash.md4.g, eax, ebx, ecx, edx, 3, 3, 0x5a827999
|
||||
crash.md4.round crash.md4.g, edx, eax, ebx, ecx, 7, 5, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ecx, edx, eax, ebx, 11, 9, 0x5a827999
|
||||
crash.md4.round crash.md4.g, ebx, ecx, edx, eax, 15, 13, 0x5a827999
|
||||
|
||||
crash.md4.round crash.md4.h, eax, ebx, ecx, edx, 0, 3, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, edx, eax, ebx, ecx, 8, 9, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ecx, edx, eax, ebx, 4, 11, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ebx, ecx, edx, eax, 12, 15, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, eax, ebx, ecx, edx, 2, 3, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, edx, eax, ebx, ecx, 10, 9, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ecx, edx, eax, ebx, 6, 11, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ebx, ecx, edx, eax, 14, 15, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, eax, ebx, ecx, edx, 1, 3, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, edx, eax, ebx, ecx, 9, 9, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ecx, edx, eax, ebx, 5, 11, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ebx, ecx, edx, eax, 13, 15, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, eax, ebx, ecx, edx, 3, 3, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, edx, eax, ebx, ecx, 11, 9, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ecx, edx, eax, ebx, 7, 11, 0x6ed9eba1
|
||||
crash.md4.round crash.md4.h, ebx, ecx, edx, eax, 15, 15, 0x6ed9eba1
|
||||
|
||||
mov edi, [_md4]
|
||||
add [edi + 0x0], eax
|
||||
add [edi + 0x4], ebx
|
||||
add [edi + 0x8], ecx
|
||||
add [edi + 0xc], edx
|
||||
add esi, 64
|
||||
jmp .begin
|
||||
.endofblock:
|
||||
cmp [final], 1
|
||||
je .quit
|
||||
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [_len], eax
|
||||
jmp .first
|
||||
@@:
|
||||
|
||||
mov edi, [_data]
|
||||
mov ecx, [_len]
|
||||
rep movsb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
and eax, 63
|
||||
mov ecx, 56
|
||||
sub ecx, eax
|
||||
ja @f
|
||||
add ecx, 64
|
||||
@@:
|
||||
add [_len], ecx
|
||||
mov byte[edi], 0x80
|
||||
add edi, 1
|
||||
sub ecx, 1
|
||||
mov al, 0
|
||||
rep stosb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
mov edx, 8
|
||||
mul edx
|
||||
mov dword[edi], eax
|
||||
mov dword[edi + 4], edx
|
||||
add [_len], 8
|
||||
mov [final], 1
|
||||
jmp .first
|
||||
.quit:
|
||||
ret
|
||||
endp
|
||||
|
190
programs/develop/libraries/libcrash/trunk/md5.asm
Normal file
190
programs/develop/libraries/libcrash/trunk/md5.asm
Normal file
@ -0,0 +1,190 @@
|
||||
macro crash.md5.f b, c, d
|
||||
{
|
||||
push c
|
||||
xor c, d
|
||||
and b, c
|
||||
xor b, d
|
||||
pop c
|
||||
}
|
||||
|
||||
macro crash.md5.g b, c, d
|
||||
{
|
||||
push c d
|
||||
and b, d
|
||||
not d
|
||||
and c, d
|
||||
or b, c
|
||||
pop d c
|
||||
}
|
||||
|
||||
macro crash.md5.h b, c, d
|
||||
{
|
||||
xor b, c
|
||||
xor b, d
|
||||
}
|
||||
|
||||
macro crash.md5.i b, c, d
|
||||
{
|
||||
push d
|
||||
not d
|
||||
or b, d
|
||||
xor b, c
|
||||
pop d
|
||||
}
|
||||
|
||||
macro crash.md5.round func, a, b, c, d, index, shift, ac
|
||||
{
|
||||
push b
|
||||
func b, c, d
|
||||
lea a, [a + b + ac]
|
||||
add a, [esi + index*4]
|
||||
rol a, shift
|
||||
pop b
|
||||
add a, b
|
||||
}
|
||||
|
||||
|
||||
proc crash.md5 _md5, _data, _len, _callback, _msglen
|
||||
locals
|
||||
final rd 1
|
||||
endl
|
||||
mov [final], 0
|
||||
.first:
|
||||
mov eax, [_msglen]
|
||||
mov ecx, [_len]
|
||||
add [eax], ecx
|
||||
mov esi, [_data]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
.begin:
|
||||
sub [_len], 64
|
||||
jnc @f
|
||||
add [_len], 64
|
||||
jmp .endofblock
|
||||
@@:
|
||||
mov edi, [_md5]
|
||||
mov eax, [edi + 0x0]
|
||||
mov ebx, [edi + 0x4]
|
||||
mov ecx, [edi + 0x8]
|
||||
mov edx, [edi + 0xc]
|
||||
|
||||
crash.md5.round crash.md5.f, eax, ebx, ecx, edx, 0, 7, 0xd76aa478
|
||||
crash.md5.round crash.md5.f, edx, eax, ebx, ecx, 1, 12, 0xe8c7b756
|
||||
crash.md5.round crash.md5.f, ecx, edx, eax, ebx, 2, 17, 0x242070db
|
||||
crash.md5.round crash.md5.f, ebx, ecx, edx, eax, 3, 22, 0xc1bdceee
|
||||
crash.md5.round crash.md5.f, eax, ebx, ecx, edx, 4, 7, 0xf57c0faf
|
||||
crash.md5.round crash.md5.f, edx, eax, ebx, ecx, 5, 12, 0x4787c62a
|
||||
crash.md5.round crash.md5.f, ecx, edx, eax, ebx, 6, 17, 0xa8304613
|
||||
crash.md5.round crash.md5.f, ebx, ecx, edx, eax, 7, 22, 0xfd469501
|
||||
crash.md5.round crash.md5.f, eax, ebx, ecx, edx, 8, 7, 0x698098d8
|
||||
crash.md5.round crash.md5.f, edx, eax, ebx, ecx, 9, 12, 0x8b44f7af
|
||||
crash.md5.round crash.md5.f, ecx, edx, eax, ebx, 10, 17, 0xffff5bb1
|
||||
crash.md5.round crash.md5.f, ebx, ecx, edx, eax, 11, 22, 0x895cd7be
|
||||
crash.md5.round crash.md5.f, eax, ebx, ecx, edx, 12, 7, 0x6b901122
|
||||
crash.md5.round crash.md5.f, edx, eax, ebx, ecx, 13, 12, 0xfd987193
|
||||
crash.md5.round crash.md5.f, ecx, edx, eax, ebx, 14, 17, 0xa679438e
|
||||
crash.md5.round crash.md5.f, ebx, ecx, edx, eax, 15, 22, 0x49b40821
|
||||
|
||||
crash.md5.round crash.md5.g, eax, ebx, ecx, edx, 1, 5, 0xf61e2562
|
||||
crash.md5.round crash.md5.g, edx, eax, ebx, ecx, 6, 9, 0xc040b340
|
||||
crash.md5.round crash.md5.g, ecx, edx, eax, ebx, 11, 14, 0x265e5a51
|
||||
crash.md5.round crash.md5.g, ebx, ecx, edx, eax, 0, 20, 0xe9b6c7aa
|
||||
crash.md5.round crash.md5.g, eax, ebx, ecx, edx, 5, 5, 0xd62f105d
|
||||
crash.md5.round crash.md5.g, edx, eax, ebx, ecx, 10, 9, 0x02441453
|
||||
crash.md5.round crash.md5.g, ecx, edx, eax, ebx, 15, 14, 0xd8a1e681
|
||||
crash.md5.round crash.md5.g, ebx, ecx, edx, eax, 4, 20, 0xe7d3fbc8
|
||||
crash.md5.round crash.md5.g, eax, ebx, ecx, edx, 9, 5, 0x21e1cde6
|
||||
crash.md5.round crash.md5.g, edx, eax, ebx, ecx, 14, 9, 0xc33707d6
|
||||
crash.md5.round crash.md5.g, ecx, edx, eax, ebx, 3, 14, 0xf4d50d87
|
||||
crash.md5.round crash.md5.g, ebx, ecx, edx, eax, 8, 20, 0x455a14ed
|
||||
crash.md5.round crash.md5.g, eax, ebx, ecx, edx, 13, 5, 0xa9e3e905
|
||||
crash.md5.round crash.md5.g, edx, eax, ebx, ecx, 2, 9, 0xfcefa3f8
|
||||
crash.md5.round crash.md5.g, ecx, edx, eax, ebx, 7, 14, 0x676f02d9
|
||||
crash.md5.round crash.md5.g, ebx, ecx, edx, eax, 12, 20, 0x8d2a4c8a
|
||||
|
||||
crash.md5.round crash.md5.h, eax, ebx, ecx, edx, 5, 4, 0xfffa3942
|
||||
crash.md5.round crash.md5.h, edx, eax, ebx, ecx, 8, 11, 0x8771f681
|
||||
crash.md5.round crash.md5.h, ecx, edx, eax, ebx, 11, 16, 0x6d9d6122
|
||||
crash.md5.round crash.md5.h, ebx, ecx, edx, eax, 14, 23, 0xfde5380c
|
||||
crash.md5.round crash.md5.h, eax, ebx, ecx, edx, 1, 4, 0xa4beea44
|
||||
crash.md5.round crash.md5.h, edx, eax, ebx, ecx, 4, 11, 0x4bdecfa9
|
||||
crash.md5.round crash.md5.h, ecx, edx, eax, ebx, 7, 16, 0xf6bb4b60
|
||||
crash.md5.round crash.md5.h, ebx, ecx, edx, eax, 10, 23, 0xbebfbc70
|
||||
crash.md5.round crash.md5.h, eax, ebx, ecx, edx, 13, 4, 0x289b7ec6
|
||||
crash.md5.round crash.md5.h, edx, eax, ebx, ecx, 0, 11, 0xeaa127fa
|
||||
crash.md5.round crash.md5.h, ecx, edx, eax, ebx, 3, 16, 0xd4ef3085
|
||||
crash.md5.round crash.md5.h, ebx, ecx, edx, eax, 6, 23, 0x04881d05
|
||||
crash.md5.round crash.md5.h, eax, ebx, ecx, edx, 9, 4, 0xd9d4d039
|
||||
crash.md5.round crash.md5.h, edx, eax, ebx, ecx, 12, 11, 0xe6db99e5
|
||||
crash.md5.round crash.md5.h, ecx, edx, eax, ebx, 15, 16, 0x1fa27cf8
|
||||
crash.md5.round crash.md5.h, ebx, ecx, edx, eax, 2, 23, 0xc4ac5665
|
||||
|
||||
crash.md5.round crash.md5.i, eax, ebx, ecx, edx, 0, 6, 0xf4292244
|
||||
crash.md5.round crash.md5.i, edx, eax, ebx, ecx, 7, 10, 0x432aff97
|
||||
crash.md5.round crash.md5.i, ecx, edx, eax, ebx, 14, 15, 0xab9423a7
|
||||
crash.md5.round crash.md5.i, ebx, ecx, edx, eax, 5, 21, 0xfc93a039
|
||||
crash.md5.round crash.md5.i, eax, ebx, ecx, edx, 12, 6, 0x655b59c3
|
||||
crash.md5.round crash.md5.i, edx, eax, ebx, ecx, 3, 10, 0x8f0ccc92
|
||||
crash.md5.round crash.md5.i, ecx, edx, eax, ebx, 10, 15, 0xffeff47d
|
||||
crash.md5.round crash.md5.i, ebx, ecx, edx, eax, 1, 21, 0x85845dd1
|
||||
crash.md5.round crash.md5.i, eax, ebx, ecx, edx, 8, 6, 0x6fa87e4f
|
||||
crash.md5.round crash.md5.i, edx, eax, ebx, ecx, 15, 10, 0xfe2ce6e0
|
||||
crash.md5.round crash.md5.i, ecx, edx, eax, ebx, 6, 15, 0xa3014314
|
||||
crash.md5.round crash.md5.i, ebx, ecx, edx, eax, 13, 21, 0x4e0811a1
|
||||
crash.md5.round crash.md5.i, eax, ebx, ecx, edx, 4, 6, 0xf7537e82
|
||||
crash.md5.round crash.md5.i, edx, eax, ebx, ecx, 11, 10, 0xbd3af235
|
||||
crash.md5.round crash.md5.i, ecx, edx, eax, ebx, 2, 15, 0x2ad7d2bb
|
||||
crash.md5.round crash.md5.i, ebx, ecx, edx, eax, 9, 21, 0xeb86d391
|
||||
|
||||
mov edi, [_md5]
|
||||
add [edi + 0x0], eax
|
||||
add [edi + 0x4], ebx
|
||||
add [edi + 0x8], ecx
|
||||
add [edi + 0xc], edx
|
||||
add esi, 64
|
||||
jmp .begin
|
||||
.endofblock:
|
||||
cmp [final], 1
|
||||
je .quit
|
||||
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [_len], eax
|
||||
jmp .first
|
||||
@@:
|
||||
|
||||
mov edi, [_data]
|
||||
mov ecx, [_len]
|
||||
rep movsb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
and eax, 63
|
||||
mov ecx, 56
|
||||
sub ecx, eax
|
||||
ja @f
|
||||
add ecx, 64
|
||||
@@:
|
||||
add [_len], ecx
|
||||
mov byte[edi], 0x80
|
||||
add edi, 1
|
||||
sub ecx, 1
|
||||
mov al, 0
|
||||
rep stosb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
mov edx, 8
|
||||
mul edx
|
||||
mov dword[edi], eax
|
||||
mov dword[edi + 4], edx
|
||||
add [_len], 8
|
||||
mov [final], 1
|
||||
jmp .first
|
||||
.quit:
|
||||
ret
|
||||
endp
|
||||
|
258
programs/develop/libraries/libcrash/trunk/sha1.asm
Normal file
258
programs/develop/libraries/libcrash/trunk/sha1.asm
Normal file
@ -0,0 +1,258 @@
|
||||
proc crash.sha1.f
|
||||
push ebx ecx edx
|
||||
xor ecx, edx
|
||||
and ebx, ecx
|
||||
xor ebx, edx
|
||||
mov esi, ebx
|
||||
pop edx ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
proc crash.sha1.g
|
||||
push ebx ecx edx
|
||||
xor ebx, ecx
|
||||
xor ebx, edx
|
||||
mov esi, ebx
|
||||
pop edx ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
proc crash.sha1.h
|
||||
push ebx ecx edx
|
||||
mov esi, ebx
|
||||
and ebx, ecx
|
||||
and ecx, edx
|
||||
and esi, edx
|
||||
or ebx, ecx
|
||||
or esi, ebx
|
||||
pop edx ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc crash.sha1 _sha1, _data, _len, _callback, _msglen
|
||||
locals
|
||||
final rd 1
|
||||
temp rd 1
|
||||
counter rd 1
|
||||
summand rd 1
|
||||
shafunc rd 1
|
||||
w rd 80
|
||||
endl
|
||||
mov [final], 0
|
||||
.first:
|
||||
mov eax, [_msglen]
|
||||
mov ecx, [_len]
|
||||
add [eax], ecx
|
||||
mov esi, [_data]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
.begin:
|
||||
sub [_len], 64
|
||||
jnc @f
|
||||
add [_len], 64
|
||||
jmp .endofblock
|
||||
@@:
|
||||
lea edi, [w]
|
||||
xor ecx, ecx
|
||||
@@:
|
||||
mov eax, [esi]
|
||||
add esi, 4
|
||||
bswap eax
|
||||
mov [edi], eax
|
||||
add edi, 4
|
||||
add ecx, 1
|
||||
cmp ecx, 16
|
||||
jne @b
|
||||
@@:
|
||||
mov eax, [w + (ecx - 3)*4]
|
||||
xor eax, [w + (ecx - 8)*4]
|
||||
xor eax, [w + (ecx - 14)*4]
|
||||
xor eax, [w + (ecx - 16)*4]
|
||||
rol eax, 1
|
||||
mov [w + ecx*4], eax
|
||||
add ecx, 1
|
||||
cmp ecx, 80
|
||||
jne @b
|
||||
|
||||
mov edi, [_sha1]
|
||||
mov eax, [edi + 0x00]
|
||||
mov ebx, [edi + 0x04]
|
||||
mov ecx, [edi + 0x08]
|
||||
mov edx, [edi + 0x0c]
|
||||
mov edi, [edi + 0x10]
|
||||
|
||||
push esi
|
||||
|
||||
mov [counter], 0
|
||||
mov [summand], 0x5a827999
|
||||
mov [shafunc], crash.sha1.f
|
||||
@@:
|
||||
mov esi, eax
|
||||
rol esi, 5
|
||||
mov [temp], esi
|
||||
call [shafunc]
|
||||
|
||||
add esi, edi
|
||||
add [temp], esi
|
||||
mov esi, [counter]
|
||||
mov esi, [w + esi*4]
|
||||
add esi, [summand]
|
||||
add [temp], esi
|
||||
|
||||
mov edi, edx
|
||||
mov edx, ecx
|
||||
mov ecx, ebx
|
||||
rol ecx, 30
|
||||
mov ebx, eax
|
||||
mov eax, [temp]
|
||||
|
||||
add [counter], 1
|
||||
cmp [counter], 20
|
||||
jne @b
|
||||
|
||||
mov [summand], 0x6ed9eba1
|
||||
mov [shafunc], crash.sha1.g
|
||||
@@:
|
||||
mov esi, eax
|
||||
rol esi, 5
|
||||
mov [temp], esi
|
||||
call dword[shafunc]
|
||||
|
||||
add esi, edi
|
||||
add [temp], esi
|
||||
mov esi, [counter]
|
||||
mov esi, [w + esi*4]
|
||||
add esi, [summand]
|
||||
add [temp], esi
|
||||
|
||||
mov edi, edx
|
||||
mov edx, ecx
|
||||
mov ecx, ebx
|
||||
rol ecx, 30
|
||||
mov ebx, eax
|
||||
mov eax, [temp]
|
||||
|
||||
add [counter], 1
|
||||
cmp [counter], 40
|
||||
jne @b
|
||||
|
||||
mov [summand], 0x8f1bbcdc
|
||||
mov [shafunc], crash.sha1.h
|
||||
@@:
|
||||
mov esi, eax
|
||||
rol esi, 5
|
||||
mov [temp], esi
|
||||
call dword[shafunc]
|
||||
|
||||
add esi, edi
|
||||
add [temp], esi
|
||||
mov esi, [counter]
|
||||
mov esi, [w + esi*4]
|
||||
add esi, [summand]
|
||||
add [temp], esi
|
||||
|
||||
mov edi, edx
|
||||
mov edx, ecx
|
||||
mov ecx, ebx
|
||||
rol ecx, 30
|
||||
mov ebx, eax
|
||||
mov eax, [temp]
|
||||
|
||||
add [counter], 1
|
||||
cmp [counter], 60
|
||||
jne @b
|
||||
|
||||
mov [summand], 0xca62c1d6
|
||||
mov [shafunc], crash.sha1.g
|
||||
@@:
|
||||
mov esi, eax
|
||||
rol esi, 5
|
||||
mov [temp], esi
|
||||
call dword[shafunc]
|
||||
|
||||
add esi, edi
|
||||
add [temp], esi
|
||||
mov esi, [counter]
|
||||
mov esi, [w + esi*4]
|
||||
add esi, [summand]
|
||||
add [temp], esi
|
||||
|
||||
mov edi, edx
|
||||
mov edx, ecx
|
||||
mov ecx, ebx
|
||||
rol ecx, 30
|
||||
mov ebx, eax
|
||||
mov eax, [temp]
|
||||
|
||||
add [counter], 1
|
||||
cmp [counter], 80
|
||||
jne @b
|
||||
|
||||
pop esi
|
||||
|
||||
mov [temp], edi
|
||||
mov edi, [_sha1]
|
||||
add [edi + 0x00], eax
|
||||
add [edi + 0x04], ebx
|
||||
add [edi + 0x08], ecx
|
||||
add [edi + 0x0c], edx
|
||||
mov eax, [temp]
|
||||
add [edi + 0x10], eax
|
||||
jmp .begin
|
||||
.endofblock:
|
||||
cmp [final], 1
|
||||
je .quit
|
||||
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [_len], eax
|
||||
jmp .first
|
||||
@@:
|
||||
|
||||
mov edi, [_data]
|
||||
mov ecx, [_len]
|
||||
rep movsb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
and eax, 63
|
||||
mov ecx, 56
|
||||
sub ecx, eax
|
||||
ja @f
|
||||
add ecx, 64
|
||||
@@:
|
||||
add [_len], ecx
|
||||
mov byte[edi], 0x80
|
||||
add edi, 1
|
||||
sub ecx, 1
|
||||
mov al, 0
|
||||
rep stosb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
mov edx, 8
|
||||
mul edx
|
||||
bswap eax
|
||||
bswap edx
|
||||
mov dword[edi], edx
|
||||
mov dword[edi + 4], eax
|
||||
add [_len], 8
|
||||
mov [final], 1
|
||||
jmp .first
|
||||
.quit:
|
||||
mov esi, [_sha1]
|
||||
mov edi, esi
|
||||
mov ecx, 5
|
||||
@@:
|
||||
lodsd
|
||||
bswap eax
|
||||
stosd
|
||||
sub ecx, 1
|
||||
jnz @b
|
||||
ret
|
||||
endp
|
||||
|
278
programs/develop/libraries/libcrash/trunk/sha224_256.asm
Normal file
278
programs/develop/libraries/libcrash/trunk/sha224_256.asm
Normal file
@ -0,0 +1,278 @@
|
||||
macro chn x, y, z
|
||||
{
|
||||
mov eax, [y]
|
||||
xor eax, [z]
|
||||
and eax, [x]
|
||||
xor eax, [z]
|
||||
}
|
||||
|
||||
macro maj x, y, z
|
||||
{
|
||||
mov eax, [x]
|
||||
xor eax, [y]
|
||||
and eax, [z]
|
||||
mov ecx, [x]
|
||||
and ecx, [y]
|
||||
xor eax, ecx
|
||||
}
|
||||
|
||||
macro Sigma0 x
|
||||
{
|
||||
mov eax, x
|
||||
mov ecx, eax
|
||||
ror ecx, 2
|
||||
ror eax, 13
|
||||
xor eax, ecx
|
||||
mov ecx, x
|
||||
ror ecx, 22
|
||||
xor eax, ecx
|
||||
}
|
||||
|
||||
macro Sigma1 x
|
||||
{
|
||||
mov eax, x
|
||||
mov ecx, eax
|
||||
ror ecx, 6
|
||||
ror eax, 11
|
||||
xor eax, ecx
|
||||
mov ecx, x
|
||||
ror ecx, 25
|
||||
xor eax, ecx
|
||||
}
|
||||
|
||||
macro sigma0 x
|
||||
{
|
||||
mov eax, x
|
||||
mov ecx, eax
|
||||
ror ecx, 7
|
||||
ror eax, 18
|
||||
xor eax, ecx
|
||||
mov ecx, x
|
||||
shr ecx, 3
|
||||
xor eax, ecx
|
||||
}
|
||||
|
||||
macro sigma1 x
|
||||
{
|
||||
mov eax, x
|
||||
mov ecx, eax
|
||||
ror ecx, 17
|
||||
ror eax, 19
|
||||
xor eax, ecx
|
||||
mov ecx, x
|
||||
shr ecx, 10
|
||||
xor eax, ecx
|
||||
}
|
||||
|
||||
macro recalculate_w n
|
||||
{
|
||||
mov edx, [w + ((n-2) and 15)*4]
|
||||
sigma1 edx
|
||||
add eax, [w + ((n-7) and 15)*4]
|
||||
push eax
|
||||
mov edx, [w + ((n-15) and 15)*4]
|
||||
sigma0 edx
|
||||
pop ecx
|
||||
add eax, ecx
|
||||
add [w + (n)*4], eax
|
||||
}
|
||||
|
||||
macro crash.sha256.round a, b, c, d, e, f, g, h, k
|
||||
{
|
||||
mov ebx, [h]
|
||||
mov edx, [e]
|
||||
Sigma1 edx
|
||||
|
||||
add ebx, eax
|
||||
chn e, f, g
|
||||
|
||||
add ebx, eax
|
||||
add ebx, [k]
|
||||
add ebx, edi
|
||||
|
||||
add [d], ebx
|
||||
|
||||
mov edx, [a]
|
||||
Sigma0 edx
|
||||
add ebx, eax
|
||||
maj a, b, c
|
||||
add eax, ebx
|
||||
mov [h], eax
|
||||
}
|
||||
|
||||
|
||||
macro crash.sha256.round_1_16 a, b, c, d, e, f, g, h, n
|
||||
{
|
||||
|
||||
mov eax, [esi + (n)*4]
|
||||
bswap eax
|
||||
|
||||
mov dword[w + (n)*4], eax
|
||||
mov edi, eax
|
||||
crash.sha256.round a, b, c, d, e, f, g, h, (crash._.sha256_table + (n)*4)
|
||||
}
|
||||
|
||||
macro crash.sha256.round_17_64 a, b, c, d, e, f, g, h, n, rep_num
|
||||
{
|
||||
recalculate_w n
|
||||
mov edi, [w + (n)*4]
|
||||
crash.sha256.round a, b, c, d, e, f, g, h, (crash._.sha256_table + (n+16*rep_num)*4)
|
||||
}
|
||||
|
||||
|
||||
proc crash.sha256 _sha256, _data, _len, _callback, _msglen
|
||||
locals
|
||||
final rd 1
|
||||
w rd 64
|
||||
A rd 1
|
||||
B rd 1
|
||||
C rd 1
|
||||
D rd 1
|
||||
E rd 1
|
||||
F rd 1
|
||||
G rd 1
|
||||
H rd 1
|
||||
endl
|
||||
mov [final], 0
|
||||
.first:
|
||||
mov eax, [_msglen]
|
||||
mov ecx, [_len]
|
||||
add [eax], ecx
|
||||
mov esi, [_data]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
.begin:
|
||||
sub [_len], 64
|
||||
jnc @f
|
||||
add [_len], 64
|
||||
jmp .endofblock
|
||||
@@:
|
||||
mov edi, [_sha256]
|
||||
mov eax, [edi + 0x00]
|
||||
mov [A], eax
|
||||
mov eax, [edi + 0x04]
|
||||
mov [B], eax
|
||||
mov eax, [edi + 0x08]
|
||||
mov [C], eax
|
||||
mov eax, [edi + 0x0c]
|
||||
mov [D], eax
|
||||
mov eax, [edi + 0x10]
|
||||
mov [E], eax
|
||||
mov eax, [edi + 0x14]
|
||||
mov [F], eax
|
||||
mov eax, [edi + 0x18]
|
||||
mov [G], eax
|
||||
mov eax, [edi + 0x1c]
|
||||
mov [H], eax
|
||||
|
||||
crash.sha256.round_1_16 A, B, C, D, E, F, G, H, 0
|
||||
crash.sha256.round_1_16 H, A, B, C, D, E, F, G, 1
|
||||
crash.sha256.round_1_16 G, H, A, B, C, D, E, F, 2
|
||||
crash.sha256.round_1_16 F, G, H, A, B, C, D, E, 3
|
||||
crash.sha256.round_1_16 E, F, G, H, A, B, C, D, 4
|
||||
crash.sha256.round_1_16 D, E, F, G, H, A, B, C, 5
|
||||
crash.sha256.round_1_16 C, D, E, F, G, H, A, B, 6
|
||||
crash.sha256.round_1_16 B, C, D, E, F, G, H, A, 7
|
||||
crash.sha256.round_1_16 A, B, C, D, E, F, G, H, 8
|
||||
crash.sha256.round_1_16 H, A, B, C, D, E, F, G, 9
|
||||
crash.sha256.round_1_16 G, H, A, B, C, D, E, F, 10
|
||||
crash.sha256.round_1_16 F, G, H, A, B, C, D, E, 11
|
||||
crash.sha256.round_1_16 E, F, G, H, A, B, C, D, 12
|
||||
crash.sha256.round_1_16 D, E, F, G, H, A, B, C, 13
|
||||
crash.sha256.round_1_16 C, D, E, F, G, H, A, B, 14
|
||||
crash.sha256.round_1_16 B, C, D, E, F, G, H, A, 15
|
||||
|
||||
repeat 3
|
||||
crash.sha256.round_17_64 A, B, C, D, E, F, G, H, 0, %
|
||||
crash.sha256.round_17_64 H, A, B, C, D, E, F, G, 1, %
|
||||
crash.sha256.round_17_64 G, H, A, B, C, D, E, F, 2, %
|
||||
crash.sha256.round_17_64 F, G, H, A, B, C, D, E, 3, %
|
||||
crash.sha256.round_17_64 E, F, G, H, A, B, C, D, 4, %
|
||||
crash.sha256.round_17_64 D, E, F, G, H, A, B, C, 5, %
|
||||
crash.sha256.round_17_64 C, D, E, F, G, H, A, B, 6, %
|
||||
crash.sha256.round_17_64 B, C, D, E, F, G, H, A, 7, %
|
||||
crash.sha256.round_17_64 A, B, C, D, E, F, G, H, 8, %
|
||||
crash.sha256.round_17_64 H, A, B, C, D, E, F, G, 9, %
|
||||
crash.sha256.round_17_64 G, H, A, B, C, D, E, F, 10, %
|
||||
crash.sha256.round_17_64 F, G, H, A, B, C, D, E, 11, %
|
||||
crash.sha256.round_17_64 E, F, G, H, A, B, C, D, 12, %
|
||||
crash.sha256.round_17_64 D, E, F, G, H, A, B, C, 13, %
|
||||
crash.sha256.round_17_64 C, D, E, F, G, H, A, B, 14, %
|
||||
crash.sha256.round_17_64 B, C, D, E, F, G, H, A, 15, %
|
||||
end repeat
|
||||
|
||||
mov edi, [_sha256]
|
||||
mov eax, [A]
|
||||
add [edi + 0x00], eax
|
||||
mov eax, [B]
|
||||
add [edi + 0x04], eax
|
||||
mov eax, [C]
|
||||
add [edi + 0x08], eax
|
||||
mov eax, [D]
|
||||
add [edi + 0x0c], eax
|
||||
mov eax, [E]
|
||||
add [edi + 0x10], eax
|
||||
mov eax, [F]
|
||||
add [edi + 0x14], eax
|
||||
mov eax, [G]
|
||||
add [edi + 0x18], eax
|
||||
mov eax, [H]
|
||||
add [edi + 0x1c], eax
|
||||
add esi, 64
|
||||
jmp .begin
|
||||
.endofblock:
|
||||
cmp [final], 1
|
||||
je .quit
|
||||
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [_len], eax
|
||||
jmp .first
|
||||
@@:
|
||||
|
||||
mov edi, [_data]
|
||||
mov ecx, [_len]
|
||||
rep movsb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
and eax, 63
|
||||
mov ecx, 56
|
||||
sub ecx, eax
|
||||
ja @f
|
||||
add ecx, 64
|
||||
@@:
|
||||
add [_len], ecx
|
||||
mov byte[edi], 0x80
|
||||
add edi, 1
|
||||
sub ecx, 1
|
||||
mov al, 0
|
||||
rep stosb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
mov edx, 8
|
||||
mul edx
|
||||
bswap eax
|
||||
bswap edx
|
||||
mov dword[edi], edx
|
||||
mov dword[edi + 4], eax
|
||||
add [_len], 8
|
||||
mov [final], 1
|
||||
jmp .first
|
||||
.quit:
|
||||
mov esi, [_sha256]
|
||||
mov edi, esi
|
||||
mov ecx, 8
|
||||
@@:
|
||||
lodsd
|
||||
bswap eax
|
||||
stosd
|
||||
sub ecx, 1
|
||||
jnz @b
|
||||
ret
|
||||
endp
|
||||
|
336
programs/develop/libraries/libcrash/trunk/sha384_512.asm
Normal file
336
programs/develop/libraries/libcrash/trunk/sha384_512.asm
Normal file
@ -0,0 +1,336 @@
|
||||
macro chn x, y, z
|
||||
{
|
||||
movq mm0, [y]
|
||||
pxor mm0, [z]
|
||||
pand mm0, [x]
|
||||
pxor mm0, [z]
|
||||
}
|
||||
|
||||
macro maj x, y, z
|
||||
{
|
||||
movq mm0, [x]
|
||||
pxor mm0, [y]
|
||||
pand mm0, [z]
|
||||
movq mm2, [x]
|
||||
pand mm2, [y]
|
||||
pxor mm0, mm2
|
||||
}
|
||||
|
||||
macro Sigma0 x
|
||||
{
|
||||
movq mm0, x
|
||||
movq mm2, mm0
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 28
|
||||
psllq mm7, 36
|
||||
por mm2, mm7
|
||||
movq mm7, mm0
|
||||
psrlq mm0, 34
|
||||
psllq mm7, 30
|
||||
por mm0, mm7
|
||||
pxor mm0, mm2
|
||||
movq mm2, x
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 39
|
||||
psllq mm7, 25
|
||||
por mm2, mm7
|
||||
pxor mm0, mm2
|
||||
}
|
||||
|
||||
macro Sigma1 x
|
||||
{
|
||||
movq mm0, x
|
||||
movq mm2, mm0
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 14
|
||||
psllq mm7, 50
|
||||
por mm2, mm7
|
||||
movq mm7, mm0
|
||||
psrlq mm0, 18
|
||||
psllq mm7, 46
|
||||
por mm0, mm7
|
||||
pxor mm0, mm2
|
||||
movq mm2, x
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 41
|
||||
psllq mm7, 23
|
||||
por mm2, mm7
|
||||
pxor mm0, mm2
|
||||
}
|
||||
|
||||
macro sigma0 x
|
||||
{
|
||||
movq mm0, x
|
||||
movq mm2, mm0
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 1
|
||||
psllq mm7, 63
|
||||
por mm2, mm7
|
||||
movq mm7, mm0
|
||||
psrlq mm0, 8
|
||||
psllq mm7, 56
|
||||
por mm0, mm7
|
||||
pxor mm0, mm2
|
||||
movq mm2, x
|
||||
psrlq mm2, 7
|
||||
pxor mm0, mm2
|
||||
}
|
||||
|
||||
macro sigma1 x
|
||||
{
|
||||
movq mm0, x
|
||||
movq mm2, mm0
|
||||
movq mm7, mm2
|
||||
psrlq mm2, 19
|
||||
psllq mm7, 45
|
||||
por mm2, mm7
|
||||
movq mm7, mm0
|
||||
psrlq mm0, 61
|
||||
psllq mm7, 3
|
||||
por mm0, mm7
|
||||
pxor mm0, mm2
|
||||
movq mm2, x
|
||||
psrlq mm2, 6
|
||||
pxor mm0, mm2
|
||||
}
|
||||
|
||||
macro recalculate_w n
|
||||
{
|
||||
movq mm3, [w + ((n-2) and 15)*8]
|
||||
sigma1 mm3
|
||||
paddq mm0, [w + ((n-7) and 15)*8]
|
||||
movq mm6, mm0
|
||||
movq mm3, [w + ((n-15) and 15)*8]
|
||||
sigma0 mm3
|
||||
movq mm2, mm6
|
||||
paddq mm0, mm2
|
||||
movq mm7, [w + (n)*8]
|
||||
paddq mm7, mm0
|
||||
movq [w + (n)*8], mm7
|
||||
}
|
||||
|
||||
macro crash.sha512.round a, b, c, d, e, f, g, h, k
|
||||
{
|
||||
movq mm1, [h]
|
||||
movq mm3, [e]
|
||||
Sigma1 mm3
|
||||
paddq mm1, mm0
|
||||
chn e, f, g
|
||||
paddq mm1, mm0
|
||||
paddq mm1, [k]
|
||||
paddq mm1, mm5
|
||||
movq mm7, [d]
|
||||
paddq mm7, mm1
|
||||
movq [d], mm7
|
||||
movq mm3, [a]
|
||||
Sigma0 mm3
|
||||
paddq mm1, mm0
|
||||
maj a, b, c
|
||||
paddq mm0, mm1
|
||||
movq [h], mm0
|
||||
}
|
||||
|
||||
|
||||
macro crash.sha512.round_1_16 a, b, c, d, e, f, g, h, n
|
||||
{
|
||||
|
||||
movq mm0, [esi + (n)*8]
|
||||
movq [temp], mm0
|
||||
mov eax, dword[temp]
|
||||
bswap eax
|
||||
push eax
|
||||
mov eax, dword[temp + 4]
|
||||
bswap eax
|
||||
mov dword[temp], eax
|
||||
pop eax
|
||||
mov dword[temp + 4], eax
|
||||
movq mm0, [temp]
|
||||
movq [w + (n)*8], mm0
|
||||
movq mm5, mm0
|
||||
crash.sha512.round a, b, c, d, e, f, g, h, (crash._.sha512_table + (n)*8)
|
||||
}
|
||||
|
||||
macro crash.sha512.round_17_64 a, b, c, d, e, f, g, h, n, rep_num
|
||||
{
|
||||
recalculate_w n
|
||||
movq mm5, [w + (n)*8]
|
||||
crash.sha512.round a, b, c, d, e, f, g, h, (crash._.sha512_table + (n+16*rep_num)*8)
|
||||
}
|
||||
|
||||
|
||||
proc crash.sha512 _sha512, _data, _len, _callback, _msglen
|
||||
locals
|
||||
final rd 1
|
||||
w rq 80
|
||||
A rq 1
|
||||
B rq 1
|
||||
C rq 1
|
||||
D rq 1
|
||||
E rq 1
|
||||
F rq 1
|
||||
G rq 1
|
||||
H rq 1
|
||||
temp rq 1
|
||||
endl
|
||||
mov [final], 0
|
||||
.first:
|
||||
mov eax, [_msglen]
|
||||
mov ecx, [_len]
|
||||
add [eax], ecx
|
||||
mov esi, [_data]
|
||||
test ecx, ecx
|
||||
jz .callback
|
||||
.begin:
|
||||
sub [_len], 128
|
||||
jnc @f
|
||||
add [_len], 128
|
||||
jmp .endofblock
|
||||
@@:
|
||||
mov edi, [_sha512]
|
||||
movq mm0, [edi + 0x00]
|
||||
movq [A], mm0
|
||||
movq mm0, [edi + 0x08]
|
||||
movq [B], mm0
|
||||
movq mm0, [edi + 0x10]
|
||||
movq [C], mm0
|
||||
movq mm0, [edi + 0x18]
|
||||
movq [D], mm0
|
||||
movq mm0, [edi + 0x20]
|
||||
movq [E], mm0
|
||||
movq mm0, [edi + 0x28]
|
||||
movq [F], mm0
|
||||
movq mm0, [edi + 0x30]
|
||||
movq [G], mm0
|
||||
movq mm0, [edi + 0x38]
|
||||
movq [H], mm0
|
||||
|
||||
|
||||
crash.sha512.round_1_16 A, B, C, D, E, F, G, H, 0
|
||||
crash.sha512.round_1_16 H, A, B, C, D, E, F, G, 1
|
||||
crash.sha512.round_1_16 G, H, A, B, C, D, E, F, 2
|
||||
crash.sha512.round_1_16 F, G, H, A, B, C, D, E, 3
|
||||
crash.sha512.round_1_16 E, F, G, H, A, B, C, D, 4
|
||||
crash.sha512.round_1_16 D, E, F, G, H, A, B, C, 5
|
||||
crash.sha512.round_1_16 C, D, E, F, G, H, A, B, 6
|
||||
crash.sha512.round_1_16 B, C, D, E, F, G, H, A, 7
|
||||
crash.sha512.round_1_16 A, B, C, D, E, F, G, H, 8
|
||||
crash.sha512.round_1_16 H, A, B, C, D, E, F, G, 9
|
||||
crash.sha512.round_1_16 G, H, A, B, C, D, E, F, 10
|
||||
crash.sha512.round_1_16 F, G, H, A, B, C, D, E, 11
|
||||
crash.sha512.round_1_16 E, F, G, H, A, B, C, D, 12
|
||||
crash.sha512.round_1_16 D, E, F, G, H, A, B, C, 13
|
||||
crash.sha512.round_1_16 C, D, E, F, G, H, A, B, 14
|
||||
crash.sha512.round_1_16 B, C, D, E, F, G, H, A, 15
|
||||
|
||||
repeat 4
|
||||
crash.sha512.round_17_64 A, B, C, D, E, F, G, H, 0, %
|
||||
crash.sha512.round_17_64 H, A, B, C, D, E, F, G, 1, %
|
||||
crash.sha512.round_17_64 G, H, A, B, C, D, E, F, 2, %
|
||||
crash.sha512.round_17_64 F, G, H, A, B, C, D, E, 3, %
|
||||
crash.sha512.round_17_64 E, F, G, H, A, B, C, D, 4, %
|
||||
crash.sha512.round_17_64 D, E, F, G, H, A, B, C, 5, %
|
||||
crash.sha512.round_17_64 C, D, E, F, G, H, A, B, 6, %
|
||||
crash.sha512.round_17_64 B, C, D, E, F, G, H, A, 7, %
|
||||
crash.sha512.round_17_64 A, B, C, D, E, F, G, H, 8, %
|
||||
crash.sha512.round_17_64 H, A, B, C, D, E, F, G, 9, %
|
||||
crash.sha512.round_17_64 G, H, A, B, C, D, E, F, 10, %
|
||||
crash.sha512.round_17_64 F, G, H, A, B, C, D, E, 11, %
|
||||
crash.sha512.round_17_64 E, F, G, H, A, B, C, D, 12, %
|
||||
crash.sha512.round_17_64 D, E, F, G, H, A, B, C, 13, %
|
||||
crash.sha512.round_17_64 C, D, E, F, G, H, A, B, 14, %
|
||||
crash.sha512.round_17_64 B, C, D, E, F, G, H, A, 15, %
|
||||
end repeat
|
||||
|
||||
|
||||
mov edi, [_sha512]
|
||||
movq mm0, [A]
|
||||
paddq mm0, [edi + 0x00]
|
||||
movq [edi + 0x00], mm0
|
||||
movq mm0, [B]
|
||||
paddq mm0, [edi + 0x08]
|
||||
movq [edi + 0x08], mm0
|
||||
movq mm0, [C]
|
||||
paddq mm0, [edi + 0x10]
|
||||
movq [edi + 0x10], mm0
|
||||
movq mm0, [D]
|
||||
paddq mm0, [edi + 0x18]
|
||||
movq [edi + 0x18], mm0
|
||||
movq mm0, [E]
|
||||
paddq mm0, [edi + 0x20]
|
||||
movq [edi + 0x20], mm0
|
||||
movq mm0, [F]
|
||||
paddq mm0, [edi + 0x28]
|
||||
movq [edi + 0x28], mm0
|
||||
movq mm0, [G]
|
||||
paddq mm0, [edi + 0x30]
|
||||
movq [edi + 0x30], mm0
|
||||
movq mm0, [H]
|
||||
paddq mm0, [edi + 0x38]
|
||||
movq [edi + 0x38], mm0
|
||||
add esi, 128
|
||||
jmp .begin
|
||||
.endofblock:
|
||||
cmp [final], 1
|
||||
je .quit
|
||||
|
||||
.callback:
|
||||
mov eax, [_callback]
|
||||
test eax, eax
|
||||
jz @f
|
||||
call eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [_len], eax
|
||||
jmp .first
|
||||
@@:
|
||||
|
||||
mov edi, [_data]
|
||||
mov ecx, [_len]
|
||||
rep movsb
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
and eax, 127
|
||||
mov ecx, 112
|
||||
sub ecx, eax
|
||||
ja @f
|
||||
add ecx, 128
|
||||
@@:
|
||||
add [_len], ecx
|
||||
mov byte[edi], 0x80
|
||||
add edi, 1
|
||||
sub ecx, 1
|
||||
mov al, 0
|
||||
rep stosb
|
||||
xor eax, eax
|
||||
stosd
|
||||
stosd
|
||||
mov eax, [_msglen]
|
||||
mov eax, [eax]
|
||||
mov edx, 8
|
||||
mul edx
|
||||
bswap eax
|
||||
bswap edx
|
||||
mov dword[edi], edx
|
||||
mov dword[edi + 4], eax
|
||||
add [_len], 16
|
||||
mov [final], 1
|
||||
jmp .first
|
||||
.quit:
|
||||
mov esi, [_sha512]
|
||||
mov edi, esi
|
||||
mov ecx, 8
|
||||
@@:
|
||||
lodsd
|
||||
bswap eax
|
||||
mov ebx, eax
|
||||
lodsd
|
||||
bswap eax
|
||||
stosd
|
||||
mov eax, ebx
|
||||
stosd
|
||||
sub ecx, 1
|
||||
jnz @b
|
||||
emms
|
||||
ret
|
||||
endp
|
||||
|
Loading…
Reference in New Issue
Block a user