.text
.globl	_DES_SPtrans
.type	__x86_DES_encrypt,@function
.align	4
__x86_DES_encrypt:
	pushl	%ecx
	# Round 0
	movl	(%ecx),%eax
	xorl	%ebx,%ebx
	movl	4(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 1
	movl	8(%ecx),%eax
	xorl	%ebx,%ebx
	movl	12(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 2
	movl	16(%ecx),%eax
	xorl	%ebx,%ebx
	movl	20(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 3
	movl	24(%ecx),%eax
	xorl	%ebx,%ebx
	movl	28(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 4
	movl	32(%ecx),%eax
	xorl	%ebx,%ebx
	movl	36(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 5
	movl	40(%ecx),%eax
	xorl	%ebx,%ebx
	movl	44(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 6
	movl	48(%ecx),%eax
	xorl	%ebx,%ebx
	movl	52(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 7
	movl	56(%ecx),%eax
	xorl	%ebx,%ebx
	movl	60(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 8
	movl	64(%ecx),%eax
	xorl	%ebx,%ebx
	movl	68(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 9
	movl	72(%ecx),%eax
	xorl	%ebx,%ebx
	movl	76(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 10
	movl	80(%ecx),%eax
	xorl	%ebx,%ebx
	movl	84(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 11
	movl	88(%ecx),%eax
	xorl	%ebx,%ebx
	movl	92(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 12
	movl	96(%ecx),%eax
	xorl	%ebx,%ebx
	movl	100(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 13
	movl	104(%ecx),%eax
	xorl	%ebx,%ebx
	movl	108(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 14
	movl	112(%ecx),%eax
	xorl	%ebx,%ebx
	movl	116(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 15
	movl	120(%ecx),%eax
	xorl	%ebx,%ebx
	movl	124(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	addl	$4,%esp
	ret
.type	__x86_DES_decrypt,@function
.align	4
__x86_DES_decrypt:
	pushl	%ecx
	# Round 15
	movl	120(%ecx),%eax
	xorl	%ebx,%ebx
	movl	124(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 14
	movl	112(%ecx),%eax
	xorl	%ebx,%ebx
	movl	116(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 13
	movl	104(%ecx),%eax
	xorl	%ebx,%ebx
	movl	108(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 12
	movl	96(%ecx),%eax
	xorl	%ebx,%ebx
	movl	100(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 11
	movl	88(%ecx),%eax
	xorl	%ebx,%ebx
	movl	92(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 10
	movl	80(%ecx),%eax
	xorl	%ebx,%ebx
	movl	84(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 9
	movl	72(%ecx),%eax
	xorl	%ebx,%ebx
	movl	76(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 8
	movl	64(%ecx),%eax
	xorl	%ebx,%ebx
	movl	68(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 7
	movl	56(%ecx),%eax
	xorl	%ebx,%ebx
	movl	60(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 6
	movl	48(%ecx),%eax
	xorl	%ebx,%ebx
	movl	52(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 5
	movl	40(%ecx),%eax
	xorl	%ebx,%ebx
	movl	44(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 4
	movl	32(%ecx),%eax
	xorl	%ebx,%ebx
	movl	36(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 3
	movl	24(%ecx),%eax
	xorl	%ebx,%ebx
	movl	28(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 2
	movl	16(%ecx),%eax
	xorl	%ebx,%ebx
	movl	20(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	# Round 1
	movl	8(%ecx),%eax
	xorl	%ebx,%ebx
	movl	12(%ecx),%edx
	xorl	%esi,%eax
	xorl	%ecx,%ecx
	xorl	%esi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%edi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%edi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%edi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%edi
	xorl	0x700(%ebp,%ecx,1),%edi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%edi
	xorl	0x500(%ebp,%edx,1),%edi
	# Round 0
	movl	(%ecx),%eax
	xorl	%ebx,%ebx
	movl	4(%ecx),%edx
	xorl	%edi,%eax
	xorl	%ecx,%ecx
	xorl	%edi,%edx
	andl	$0xfcfcfcfc,%eax
	andl	$0xcfcfcfcf,%edx
	movb	%al,%bl
	movb	%ah,%cl
	rorl	$4,%edx
	xorl	(%ebp,%ebx,1),%esi
	movb	%dl,%bl
	xorl	0x200(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	shrl	$16,%eax
	xorl	0x100(%ebp,%ebx,1),%esi
	movb	%ah,%bl
	shrl	$16,%edx
	xorl	0x300(%ebp,%ecx,1),%esi
	movb	%dh,%cl
	andl	$0xff,%eax
	andl	$0xff,%edx
	xorl	0x600(%ebp,%ebx,1),%esi
	xorl	0x700(%ebp,%ecx,1),%esi
	movl	(%esp),%ecx
	xorl	0x400(%ebp,%eax,1),%esi
	xorl	0x500(%ebp,%edx,1),%esi
	addl	$4,%esp
	ret
.globl	_DES_encrypt1
.type	_DES_encrypt1,@function
.align	4
_DES_encrypt1:
L_DES_encrypt1_begin:
	pushl	%esi
	pushl	%edi

	# Load the 2 words
	movl	12(%esp),%esi
	xorl	%ecx,%ecx
	pushl	%ebx
	pushl	%ebp
	movl	(%esi),%eax
	movl	28(%esp),%ebx
	movl	4(%esi),%edi

	# IP
	roll	$4,%eax
	movl	%eax,%esi
	xorl	%edi,%eax
	andl	$0xf0f0f0f0,%eax
	xorl	%eax,%esi
	xorl	%eax,%edi

	roll	$20,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0xfff0000f,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$14,%eax
	movl	%eax,%edi
	xorl	%esi,%eax
	andl	$0x33333333,%eax
	xorl	%eax,%edi
	xorl	%eax,%esi

	roll	$22,%esi
	movl	%esi,%eax
	xorl	%edi,%esi
	andl	$0x03fc03fc,%esi
	xorl	%esi,%eax
	xorl	%esi,%edi

	roll	$9,%eax
	movl	%eax,%esi
	xorl	%edi,%eax
	andl	$0xaaaaaaaa,%eax
	xorl	%eax,%esi
	xorl	%eax,%edi

	roll	$1,%edi
	call	L000pic_point
L000pic_point:
	popl	%ebp
	leal	Ldes_sptrans-L000pic_point(%ebp),%ebp
	movl	24(%esp),%ecx
	cmpl	$0,%ebx
	je	L001decrypt
	call	__x86_DES_encrypt
	jmp	L002done
L001decrypt:
	call	__x86_DES_decrypt
L002done:

	# FP
	movl	20(%esp),%edx
	rorl	$1,%esi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0xaaaaaaaa,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$23,%eax
	movl	%eax,%edi
	xorl	%esi,%eax
	andl	$0x03fc03fc,%eax
	xorl	%eax,%edi
	xorl	%eax,%esi

	roll	$10,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0x33333333,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$18,%esi
	movl	%esi,%edi
	xorl	%eax,%esi
	andl	$0xfff0000f,%esi
	xorl	%esi,%edi
	xorl	%esi,%eax

	roll	$12,%edi
	movl	%edi,%esi
	xorl	%eax,%edi
	andl	$0xf0f0f0f0,%edi
	xorl	%edi,%esi
	xorl	%edi,%eax

	rorl	$4,%eax
	movl	%eax,(%edx)
	movl	%esi,4(%edx)
	popl	%ebp
	popl	%ebx
	popl	%edi
	popl	%esi
	ret
.globl	_DES_encrypt2
.type	_DES_encrypt2,@function
.align	4
_DES_encrypt2:
L_DES_encrypt2_begin:
	pushl	%esi
	pushl	%edi

	# Load the 2 words
	movl	12(%esp),%eax
	xorl	%ecx,%ecx
	pushl	%ebx
	pushl	%ebp
	movl	(%eax),%esi
	movl	28(%esp),%ebx
	roll	$3,%esi
	movl	4(%eax),%edi
	roll	$3,%edi
	call	L003pic_point
L003pic_point:
	popl	%ebp
	leal	Ldes_sptrans-L003pic_point(%ebp),%ebp
	movl	24(%esp),%ecx
	cmpl	$0,%ebx
	je	L004decrypt
	call	__x86_DES_encrypt
	jmp	L005done
L004decrypt:
	call	__x86_DES_decrypt
L005done:

	# Fixup
	rorl	$3,%edi
	movl	20(%esp),%eax
	rorl	$3,%esi
	movl	%edi,(%eax)
	movl	%esi,4(%eax)
	popl	%ebp
	popl	%ebx
	popl	%edi
	popl	%esi
	ret
.globl	_DES_encrypt3
.type	_DES_encrypt3,@function
.align	4
_DES_encrypt3:
L_DES_encrypt3_begin:
	pushl	%ebx
	movl	8(%esp),%ebx
	pushl	%ebp
	pushl	%esi
	pushl	%edi

	# Load the data words
	movl	(%ebx),%edi
	movl	4(%ebx),%esi
	subl	$12,%esp

	# IP
	roll	$4,%edi
	movl	%edi,%edx
	xorl	%esi,%edi
	andl	$0xf0f0f0f0,%edi
	xorl	%edi,%edx
	xorl	%edi,%esi

	roll	$20,%esi
	movl	%esi,%edi
	xorl	%edx,%esi
	andl	$0xfff0000f,%esi
	xorl	%esi,%edi
	xorl	%esi,%edx

	roll	$14,%edi
	movl	%edi,%esi
	xorl	%edx,%edi
	andl	$0x33333333,%edi
	xorl	%edi,%esi
	xorl	%edi,%edx

	roll	$22,%edx
	movl	%edx,%edi
	xorl	%esi,%edx
	andl	$0x03fc03fc,%edx
	xorl	%edx,%edi
	xorl	%edx,%esi

	roll	$9,%edi
	movl	%edi,%edx
	xorl	%esi,%edi
	andl	$0xaaaaaaaa,%edi
	xorl	%edi,%edx
	xorl	%edi,%esi

	rorl	$3,%edx
	rorl	$2,%esi
	movl	%esi,4(%ebx)
	movl	36(%esp),%eax
	movl	%edx,(%ebx)
	movl	40(%esp),%edi
	movl	44(%esp),%esi
	movl	$1,8(%esp)
	movl	%eax,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	movl	$0,8(%esp)
	movl	%edi,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	movl	$1,8(%esp)
	movl	%esi,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	addl	$12,%esp
	movl	(%ebx),%edi
	movl	4(%ebx),%esi

	# FP
	roll	$2,%esi
	roll	$3,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0xaaaaaaaa,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$23,%eax
	movl	%eax,%edi
	xorl	%esi,%eax
	andl	$0x03fc03fc,%eax
	xorl	%eax,%edi
	xorl	%eax,%esi

	roll	$10,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0x33333333,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$18,%esi
	movl	%esi,%edi
	xorl	%eax,%esi
	andl	$0xfff0000f,%esi
	xorl	%esi,%edi
	xorl	%esi,%eax

	roll	$12,%edi
	movl	%edi,%esi
	xorl	%eax,%edi
	andl	$0xf0f0f0f0,%edi
	xorl	%edi,%esi
	xorl	%edi,%eax

	rorl	$4,%eax
	movl	%eax,(%ebx)
	movl	%esi,4(%ebx)
	popl	%edi
	popl	%esi
	popl	%ebp
	popl	%ebx
	ret
.globl	_DES_decrypt3
.type	_DES_decrypt3,@function
.align	4
_DES_decrypt3:
L_DES_decrypt3_begin:
	pushl	%ebx
	movl	8(%esp),%ebx
	pushl	%ebp
	pushl	%esi
	pushl	%edi

	# Load the data words
	movl	(%ebx),%edi
	movl	4(%ebx),%esi
	subl	$12,%esp

	# IP
	roll	$4,%edi
	movl	%edi,%edx
	xorl	%esi,%edi
	andl	$0xf0f0f0f0,%edi
	xorl	%edi,%edx
	xorl	%edi,%esi

	roll	$20,%esi
	movl	%esi,%edi
	xorl	%edx,%esi
	andl	$0xfff0000f,%esi
	xorl	%esi,%edi
	xorl	%esi,%edx

	roll	$14,%edi
	movl	%edi,%esi
	xorl	%edx,%edi
	andl	$0x33333333,%edi
	xorl	%edi,%esi
	xorl	%edi,%edx

	roll	$22,%edx
	movl	%edx,%edi
	xorl	%esi,%edx
	andl	$0x03fc03fc,%edx
	xorl	%edx,%edi
	xorl	%edx,%esi

	roll	$9,%edi
	movl	%edi,%edx
	xorl	%esi,%edi
	andl	$0xaaaaaaaa,%edi
	xorl	%edi,%edx
	xorl	%edi,%esi

	rorl	$3,%edx
	rorl	$2,%esi
	movl	%esi,4(%ebx)
	movl	36(%esp),%esi
	movl	%edx,(%ebx)
	movl	40(%esp),%edi
	movl	44(%esp),%eax
	movl	$0,8(%esp)
	movl	%eax,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	movl	$1,8(%esp)
	movl	%edi,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	movl	$0,8(%esp)
	movl	%esi,4(%esp)
	movl	%ebx,(%esp)
	call	L_DES_encrypt2_begin
	addl	$12,%esp
	movl	(%ebx),%edi
	movl	4(%ebx),%esi

	# FP
	roll	$2,%esi
	roll	$3,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0xaaaaaaaa,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$23,%eax
	movl	%eax,%edi
	xorl	%esi,%eax
	andl	$0x03fc03fc,%eax
	xorl	%eax,%edi
	xorl	%eax,%esi

	roll	$10,%edi
	movl	%edi,%eax
	xorl	%esi,%edi
	andl	$0x33333333,%edi
	xorl	%edi,%eax
	xorl	%edi,%esi

	roll	$18,%esi
	movl	%esi,%edi
	xorl	%eax,%esi
	andl	$0xfff0000f,%esi
	xorl	%esi,%edi
	xorl	%esi,%eax

	roll	$12,%edi
	movl	%edi,%esi
	xorl	%eax,%edi
	andl	$0xf0f0f0f0,%edi
	xorl	%edi,%esi
	xorl	%edi,%eax

	rorl	$4,%eax
	movl	%eax,(%ebx)
	movl	%esi,4(%ebx)
	popl	%edi
	popl	%esi
	popl	%ebp
	popl	%ebx
	ret
.globl	_DES_ncbc_encrypt
.type	_DES_ncbc_encrypt,@function
.align	4
_DES_ncbc_encrypt:
L_DES_ncbc_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 5
	pushl	%ecx
	# get and push parameter 3
	movl	52(%esp),%eax
	pushl	%eax
	pushl	%ebx
	cmpl	$0,%ecx
	jz	L006decrypt
	andl	$4294967288,%ebp
	movl	12(%esp),%eax
	movl	16(%esp),%ebx
	jz	L007encrypt_finish
L008encrypt_loop:
	movl	(%esi),%ecx
	movl	4(%esi),%edx
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	movl	%eax,12(%esp)
	movl	%ebx,16(%esp)
	call	L_DES_encrypt1_begin
	movl	12(%esp),%eax
	movl	16(%esp),%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L008encrypt_loop
L007encrypt_finish:
	movl	56(%esp),%ebp
	andl	$7,%ebp
	jz	L009finish
	call	L010PIC_point
L010PIC_point:
	popl	%edx
	leal	L011cbc_enc_jmp_table-L010PIC_point(%edx),%ecx
	movl	(%ecx,%ebp,4),%ebp
	addl	%edx,%ebp
	xorl	%ecx,%ecx
	xorl	%edx,%edx
	jmp	*%ebp
L012ej7:
	movb	6(%esi),%dh
	shll	$8,%edx
L013ej6:
	movb	5(%esi),%dh
L014ej5:
	movb	4(%esi),%dl
L015ej4:
	movl	(%esi),%ecx
	jmp	L016ejend
L017ej3:
	movb	2(%esi),%ch
	shll	$8,%ecx
L018ej2:
	movb	1(%esi),%ch
L019ej1:
	movb	(%esi),%cl
L016ejend:
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	movl	%eax,12(%esp)
	movl	%ebx,16(%esp)
	call	L_DES_encrypt1_begin
	movl	12(%esp),%eax
	movl	16(%esp),%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	jmp	L009finish
L006decrypt:
	andl	$4294967288,%ebp
	movl	20(%esp),%eax
	movl	24(%esp),%ebx
	jz	L020decrypt_finish
L021decrypt_loop:
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%eax,12(%esp)
	movl	%ebx,16(%esp)
	call	L_DES_encrypt1_begin
	movl	12(%esp),%eax
	movl	16(%esp),%ebx
	movl	20(%esp),%ecx
	movl	24(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%ecx,(%edi)
	movl	%edx,4(%edi)
	movl	%eax,20(%esp)
	movl	%ebx,24(%esp)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L021decrypt_loop
L020decrypt_finish:
	movl	56(%esp),%ebp
	andl	$7,%ebp
	jz	L009finish
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%eax,12(%esp)
	movl	%ebx,16(%esp)
	call	L_DES_encrypt1_begin
	movl	12(%esp),%eax
	movl	16(%esp),%ebx
	movl	20(%esp),%ecx
	movl	24(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
L022dj7:
	rorl	$16,%edx
	movb	%dl,6(%edi)
	shrl	$16,%edx
L023dj6:
	movb	%dh,5(%edi)
L024dj5:
	movb	%dl,4(%edi)
L025dj4:
	movl	%ecx,(%edi)
	jmp	L026djend
L027dj3:
	rorl	$16,%ecx
	movb	%cl,2(%edi)
	shll	$16,%ecx
L028dj2:
	movb	%ch,1(%esi)
L029dj1:
	movb	%cl,(%esi)
L026djend:
	jmp	L009finish
L009finish:
	movl	64(%esp),%ecx
	addl	$28,%esp
	movl	%eax,(%ecx)
	movl	%ebx,4(%ecx)
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.align	6,0x90
L011cbc_enc_jmp_table:
.long	0
.long	L019ej1-L010PIC_point
.long	L018ej2-L010PIC_point
.long	L017ej3-L010PIC_point
.long	L015ej4-L010PIC_point
.long	L014ej5-L010PIC_point
.long	L013ej6-L010PIC_point
.long	L012ej7-L010PIC_point
.align	6,0x90
.globl	_DES_ede3_cbc_encrypt
.type	_DES_ede3_cbc_encrypt,@function
.align	4
_DES_ede3_cbc_encrypt:
L_DES_ede3_cbc_encrypt_begin:

	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	movl	28(%esp),%ebp
	# getting iv ptr from parameter 6
	movl	44(%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 7
	movl	64(%esp),%ecx
	# get and push parameter 5
	movl	56(%esp),%eax
	pushl	%eax
	# get and push parameter 4
	movl	56(%esp),%eax
	pushl	%eax
	# get and push parameter 3
	movl	56(%esp),%eax
	pushl	%eax
	pushl	%ebx
	cmpl	$0,%ecx
	jz	L030decrypt
	andl	$4294967288,%ebp
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	jz	L031encrypt_finish
L032encrypt_loop:
	movl	(%esi),%ecx
	movl	4(%esi),%edx
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	movl	%eax,16(%esp)
	movl	%ebx,20(%esp)
	call	L_DES_encrypt3_begin
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L032encrypt_loop
L031encrypt_finish:
	movl	60(%esp),%ebp
	andl	$7,%ebp
	jz	L033finish
	call	L034PIC_point
L034PIC_point:
	popl	%edx
	leal	L035cbc_enc_jmp_table-L034PIC_point(%edx),%ecx
	movl	(%ecx,%ebp,4),%ebp
	addl	%edx,%ebp
	xorl	%ecx,%ecx
	xorl	%edx,%edx
	jmp	*%ebp
L036ej7:
	movb	6(%esi),%dh
	shll	$8,%edx
L037ej6:
	movb	5(%esi),%dh
L038ej5:
	movb	4(%esi),%dl
L039ej4:
	movl	(%esi),%ecx
	jmp	L040ejend
L041ej3:
	movb	2(%esi),%ch
	shll	$8,%ecx
L042ej2:
	movb	1(%esi),%ch
L043ej1:
	movb	(%esi),%cl
L040ejend:
	xorl	%ecx,%eax
	xorl	%edx,%ebx
	movl	%eax,16(%esp)
	movl	%ebx,20(%esp)
	call	L_DES_encrypt3_begin
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	movl	%eax,(%edi)
	movl	%ebx,4(%edi)
	jmp	L033finish
L030decrypt:
	andl	$4294967288,%ebp
	movl	24(%esp),%eax
	movl	28(%esp),%ebx
	jz	L044decrypt_finish
L045decrypt_loop:
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%eax,16(%esp)
	movl	%ebx,20(%esp)
	call	L_DES_decrypt3_begin
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	movl	24(%esp),%ecx
	movl	28(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%ecx,(%edi)
	movl	%edx,4(%edi)
	movl	%eax,24(%esp)
	movl	%ebx,28(%esp)
	addl	$8,%esi
	addl	$8,%edi
	subl	$8,%ebp
	jnz	L045decrypt_loop
L044decrypt_finish:
	movl	60(%esp),%ebp
	andl	$7,%ebp
	jz	L033finish
	movl	(%esi),%eax
	movl	4(%esi),%ebx
	movl	%eax,16(%esp)
	movl	%ebx,20(%esp)
	call	L_DES_decrypt3_begin
	movl	16(%esp),%eax
	movl	20(%esp),%ebx
	movl	24(%esp),%ecx
	movl	28(%esp),%edx
	xorl	%eax,%ecx
	xorl	%ebx,%edx
	movl	(%esi),%eax
	movl	4(%esi),%ebx
L046dj7:
	rorl	$16,%edx
	movb	%dl,6(%edi)
	shrl	$16,%edx
L047dj6:
	movb	%dh,5(%edi)
L048dj5:
	movb	%dl,4(%edi)
L049dj4:
	movl	%ecx,(%edi)
	jmp	L050djend
L051dj3:
	rorl	$16,%ecx
	movb	%cl,2(%edi)
	shll	$16,%ecx
L052dj2:
	movb	%ch,1(%esi)
L053dj1:
	movb	%cl,(%esi)
L050djend:
	jmp	L033finish
L033finish:
	movl	76(%esp),%ecx
	addl	$32,%esp
	movl	%eax,(%ecx)
	movl	%ebx,4(%ecx)
	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret
.align	6,0x90
L035cbc_enc_jmp_table:
.long	0
.long	L043ej1-L034PIC_point
.long	L042ej2-L034PIC_point
.long	L041ej3-L034PIC_point
.long	L039ej4-L034PIC_point
.long	L038ej5-L034PIC_point
.long	L037ej6-L034PIC_point
.long	L036ej7-L034PIC_point
.align	6,0x90
.align	6,0x90
_DES_SPtrans:
Ldes_sptrans:
.long	34080768,524288,33554434,34080770
.long	33554432,526338,524290,33554434
.long	526338,34080768,34078720,2050
.long	33556482,33554432,0,524290
.long	524288,2,33556480,526336
.long	34080770,34078720,2050,33556480
.long	2,2048,526336,34078722
.long	2048,33556482,34078722,0
.long	0,34080770,33556480,524290
.long	34080768,524288,2050,33556480
.long	34078722,2048,526336,33554434
.long	526338,2,33554434,34078720
.long	34080770,526336,34078720,33556482
.long	33554432,2050,524290,0
.long	524288,33554432,33556482,34080768
.long	2,34078722,2048,526338
.long	1074823184,0,1081344,1074790400
.long	1073741840,32784,1073774592,1081344
.long	32768,1074790416,16,1073774592
.long	1048592,1074823168,1074790400,16
.long	1048576,1073774608,1074790416,32768
.long	1081360,1073741824,0,1048592
.long	1073774608,1081360,1074823168,1073741840
.long	1073741824,1048576,32784,1074823184
.long	1048592,1074823168,1073774592,1081360
.long	1074823184,1048592,1073741840,0
.long	1073741824,32784,1048576,1074790416
.long	32768,1073741824,1081360,1073774608
.long	1074823168,32768,0,1073741840
.long	16,1074823184,1081344,1074790400
.long	1074790416,1048576,32784,1073774592
.long	1073774608,16,1074790400,1081344
.long	67108865,67371264,256,67109121
.long	262145,67108864,67109121,262400
.long	67109120,262144,67371008,1
.long	67371265,257,1,67371009
.long	0,262145,67371264,256
.long	257,67371265,262144,67108865
.long	67371009,67109120,262401,67371008
.long	262400,0,67108864,262401
.long	67371264,256,1,262144
.long	257,262145,67371008,67109121
.long	0,67371264,262400,67371009
.long	262145,67108864,67371265,1
.long	262401,67108865,67108864,67371265
.long	262144,67109120,67109121,262400
.long	67109120,0,67371009,257
.long	67108865,262401,256,67371008
.long	4198408,268439552,8,272633864
.long	0,272629760,268439560,4194312
.long	272633856,268435464,268435456,4104
.long	268435464,4198408,4194304,268435456
.long	272629768,4198400,4096,8
.long	4198400,268439560,272629760,4096
.long	4104,0,4194312,272633856
.long	268439552,272629768,272633864,4194304
.long	272629768,4104,4194304,268435464
.long	4198400,268439552,8,272629760
.long	268439560,0,4096,4194312
.long	0,272629768,272633856,4096
.long	268435456,272633864,4198408,4194304
.long	272633864,8,268439552,4198408
.long	4194312,4198400,272629760,268439560
.long	4104,268435456,268435464,272633856
.long	134217728,65536,1024,134284320
.long	134283296,134218752,66592,134283264
.long	65536,32,134217760,66560
.long	134218784,134283296,134284288,0
.long	66560,134217728,65568,1056
.long	134218752,66592,0,134217760
.long	32,134218784,134284320,65568
.long	134283264,1024,1056,134284288
.long	134284288,134218784,65568,134283264
.long	65536,32,134217760,134218752
.long	134217728,66560,134284320,0
.long	66592,134217728,1024,65568
.long	134218784,1024,0,134284320
.long	134283296,134284288,1056,65536
.long	66560,134283296,134218752,1056
.long	32,66592,134283264,134217760
.long	2147483712,2097216,0,2149588992
.long	2097216,8192,2147491904,2097152
.long	8256,2149589056,2105344,2147483648
.long	2147491840,2147483712,2149580800,2105408
.long	2097152,2147491904,2149580864,0
.long	8192,64,2149588992,2149580864
.long	2149589056,2149580800,2147483648,8256
.long	64,2105344,2105408,2147491840
.long	8256,2147483648,2147491840,2105408
.long	2149588992,2097216,0,2147491840
.long	2147483648,8192,2149580864,2097152
.long	2097216,2149589056,2105344,64
.long	2149589056,2105344,2097152,2147491904
.long	2147483712,2149580800,2105408,0
.long	8192,2147483712,2147491904,2149588992
.long	2149580800,8256,64,2149580864
.long	16384,512,16777728,16777220
.long	16794116,16388,16896,0
.long	16777216,16777732,516,16793600
.long	4,16794112,16793600,516
.long	16777732,16384,16388,16794116
.long	0,16777728,16777220,16896
.long	16793604,16900,16794112,4
.long	16900,16793604,512,16777216
.long	16900,16793600,16793604,516
.long	16384,512,16777216,16793604
.long	16777732,16900,16896,0
.long	512,16777220,4,16777728
.long	0,16777732,16777728,16896
.long	516,16384,16794116,16777216
.long	16794112,4,16388,16794116
.long	16777220,16794112,16793600,16388
.long	545259648,545390592,131200,0
.long	537001984,8388736,545259520,545390720
.long	128,536870912,8519680,131200
.long	8519808,537002112,536871040,545259520
.long	131072,8519808,8388736,537001984
.long	545390720,536871040,0,8519680
.long	536870912,8388608,537002112,545259648
.long	8388608,131072,545390592,128
.long	8388608,131072,536871040,545390720
.long	131200,536870912,0,8519680
.long	545259648,537002112,537001984,8388736
.long	545390592,128,8388736,537001984
.long	545390720,8388608,545259520,536871040
.long	8519680,131200,537002112,545259520
.long	128,545390592,8519808,0
.long	536870912,545259648,131072,8519808
