All pastes #364733 Raw Edit

Something

public text v1 · immutable
#364733 ·published 2007-02-20 11:08 UTC
rendered paste body
comment ~

SHA1

message digest size : 160 bits

	push	offset ptrData			;The address of the data to be hashed 
	push	nSize 				;The number of bytes of data to be hashed
	push	offset ptrBuffer		;The pointer to the buffer to receive message digest (20 bytes)
	call	SHA1

WiteG//xtreeme

~
.486

Trans_0	MACRO	argument_1 , argument_2, argument_3, argument_4, argument_5, memory_ptr

	mov	esp, argument_1
	mov	edi, dword ptr [esi]
	rol	esp , 5
	bswap	edi
	add	argument_5, esp
	mov	memory_ptr, edi
	mov	esp, argument_3
	add	esi, 4
	xor	esp, argument_4
	add	argument_5, edi
	and	esp, argument_2
	xor	esp, argument_4
	ror	argument_2, 2
	lea	argument_5, [argument_5 + esp + 05A827999h]

ENDM

Trans_1	MACRO	argument_1 , argument_2, argument_3, argument_4, argument_5, memory_ptr_1, memory_ptr_2, memory_ptr_3, memory_ptr_4
	mov	esp, argument_1
	mov	edi, memory_ptr_1
	rol	esp , 5
	xor	edi, memory_ptr_2
	add	argument_5, esp
	xor	edi, memory_ptr_3
	mov	esp, argument_3
	xor	edi, memory_ptr_4
	xor	esp, argument_4
	rol	edi, 1
	and	esp, argument_2
	mov	memory_ptr_4, edi
	xor	esp, argument_4
	add	argument_5, edi
	ror	argument_2, 2
	lea	argument_5, [argument_5 + esp + 05A827999h]

ENDM

Trans_2	MACRO	argument_1 , argument_2, argument_3, argument_4, argument_5, memory_ptr_1, memory_ptr_2, memory_ptr_3, memory_ptr_4

	mov	esp, argument_1
	mov	edi, memory_ptr_1
	rol	esp , 5
	xor	edi, memory_ptr_2
	add	argument_5, esp
	xor	edi, memory_ptr_3
	mov	esp, argument_2
	xor	edi, memory_ptr_4
	xor	esp, argument_3
	rol	edi, 1
	xor	esp, argument_4
	mov	memory_ptr_4, edi
	add	argument_5, esp
	ror	argument_2, 2
	lea	argument_5, [argument_5 + edi + 06ED9EBA1h]

ENDM

Trans_3	MACRO	argument_1 , argument_2, argument_3, argument_4, argument_5, memory_ptr_1, memory_ptr_2, memory_ptr_3, memory_ptr_4

	mov	esp, argument_1
	mov	edi, memory_ptr_1
	rol	esp , 5
	xor	edi, memory_ptr_2
	add	argument_5, esp
	xor	edi, memory_ptr_3
	mov	esp, argument_2
	xor	edi, memory_ptr_4
	or	esp, argument_3
	rol	edi, 1
	and	esp, argument_4
	mov	memory_ptr_4, edi
	add	argument_5  , edi
	mov	edi, argument_2
	and	edi, argument_3
	or	edi, esp
	ror	argument_2, 2
	lea	argument_5, [argument_5 + edi + 08F1BBCDCh]

ENDM

Trans_4	MACRO	argument_1 , argument_2, argument_3, argument_4, argument_5, memory_ptr_1, memory_ptr_2, memory_ptr_3, memory_ptr_4

	mov	esp, argument_1
	mov	edi, memory_ptr_1
	rol	esp , 5
	xor	edi, memory_ptr_2
	add	argument_5, esp
	xor	edi, memory_ptr_3
	mov	esp, argument_2
	xor	edi, memory_ptr_4
	xor	esp, argument_3
	rol	edi, 1
	xor	esp, argument_4
	mov	memory_ptr_4, edi
	add	argument_5  , esp
	ror	argument_2, 2
	lea	argument_5, [argument_5 + edi + 0CA62C1D6h]

ENDM

.data?
_temp_buffer 	db 128 dup(?)
old_esp		dd ?
_hash_0		dd ?
_hash_1 	dd ?
_hash_2 	dd ?
_hash_3 	dd ?
_hash_4		dd ?
_hash_5		dd ?
_hash_6		dd ?
_hash_7		dd ?
_hash_8		dd ?
_hash_9		dd ?
_hash_0_temp	dd ?
_hash_1_temp	dd ?
_hash_2_temp	dd ?
_hash_3_temp	dd ?
_hash_4_temp	dd ?
_hash_5_temp	dd ?
_hash_6_temp	dd ?
_hash_7_temp	dd ?
_hash_8_temp	dd ?
_hash_9_temp	dd ?
_size		dd ?
_count		dd ?
_flag		dd ?

.code
SHA1	PROC
	pushad
	mov	old_esp, esp
	cld
	mov	ecx, [esp+ 28h]	; dlugosc danych do hashowania w bajtach	_size
	mov	esi, [esp+ 2Ch]	; offset danych do hashowania			_addr_INPUT
	mov	dword ptr [_size] , ecx
	or	dword ptr [_flag] , -1		; umowna flaga...
	mov	dword ptr [_count], ecx

	mov	dword ptr [_hash_0] , 067452301h
	mov	dword ptr [_hash_1] , 0EFCDAB89h
	mov	dword ptr [_hash_2] , 098BADCFEh
	mov	dword ptr [_hash_3] , 010325476h
	mov	dword ptr [_hash_4] , 0C3D2E1F0h

@@SHA1_Loop:
	cmp	dword ptr [_count] , 64
	jb	@@SHA1_LIPOF

	mov	eax, dword ptr [_hash_0]
	mov	ebx, dword ptr [_hash_1]
	mov	ecx, dword ptr [_hash_2]
	mov	edx, dword ptr [_hash_3]
	mov	ebp, dword ptr [_hash_4]

	Trans_0 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*0]
	Trans_0 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*1]
	Trans_0 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*2]
	Trans_0 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*3]
	Trans_0 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*4]
	Trans_0 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*5]
	Trans_0 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*6]
	Trans_0 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*7]
	Trans_0 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*8]
	Trans_0 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*9]
	Trans_0 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*10]
	Trans_0 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*11]
	Trans_0 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*12]
	Trans_0 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*13]
	Trans_0 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*14]
	Trans_0 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*15]
	Trans_1 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*0]
	Trans_1 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*1]
	Trans_1 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*2]
	Trans_1 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*3]
	Trans_2 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*4]
	Trans_2 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*5]
	Trans_2 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*6]
	Trans_2 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*7]
	Trans_2 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*8]
	Trans_2 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*9]
	Trans_2 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*10]
	Trans_2 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*11]
	Trans_2 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*12]
	Trans_2 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*13]
	Trans_2 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*14]
	Trans_2 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*15]
	Trans_2 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*0]
	Trans_2 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*1]
	Trans_2 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*2]
	Trans_2 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*3]
	Trans_2 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*4]
	Trans_2 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*5]
	Trans_2 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*6]
	Trans_2 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*7]
	Trans_3 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*8]
	Trans_3 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*9]
	Trans_3 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*10]
	Trans_3 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*11]
	Trans_3 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*12]
	Trans_3 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*13]
	Trans_3 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*14]
	Trans_3 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*15]
	Trans_3 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*0]
	Trans_3 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*1]
	Trans_3 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*2]
	Trans_3 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*3]
	Trans_3 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*4]
	Trans_3 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*5]
	Trans_3 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*6]
	Trans_3 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*7]
	Trans_3 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*8]
	Trans_3 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*9]
	Trans_3 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*10]
	Trans_3 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*11]
	Trans_4 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*12]
	Trans_4 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*13]
	Trans_4 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*14]
	Trans_4 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*15]
	Trans_4 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*0]
	Trans_4 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*1]
	Trans_4 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*2]
	Trans_4 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*3]
	Trans_4 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*4]
	Trans_4 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*5]
	Trans_4 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*6]
	Trans_4 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*7]
	Trans_4 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*8]
	Trans_4 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*9]
	Trans_4 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*2] ,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*10]
	Trans_4 eax,ebx,ecx,edx,ebp,dword ptr [_temp_buffer+4*8] ,dword ptr [_temp_buffer+4*3] ,dword ptr [_temp_buffer+4*13],dword ptr [_temp_buffer+4*11]
	Trans_4 ebp,eax,ebx,ecx,edx,dword ptr [_temp_buffer+4*9] ,dword ptr [_temp_buffer+4*4] ,dword ptr [_temp_buffer+4*14],dword ptr [_temp_buffer+4*12]
	Trans_4 edx,ebp,eax,ebx,ecx,dword ptr [_temp_buffer+4*10],dword ptr [_temp_buffer+4*5] ,dword ptr [_temp_buffer+4*15],dword ptr [_temp_buffer+4*13]
	Trans_4 ecx,edx,ebp,eax,ebx,dword ptr [_temp_buffer+4*11],dword ptr [_temp_buffer+4*6] ,dword ptr [_temp_buffer+4*0] ,dword ptr [_temp_buffer+4*14]
	Trans_4 ebx,ecx,edx,ebp,eax,dword ptr [_temp_buffer+4*12],dword ptr [_temp_buffer+4*7] ,dword ptr [_temp_buffer+4*1] ,dword ptr [_temp_buffer+4*15]

	add	dword ptr [_hash_0], eax
	add	dword ptr [_hash_1], ebx
	add	dword ptr [_hash_2], ecx
	add	dword ptr [_hash_3], edx
	add	dword ptr [_hash_4], ebp

	sub	dword ptr [_count], 64
	jmp	@@SHA1_Loop

@@SHA1_LIPOF:
	cmp	dword ptr [_flag], 0
	jz	@@SHA1_Finishing
	mov	esp, old_esp
	call	BI_Padding
	jmp	@@SHA1_Loop

@@SHA1_Finishing:
	mov	esp, old_esp
	mov	edi, [esp+ 24h]		; offset bufora dla wyniku _addr_OUTPUT
	mov	esi, offset _hash_0

	mov	ecx, 5
@@:
	mov	eax, dword ptr [esi+4*ecx-4]
	bswap	eax
	mov	dword ptr [edi+4*ecx-4], eax
	dec	ecx
	jnz	@B

	mov	ecx, 56
	xor	eax, eax
	mov	edi, offset _temp_buffer
	rep	stosd

	popad
	ret	0Ch
SHA1	ENDP

BI_Padding	PROC

	mov	ecx, dword ptr [_count]
	mov	dword ptr [_flag] , 0
	mov	dword ptr [_count], 64
	mov	eax, ecx
	mov	edi, offset _temp_buffer

	test	eax, eax
	jz	@@only_null
	
	rep	movsb

@@only_null:
	mov	ecx, eax
	mov	byte ptr [edi], 80h
	sub	ecx, 55
	inc	edi
	neg	ecx
	jz	@@save_size_in_pad
	jns	@@zero_mem

	add	dword ptr [_count], 64
	add	ecx, 64		;padding rozciagnij tez na nastepne 64 bajty !

@@zero_mem:
	xor	al, al
	rep	stosb

@@save_size_in_pad:
	xor	edx, edx
	mov	eax, dword ptr [_size]
	mul	dword ptr [const_8]
	bswap	eax
	bswap	edx
	mov	dword ptr [edi], edx
	mov	dword ptr [edi+4], eax
	mov	esi, offset _temp_buffer
	ret
	
const_8	dd	8
BI_Padding	ENDP