Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3532 → Rev 6461

/programs/develop/libraries/libcrash/trunk/libcrash.asm
1,6 → 1,6
; libcrash -- cryptographic hash functions
;
; Copyright (C) 2012-2013 Ivan Baravy (dunkaist)
; Copyright (C) 2012-2014,2016 Ivan Baravy (dunkaist)
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
28,8 → 28,8
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'
43,249 → 43,42
endp
 
 
proc crash.hash _hid, _hash, _data, _len, _callback, _msglen
proc crash.hash _hid, _data, _callback, _ctx
locals
hash_func rd 1
final rd 1
hi rd 1
size dd ?
endl
mov [size], 0
mov eax, [_hid]
imul eax, sizeof.crash_item
lea eax, [crash._.table + eax]
mov [hi], eax
lea edx, [crash._.table + eax]
mov ebx, [_ctx]
 
mov eax, [hi]
mov edx, [eax + crash_item.function]
mov esi, [eax + crash_item.init_val]
mov edi, [_hash]
mov [hash_func], edx
mov ecx, [hi]
mov ecx, [ecx + crash_item.len_in]
rep movsd
stdcall [edx + crash_item.init], [_ctx]
 
mov [final], 0
.first:
mov eax, [_msglen]
mov ecx, [_len]
add [eax], ecx
.hash:
mov esi, [_data]
test ecx, ecx
jz .callback
.begin:
mov eax, [hi]
mov eax, [eax + crash_item.len_blk]
sub [_len], eax
jnc @f
add [_len], eax
jmp .endofblock
@@:
stdcall [hash_func], [_hash], [_data]
jmp .begin
.endofblock:
cmp [final], 1
je .quit
push edx
stdcall [edx + crash_item.update], [_ctx], [_data], [size]
mov [size], 0
pop edx
 
.callback:
mov edi, [_data]
mov ecx, [_len]
rep movsb
push esi edi
stdcall [_callback], [_len]
pop edi esi
mov eax, [_callback]
test eax, eax
jz @f
mov edx, [_msglen]
mov ecx, [_len]
sub [edx], ecx
add [_len], eax
jmp .first
@@:
jz .quit
push edx
stdcall [_callback], [size]
pop edx
mov [size], eax
test eax, eax
jnz .hash
 
mov eax, [_msglen]
mov eax, [eax]
xor edx, edx
mov ecx, [hi]
mov ecx, [ecx + crash_item.len_blk]
div ecx
mov eax, edx
mov edx, [hi]
mov ecx, [edx + crash_item.len_blk]
sub ecx, [edx + crash_item.len_size]
sub ecx, eax
ja @f
add ecx, [edx + crash_item.len_blk]
@@:
add [_len], ecx
 
mov eax, [edx + crash_item.len_size]
add [_len], eax
 
mov eax, [hi]
stdcall [eax + crash_item.finalproc], [hi], [_msglen]
 
mov [final], 1
jmp .first
stdcall [edx + crash_item.final], [_ctx]
.quit:
mov eax, [hi]
stdcall [eax + crash_item.postproc], [eax + crash_item.len_out], [_hash]
ret
endp
 
 
crash._.md4_finalproc:
proc crash._.md5_finalproc _hi, _msglen
mov byte[edi], 0x80
add edi, 1
sub ecx, 1
mov al, 0
rep stosb
push ecx
xor eax, eax
mov ecx, [_hi]
mov ecx, [ecx + crash_item.len_size]
sub ecx, 8 ; FIXME for > 2^64 input length
shr ecx, 2
rep stosd
pop ecx
mov eax, [_msglen]
mov eax, [eax]
mov edx, 8
mul edx
mov ecx, [_hi]
mov dword[edi], eax
mov dword[edi + 4], edx
ret
endp
 
 
crash._.sha1_finalproc:
crash._.sha224_finalproc:
proc crash._.sha256_finalproc _hi, _msglen
mov byte[edi], 0x80
add edi, 1
sub ecx, 1
mov al, 0
rep stosb
push ecx
xor eax, eax
mov ecx, [_hi]
mov ecx, [ecx + crash_item.len_size]
sub ecx, 8 ; FIXME for > 2^64 input length
shr ecx, 2
rep stosd
pop ecx
mov eax, [_msglen]
mov eax, [eax]
mov edx, 8
mul edx
mov ecx, [_hi]
bswap eax
bswap edx
xchg eax, edx
mov dword[edi], eax
mov dword[edi + 4], edx
 
ret
endp
 
 
crash._.sha384_finalproc:
proc crash._.sha512_finalproc _hi, _msglen
mov byte[edi], 0x80
add edi, 1
sub ecx, 1
mov al, 0
rep stosb
push ecx
xor eax, eax
mov ecx, [_hi]
mov ecx, [ecx + crash_item.len_size]
sub ecx, 8 ; FIXME for > 2^64 input length
shr ecx, 2
rep stosd
pop ecx
mov eax, [_msglen]
mov eax, [eax]
mov edx, 8
mul edx
mov ecx, [_hi]
bswap eax
bswap edx
xchg eax, edx
mov dword[edi], eax
mov dword[edi + 4], edx
 
ret
endp
 
 
crash._.sha3_224_finalproc:
crash._.sha3_256_finalproc:
crash._.sha3_384_finalproc:
proc crash._.sha3_512_finalproc _hi, _msglen
mov byte[edi], 0x01
add edi, 1
sub ecx, 1
mov eax, 0
rep stosb
or byte[edi - 1], 0x80
ret
endp
 
 
crash._.md4_postprocess:
proc crash._.md5_postprocess _len_out, _hash
ret
endp
 
 
crash._.sha1_postprocess:
crash._.sha224_postprocess:
proc crash._.sha256_postprocess _len_out, _hash
mov ecx, [_len_out]
mov esi, [_hash]
mov edi, esi
@@:
lodsd
bswap eax
stosd
dec ecx
jnz @b
ret
endp
 
 
crash._.sha384_postprocess:
proc crash._.sha512_postprocess _len_out, _hash
mov ecx, [_len_out]
mov esi, [_hash]
mov edi, esi
@@:
lodsd
mov ebx, eax
lodsd
bswap eax
bswap ebx
stosd
mov eax, ebx
stosd
dec ecx
jnz @b
emms
ret
endp
 
 
crash._.sha3_224_postprocess:
crash._.sha3_256_postprocess:
crash._.sha3_384_postprocess:
proc crash._.sha3_512_postprocess _len_out, _hash
emms
ret
endp
 
 
proc crash.bin2hex _bin, _hex, _hid ; FIXME _hid param?
proc crash.bin2hex _bin, _hex, _hid
mov eax, [_hid]
imul eax, sizeof.crash_item
mov ecx, [crash._.table + eax + crash_item.len_out]
292,7 → 85,6
mov ebx, crash._.bin2hex_table
mov esi, [_bin]
mov edi, [_hex]
shl ecx, 2
.next_byte:
xor eax, eax
lodsb
310,78 → 102,23
endp
 
 
section '.data' data readable align 16
crash._.bin2hex_table db '0123456789abcdef'
 
; see crash_item struct for details
crash._.table dd crash.md4, crash._.md4_init, crash._.md4_finalproc, crash._.md4_postprocess, 4, 4, 64, 8
dd crash.md5, crash._.md5_init, crash._.md5_finalproc, crash._.md5_postprocess, 4, 4, 64, 8
dd crash.sha1, crash._.sha1_init, crash._.sha1_finalproc, crash._.sha1_postprocess, 5, 5, 64, 8
dd crash.sha256, crash._.sha224_init, crash._.sha224_finalproc, crash._.sha224_postprocess, 8, 7, 64, 8
dd crash.sha256, crash._.sha256_init, crash._.sha256_finalproc, crash._.sha256_postprocess, 8, 8, 64, 8
dd crash.sha512, crash._.sha384_init, crash._.sha384_finalproc, crash._.sha384_postprocess, 16, 12, 128, 16
dd crash.sha512, crash._.sha512_init, crash._.sha512_finalproc, crash._.sha512_postprocess, 16, 16, 128, 16
dd crash.sha3_224, crash._.sha3_224_init, crash._.sha3_224_finalproc, crash._.sha3_224_postprocess, 50, 7, 144, 0
dd crash.sha3_256, crash._.sha3_256_init, crash._.sha3_256_finalproc, crash._.sha3_256_postprocess, 50, 8, 136, 0
dd crash.sha3_384, crash._.sha3_384_init, crash._.sha3_384_finalproc, crash._.sha3_384_postprocess, 50, 12, 104, 0
dd crash.sha3_512, crash._.sha3_512_init, crash._.sha3_512_finalproc, crash._.sha3_512_postprocess, 50, 16, 72, 0
crash._.table dd \
crc32.init, crc32.update, crc32.final, CRC32_HASH_SIZE, \
md4.init, md4.update, md4.final, MD4_HASH_SIZE, \
md5.init, md5.update, md5.final, MD5_HASH_SIZE, \
sha1.init, sha1.update, sha1.final, SHA1_HASH_SIZE, \
sha224.init, sha224256.update, sha224256.final, SHA224_HASH_SIZE, \
sha256.init, sha224256.update, sha224256.final, SHA256_HASH_SIZE, \
sha384.init, sha384512.update, sha384512.final, SHA384_HASH_SIZE, \
sha512.init, sha384512.update, sha384512.final, SHA512_HASH_SIZE, \
sha3224.init, sha3.update, sha3.final, SHA3224_HASH_SIZE,\
sha3256.init, sha3.update, sha3.final, SHA3256_HASH_SIZE,\
sha3384.init, sha3.update, sha3.final, SHA3384_HASH_SIZE,\
sha3512.init, sha3.update, sha3.final, SHA3512_HASH_SIZE
 
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._.sha3_512_init:
crash._.sha3_384_init:
crash._.sha3_256_init:
crash._.sha3_224_init dq 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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
 
crash._.sha3_round dq 0x0000000000000001, 0x0000000000008082, 0x800000000000808A, 0x8000000080008000,\
0x000000000000808B, 0x0000000080000001, 0x8000000080008081, 0x8000000000008009,\
0x000000000000008A, 0x0000000000000088, 0x0000000080008009, 0x000000008000000A,\
0x000000008000808B, 0x800000000000008B, 0x8000000000008089, 0x8000000000008003,\
0x8000000000008002, 0x8000000000000080, 0x000000000000800A, 0x800000008000000A,\
0x8000000080008081, 0x8000000000008080, 0x0000000080000001, 0x8000000080008008
 
 
align 4
@EXPORT: