0,0 → 1,40 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License. ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
; This crc32 routine doesn't use precomputed table to allow different |
; polynomials, which is the first param. |
; Partial hash in assumed to be eax (both in and out). |
; Usage: |
; 1. mov eax, -1 |
; 2. stdcall crypto.crc32 zero or more times |
; 3. xor eax, -1 |
proc crc_32 _poly, _buffer, _length |
push ebx ecx edx esi |
|
mov esi, [_buffer] |
.next_byte: |
dec [_length] |
js .done |
movzx ebx, byte[esi] |
inc esi |
mov ecx, 8 |
.next_bit: |
mov edx, eax |
xor edx, ebx |
shr eax, 1 |
test edx, 1 |
jz @f |
xor eax, [_poly] |
@@: |
shr ebx, 1 |
dec ecx |
jnz .next_bit |
jmp .next_byte |
.done: |
pop esi edx ecx ebx |
ret |
endp |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |