.file	"bf-686.s"
.text
.globl	_BF_encrypt
.align	4
_BF_encrypt:
L_BF_encrypt_begin:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi

	# Load the 2 words

	movl	20(%esp),%eax
	movl	(%eax),%ecx
	movl	4(%eax),%edx

	# P pointer, s and enc flag

	movl	24(%esp),%edi
	xorl	%eax,%eax
	xorl	%ebx,%ebx
	xorl	(%edi),%ecx

	# Round 0

	rorl	$16,%ecx
	movl	4(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 1

	rorl	$16,%edx
	movl	8(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 2

	rorl	$16,%ecx
	movl	12(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 3

	rorl	$16,%edx
	movl	16(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 4

	rorl	$16,%ecx
	movl	20(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 5

	rorl	$16,%edx
	movl	24(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 6

	rorl	$16,%ecx
	movl	28(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 7

	rorl	$16,%edx
	movl	32(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 8

	rorl	$16,%ecx
	movl	36(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 9

	rorl	$16,%edx
	movl	40(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 10

	rorl	$16,%ecx
	movl	44(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 11

	rorl	$16,%edx
	movl	48(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 12

	rorl	$16,%ecx
	movl	52(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 13

	rorl	$16,%edx
	movl	56(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 14

	rorl	$16,%ecx
	movl	60(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 15

	rorl	$16,%edx
	movl	64(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx
	xorl	68(%edi),%edx
	movl	20(%esp),%eax
	movl	%edx,(%eax)
	movl	%ecx,4(%eax)
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.globl	_BF_decrypt
.align	4
_BF_decrypt:
L_BF_decrypt_begin:
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi

	# Load the 2 words

	movl	20(%esp),%eax
	movl	(%eax),%ecx
	movl	4(%eax),%edx

	# P pointer, s and enc flag

	movl	24(%esp),%edi
	xorl	%eax,%eax
	xorl	%ebx,%ebx
	xorl	68(%edi),%ecx

	# Round 16

	rorl	$16,%ecx
	movl	64(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 15

	rorl	$16,%edx
	movl	60(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 14

	rorl	$16,%ecx
	movl	56(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 13

	rorl	$16,%edx
	movl	52(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 12

	rorl	$16,%ecx
	movl	48(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 11

	rorl	$16,%edx
	movl	44(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 10

	rorl	$16,%ecx
	movl	40(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 9

	rorl	$16,%edx
	movl	36(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 8

	rorl	$16,%ecx
	movl	32(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 7

	rorl	$16,%edx
	movl	28(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 6

	rorl	$16,%ecx
	movl	24(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 5

	rorl	$16,%edx
	movl	20(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 4

	rorl	$16,%ecx
	movl	16(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 3

	rorl	$16,%edx
	movl	12(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx

	# Round 2

	rorl	$16,%ecx
	movl	8(%edi),%esi
	movb	%ch,%al
	movb	%cl,%bl
	rorl	$16,%ecx
	xorl	%esi,%edx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%ch,%al
	movb	%cl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%edx

	# Round 1

	rorl	$16,%edx
	movl	4(%edi),%esi
	movb	%dh,%al
	movb	%dl,%bl
	rorl	$16,%edx
	xorl	%esi,%ecx
	movl	72(%edi,%eax,4),%esi
	movl	1096(%edi,%ebx,4),%ebp
	movb	%dh,%al
	movb	%dl,%bl
	addl	%ebp,%esi
	movl	2120(%edi,%eax,4),%eax
	xorl	%eax,%esi
	movl	3144(%edi,%ebx,4),%ebp
	addl	%ebp,%esi
	xorl	%eax,%eax
	xorl	%esi,%ecx
	xorl	(%edi),%edx
	movl	20(%esp),%eax
	movl	%edx,(%eax)
	movl	%ecx,4(%eax)
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.globl	_BF_cbc_encrypt
.align	4
_BF_cbc_encrypt:
L_BF_cbc_encrypt_begin:

	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	movl	28(%esp),%ebp
	# getting iv ptr from parameter 4

	movl	36(%esp),%ebx
	movl	(%ebx),%esi
	movl	4(%ebx),%edi
	pushl	%edi
	pushl	%esi
	pushl	%edi
	pushl	%esi
	movl	%esp,%ebx
	movl	36(%esp),%esi
	movl	40(%esp),%edi
	# getting encrypt flag from parameter 5

	movl	56(%esp),%ecx
	# get and push parameter 3

	movl	48(%esp),%eax
	pushl	%eax
	pushl	%ebx
	cmpl	$0,%ecx
	jz	L000decrypt
	andl	$4294967288,%ebp
	movl	8(%esp),%eax
	movl	12(%esp),%ebx
	jz	L001encrypt_finish
L002encrypt_loop:
	movl	(%esi),%ecx
	movl	4(%esi),%edx
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,8(%esp)
	movl	%ebx,12(%esp)
	call	L_BF_encrypt_begin
	movl	8(%esp),%eax
	movl	12(%esp),%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L002encrypt_loop
L001encrypt_finish:
	movl	52(%esp),%ebp
	andl	$7,%ebp
	jz	L003finish
	call	L004PIC_point
L004PIC_point:
	popl	%edx
	leal	L005cbc_enc_jmp_table-L004PIC_point(%edx),%ecx
	movl	(%ecx,%ebp,4),%ebp
	addl	%edx,%ebp
	xorl	%ecx,%ecx
	xorl	%edx,%edx
	jmp	*%ebp
L006ej7:
	movb	6(%esi),%dh
	shll	$8,%edx
L007ej6:
	movb	5(%esi),%dh
L008ej5:
	movb	4(%esi),%dl
L009ej4:
	movl	(%esi),%ecx
	jmp	L010ejend
L011ej3:
	movb	2(%esi),%ch
	shll	$8,%ecx
L012ej2:
	movb	1(%esi),%ch
L013ej1:
	movb	(%esi),%cl
L010ejend:
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,8(%esp)
	movl	%ebx,12(%esp)
	call	L_BF_encrypt_begin
	movl	8(%esp),%eax
	movl	12(%esp),%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	jmp	L003finish
L000decrypt:
	andl	$4294967288,%ebp
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	jz	L014decrypt_finish
L015decrypt_loop:
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,8(%esp)
	movl	%ebx,12(%esp)
	call	L_BF_decrypt_begin
	movl	8(%esp),%eax
	movl	12(%esp),%ebx
	bswap	%eax
	bswap	%ebx
	movl	16(%esp),%ecx
	movl	20(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%ecx,(%edi)
	movl	%edx,4(%edi)
	movl	%eax,16(%esp)
	movl	%ebx,20(%esp)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L015decrypt_loop
L014decrypt_finish:
	movl	52(%esp),%ebp
	andl	$7,%ebp
	jz	L003finish
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	bswap	%eax
	bswap	%ebx
	movl	%eax,8(%esp)
	movl	%ebx,12(%esp)
	call	L_BF_decrypt_begin
	movl	8(%esp),%eax
	movl	12(%esp),%ebx
	bswap	%eax
	bswap	%ebx
	movl	16(%esp),%ecx
	movl	20(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
L016dj7:
	rorl	$16,%edx
	movb	%dl,6(%edi)
	shrl	$16,%edx
L017dj6:
	movb	%dh,5(%edi)
L018dj5:
	movb	%dl,4(%edi)
L019dj4:
	movl	%ecx,(%edi)
	jmp	L020djend
L021dj3:
	rorl	$16,%ecx
	movb	%cl,2(%edi)
	shll	$16,%ecx
L022dj2:
	movb	%ch,1(%esi)
L023dj1:
	movb	%cl,(%esi)
L020djend:
	jmp	L003finish
L003finish:
	movl	60(%esp),%ecx
	addl	$24,%esp
	movl	%eax,(%ecx)
	movl	%ebx,4(%ecx)
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.align	6,0x90
L005cbc_enc_jmp_table:
.long	0
.long	L013ej1-L004PIC_point
.long	L012ej2-L004PIC_point
.long	L011ej3-L004PIC_point
.long	L009ej4-L004PIC_point
.long	L008ej5-L004PIC_point
.long	L007ej6-L004PIC_point
.long	L006ej7-L004PIC_point
.align	6,0x90
