Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. format MS COFF
  2.  
  3. public @EXPORT as 'EXPORTS'
  4.  
  5. include '../../../../struct.inc'
  6. include '../../../../proc32.inc'
  7. include '../../../../macros.inc'
  8. include '../../../../config.inc'
  9. ;include '../../../../debug.inc'
  10.  
  11. purge section,mov,add,sub
  12. section '.flat' code readable align 16
  13.  
  14. include 'libcrash.inc'
  15. include 'crc32.asm'
  16. include 'md4.asm'
  17. include 'md5.asm'
  18. include 'sha1.asm'
  19. include 'sha224_256.asm'
  20. include 'sha384_512.asm'
  21.  
  22.  
  23. proc lib_init
  24.         ; generate crc32 table
  25.         bts     [crash._.init_flags], 0
  26.         jc      .crc32_table_done
  27.        
  28.         mov     edi, crash._.crc32_table
  29.         xor     ecx, ecx
  30.         mov     edx, 0xedb88320
  31.   .1:
  32.         mov     ebx, 8
  33.         mov     eax, ecx
  34.   .2:
  35.         shr     eax, 1
  36.         jnc     @f
  37.         xor     eax, edx
  38.     @@:
  39.         dec     ebx
  40.         jnz     .2
  41.         stosd
  42.         inc     cl
  43.         jnz     .1
  44.  
  45.   .crc32_table_done:
  46.         ret
  47. endp
  48.  
  49.  
  50. proc crash.hash  _type, _hash, _data, _len, _callback, _msglen
  51. locals
  52.         hash_func       rd      1
  53. endl
  54.         mov     eax, [_type]
  55.         mov     ecx, eax
  56.         and     eax, 0x000000ff
  57.         sub     eax, 1
  58.         mov     edx, [crash._.table + eax*8]
  59.         mov     esi, [crash._.table + eax*8 + 4]
  60.         mov     edi, [_hash]
  61.         mov     [hash_func], edx
  62.         and     ecx, 0x0000ff00
  63.         shr     ecx, 8
  64.         rep     movsd
  65.  
  66.         stdcall [hash_func], [_hash], [_data], [_len], [_callback], [_msglen]
  67.  
  68.         ret
  69. endp
  70.  
  71.  
  72. proc crash.bin2hex _bin, _hex, _type
  73.         xor     eax, eax
  74.         mov     ebx, crash._.bin2hex_table
  75.         mov     esi, [_bin]
  76.         mov     edi, [_hex]
  77.         mov     ecx, [_type]
  78.         and     ecx, 0x00ff0000
  79.         shr     ecx, 16 - 2
  80.   .byte:
  81.         lodsb
  82.         mov     ah, al
  83.         shr     ah, 4
  84.         and     al, 0x0f
  85.         xlatb
  86.         xchg    al, ah
  87.         xlatb
  88.         stosw
  89.         dec     ecx
  90.         jnz     .byte
  91.  
  92.         ret
  93. endp
  94.  
  95.  
  96. crash._.bin2hex_table   db      '0123456789abcdef'
  97. crash._.table:          ;       hash function,  address of initial hash value
  98.                         dd      crash.crc32,    crash._.crc_init
  99.                         dd      crash.md4,      crash._.md4_init
  100.                         dd      crash.md5,      crash._.md5_init
  101.                         dd      crash.sha1,     crash._.sha1_init
  102.                         dd      crash.sha256,   crash._.sha224_init
  103.                         dd      crash.sha256,   crash._.sha256_init
  104.                         dd      crash.sha512,   crash._.sha384_init
  105.                         dd      crash.sha512,   crash._.sha512_init
  106.  
  107. crash._.crc_init        dd      0xffffffff
  108. crash._.md4_init:
  109. crash._.md5_init:
  110. crash._.sha1_init       dd      0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0
  111. crash._.sha224_init     dd      0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
  112. crash._.sha256_init     dd      0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
  113. crash._.sha384_init     dq      0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,\
  114.                                 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4
  115. crash._.sha512_init     dq      0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,\
  116.                                 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
  117.  
  118. crash._.init_flags      dd      0
  119. crash._.sha256_table    dd      0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\
  120.                                 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\
  121.                                 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\
  122.                                 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\
  123.                                 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\
  124.                                 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\
  125.                                 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\
  126.                                 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
  127.  
  128. crash._.sha512_table    dq      0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,\
  129.                                 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118,\
  130.                                 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,\
  131.                                 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694,\
  132.                                 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,\
  133.                                 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,\
  134.                                 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4,\
  135.                                 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70,\
  136.                                 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,\
  137.                                 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,\
  138.                                 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30,\
  139.                                 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8,\
  140.                                 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,\
  141.                                 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,\
  142.                                 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,\
  143.                                 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b,\
  144.                                 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,\
  145.                                 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b,\
  146.                                 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,\
  147.                                 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
  148.  
  149. align 4
  150. @EXPORT:
  151.  
  152. export                                   \
  153.     lib_init        , 'lib_init'       , \
  154.     crash.hash      , 'crash_hash'     , \
  155.     crash.bin2hex   , 'crash_bin2hex'
  156.  
  157. section '.data' data readable writable align 16
  158. crash._.crc32_table     rd      256
  159.