⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des_enc.m4

📁 OpenSSL 0.9.8k 最新版OpenSSL
💻 M4
📖 第 1 页 / 共 4 页
字号:
$7.0:	call	.+8	sll	$2, 2, $6	add	%o7,$7.jmp.table-$7.0,$5	add	$5, $6, $5	ld	[$5], $5	jmp	%o7+$5	nop$7.7:	srl	$3, 16, $5	and	$5, 0xff, $5	stub	$5, [$1+6]$7.6:	srl	$3, 8, $5	and	$5, 0xff, $5	stub	$5, [$1+5]$7.5:	and	$3, 0xff, $5	stub	$5, [$1+4]$7.4:	srl	$4, 24, $5	stub	$5, [$1+3]$7.3:	srl	$4, 16, $5	and	$5, 0xff, $5	stub	$5, [$1+2]$7.2:	srl	$4, 8, $5	and	$5, 0xff, $5	stub	$5, [$1+1]$7.1:	and	$4, 0xff, $5	ba	$8	stub	$5, [$1]	.align 4$7.jmp.table:	.word	0	.word	$7.1-$7.0	.word	$7.2-$7.0	.word	$7.3-$7.0	.word	$7.4-$7.0	.word	$7.5-$7.0	.word	$7.6-$7.0	.word	$7.7-$7.0})define(testvalue,{1})define(register_init, {! For test purposes:	sethi	%hi(testvalue), local0	or	local0, %lo(testvalue), local0	ifelse($1,{},{}, {mov	local0, $1})	ifelse($2,{},{}, {mov	local0, $2})	ifelse($3,{},{}, {mov	local0, $3})	ifelse($4,{},{}, {mov	local0, $4})	ifelse($5,{},{}, {mov	local0, $5})	ifelse($6,{},{}, {mov	local0, $6})	ifelse($7,{},{}, {mov	local0, $7})	ifelse($8,{},{}, {mov	local0, $8})	mov	local0, local1	mov	local0, local2	mov	local0, local3	mov	local0, local4	mov	local0, local5	mov	local0, local7	mov	local0, local6	mov	local0, out0	mov	local0, out1	mov	local0, out2	mov	local0, out3	mov	local0, out4	mov	local0, out5	mov	local0, global1	mov	local0, global2	mov	local0, global3	mov	local0, global4	mov	local0, global5}).section	".text"	.align 32.des_enc:	! key address in3	! loads key next encryption/decryption first round from [in4]	rounds_macro(in5, out5, 1, .des_enc.1, in3, in4, retl)	.align 32.des_dec:	! implemented with out5 as first parameter to avoid	! register exchange in ede modes	! key address in4	! loads key next encryption/decryption first round from [in3]	rounds_macro(out5, in5, -1, .des_dec.1, in4, in3, retl)! void DES_encrypt1(data, ks, enc)! *******************************	.align 32	.global DES_encrypt1	.type	 DES_encrypt1,#functionDES_encrypt1:	save	%sp, FRAME, %sp	sethi	%hi(.PIC.DES_SPtrans-1f),global1	or	global1,%lo(.PIC.DES_SPtrans-1f),global11:	call	.+8	add	%o7,global1,global1	sub	global1,.PIC.DES_SPtrans-.des_and,out2	ld	[in0], in5                ! left	cmp	in2, 0                    ! enc#ifdef OPENSSL_SYSNAME_ULTRASPARC	be,pn	%icc, .encrypt.dec        ! enc/dec#else	be	.encrypt.dec#endif	ld	[in0+4], out5             ! right	! parameter 6  1/2 for include encryption/decryption	! parameter 7  1 for move in1 to in3	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3	ip_macro(in5, out5, in5, out5, in3, 0, 1, 1)	rounds_macro(in5, out5, 1, .des_encrypt1.1, in3, in4) ! in4 not used	fp_macro(in5, out5, 1)            ! 1 for store to [in0]	ret	restore.encrypt.dec:	add	in1, 120, in3             ! use last subkey for first round	! parameter 6  1/2 for include encryption/decryption	! parameter 7  1 for move in1 to in3	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3	ip_macro(in5, out5, out5, in5, in4, 2, 0, 1) ! include dec,  ks in4	fp_macro(out5, in5, 1)            ! 1 for store to [in0]	ret	restore.DES_encrypt1.end:	.size	 DES_encrypt1,.DES_encrypt1.end-DES_encrypt1! void DES_encrypt2(data, ks, enc)!*********************************	! encrypts/decrypts without initial/final permutation	.align 32	.global DES_encrypt2	.type	 DES_encrypt2,#functionDES_encrypt2:	save	%sp, FRAME, %sp	sethi	%hi(.PIC.DES_SPtrans-1f),global1	or	global1,%lo(.PIC.DES_SPtrans-1f),global11:	call	.+8	add	%o7,global1,global1	sub	global1,.PIC.DES_SPtrans-.des_and,out2	! Set sbox address 1 to 6 and rotate halfs 3 left	! Errors caught by destest? Yes. Still? *NO*	!sethi	%hi(DES_SPtrans), global1 ! address sbox 1	!or	global1, %lo(DES_SPtrans), global1  ! sbox 1	add	global1, 256, global2     ! sbox 2	add	global1, 512, global3     ! sbox 3	ld	[in0], out5               ! right	add	global1, 768, global4     ! sbox 4	add	global1, 1024, global5    ! sbox 5	ld	[in0+4], in5              ! left	add	global1, 1280, local6     ! sbox 6	add	global1, 1792, out3       ! sbox 8	! rotate	sll	in5, 3, local5	mov	in1, in3                  ! key address to in3	sll	out5, 3, local7	srl	in5, 29, in5	srl	out5, 29, out5	add	in5, local5, in5	add	out5, local7, out5	cmp	in2, 0	! we use our own stackframe#ifdef OPENSSL_SYSNAME_ULTRASPARC	be,pn	%icc, .encrypt2.dec       ! decryption#else	be	.encrypt2.dec#endif	STPTR	in0, [%sp+BIAS+ARG0+0*ARGSZ]	ld	[in3], out0               ! key 7531 first round	mov	LOOPS, out4               ! loop counter	ld	[in3+4], out1             ! key 8642 first round	sethi	%hi(0x0000FC00), local5	call .des_enc	mov	in3, in4	! rotate	sll	in5, 29, in0	srl	in5, 3, in5	sll	out5, 29, in1	add	in5, in0, in5	srl	out5, 3, out5	LDPTR	[%sp+BIAS+ARG0+0*ARGSZ], in0	add	out5, in1, out5	st	in5, [in0]	st	out5, [in0+4]	ret	restore.encrypt2.dec:	add in3, 120, in4	ld	[in4], out0               ! key 7531 first round	mov	LOOPS, out4               ! loop counter	ld	[in4+4], out1             ! key 8642 first round	sethi	%hi(0x0000FC00), local5	mov	in5, local1               ! left expected in out5	mov	out5, in5	call .des_dec	mov	local1, out5.encrypt2.finish:	! rotate	sll	in5, 29, in0	srl	in5, 3, in5	sll	out5, 29, in1	add	in5, in0, in5	srl	out5, 3, out5	LDPTR	[%sp+BIAS+ARG0+0*ARGSZ], in0	add	out5, in1, out5	st	out5, [in0]	st	in5, [in0+4]	ret	restore.DES_encrypt2.end:	.size	 DES_encrypt2, .DES_encrypt2.end-DES_encrypt2! void DES_encrypt3(data, ks1, ks2, ks3)! **************************************	.align 32	.global DES_encrypt3	.type	 DES_encrypt3,#functionDES_encrypt3:	save	%sp, FRAME, %sp		sethi	%hi(.PIC.DES_SPtrans-1f),global1	or	global1,%lo(.PIC.DES_SPtrans-1f),global11:	call	.+8	add	%o7,global1,global1	sub	global1,.PIC.DES_SPtrans-.des_and,out2	ld	[in0], in5                ! left	add	in2, 120, in4             ! ks2	ld	[in0+4], out5             ! right	mov	in3, in2                  ! save ks3	! parameter 6  1/2 for include encryption/decryption	! parameter 7  1 for mov in1 to in3	! parameter 8  1 for mov in3 to in4	! parameter 9  1 for load ks3 and ks2 to in4 and in3	ip_macro(in5, out5, in5, out5, in3, 1, 1, 0, 0)	call	.des_dec	mov	in2, in3                  ! preload ks3	call	.des_enc	nop	fp_macro(in5, out5, 1)	ret	restore.DES_encrypt3.end:	.size	 DES_encrypt3,.DES_encrypt3.end-DES_encrypt3! void DES_decrypt3(data, ks1, ks2, ks3)! **************************************	.align 32	.global DES_decrypt3	.type	 DES_decrypt3,#functionDES_decrypt3:	save	%sp, FRAME, %sp		sethi	%hi(.PIC.DES_SPtrans-1f),global1	or	global1,%lo(.PIC.DES_SPtrans-1f),global11:	call	.+8	add	%o7,global1,global1	sub	global1,.PIC.DES_SPtrans-.des_and,out2	ld	[in0], in5                ! left	add	in3, 120, in4             ! ks3	ld	[in0+4], out5             ! right	mov	in2, in3                  ! ks2	! parameter 6  1/2 for include encryption/decryption	! parameter 7  1 for mov in1 to in3	! parameter 8  1 for mov in3 to in4	! parameter 9  1 for load ks3 and ks2 to in4 and in3	ip_macro(in5, out5, out5, in5, in4, 2, 0, 0, 0)	call	.des_enc	add	in1, 120, in4             ! preload ks1	call	.des_dec	nop	fp_macro(out5, in5, 1)	ret	restore.DES_decrypt3.end:	.size	 DES_decrypt3,.DES_decrypt3.end-DES_decrypt3! void DES_ncbc_encrypt(input, output, length, schedule, ivec, enc)! *****************************************************************	.align 32	.global DES_ncbc_encrypt	.type	 DES_ncbc_encrypt,#functionDES_ncbc_encrypt:	save	%sp, FRAME, %sp		define({INPUT},  { [%sp+BIAS+ARG0+0*ARGSZ] })	define({OUTPUT}, { [%sp+BIAS+ARG0+1*ARGSZ] })	define({IVEC},   { [%sp+BIAS+ARG0+4*ARGSZ] })	sethi	%hi(.PIC.DES_SPtrans-1f),global1	or	global1,%lo(.PIC.DES_SPtrans-1f),global11:	call	.+8	add	%o7,global1,global1	sub	global1,.PIC.DES_SPtrans-.des_and,out2	cmp	in5, 0                    ! enc   #ifdef OPENSSL_SYSNAME_ULTRASPARC	be,pn	%icc, .ncbc.dec#else	be	.ncbc.dec#endif	STPTR	in4, IVEC	! addr  left  right  temp  label	load_little_endian(in4, in5, out5, local3, .LLE1)  ! iv	addcc	in2, -8, in2              ! bytes missing when first block done#ifdef OPENSSL_SYSNAME_ULTRASPARC	bl,pn	%icc, .ncbc.enc.seven.or.less#else	bl	.ncbc.enc.seven.or.less#endif	mov	in3, in4                  ! schedule.ncbc.enc.next.block:	load_little_endian(in0, out4, global4, local3, .LLE2)  ! block.ncbc.enc.next.block_1:	xor	in5, out4, in5            ! iv xor	xor	out5, global4, out5       ! iv xor	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3	ip_macro(in5, out5, in5, out5, in3, 0, 0, 2).ncbc.enc.next.block_2:!//	call .des_enc                     ! compares in2 to 8!	rounds inlined for alignment purposes	add	global1, 768, global4     ! address sbox 4 since register used below	rounds_macro(in5, out5, 1, .ncbc.enc.1, in3, in4) ! include encryption  ks in3#ifdef OPENSSL_SYSNAME_ULTRASPARC	bl,pn	%icc, .ncbc.enc.next.block_fp#else	bl	.ncbc.enc.next.block_fp#endif	add	in0, 8, in0               ! input address	! If 8 or more bytes are to be encrypted after this block,	! we combine final permutation for this block with initial	! permutation for next block. Load next block:	load_little_endian(in0, global3, global4, local5, .LLE12)	!  parameter 1   original left	!  parameter 2   original right	!  parameter 3   left ip	!  parameter 4   right ip	!  parameter 5   1: load ks1/ks2 to in3/in4, add 120 to in4	!                2: mov in4 to in3	!	! also adds -8 to length in2 and loads loop counter to out4	fp_ip_macro(out0, out1, global3, global4, 2)	store_little_endian(in1, out0, out1, local3, .SLE10)  ! block	ld	[in3], out0               ! key 7531 first round next block	mov 	in5, local1	xor	global3, out5, in5        ! iv xor next block	ld	[in3+4], out1             ! key 8642	add	global1, 512, global3     ! address sbox 3 since register used	xor	global4, local1, out5     ! iv xor next block	ba	.ncbc.enc.next.block_2	add	in1, 8, in1               ! output adress.ncbc.enc.next.block_fp:	fp_macro(in5, out5)	store_little_endian(in1, in5, out5, local3, .SLE1)  ! block	addcc   in2, -8, in2              ! bytes missing when next block done#ifdef OPENSSL_SYSNAME_ULTRASPARC	bpos,pt	%icc, .ncbc.enc.next.block  ! also jumps if 0#else	bpos	.ncbc.enc.next.block#endif	add	in1, 8, in1.ncbc.enc.seven.or.less:	cmp	in2, -8#ifdef OPENSSL_SYSNAME_ULTRASPARC	ble,pt	%icc, .ncbc.enc.finish#else	ble	.ncbc.enc.finish#endif	nop	add	in2, 8, local1            ! bytes to load	! addr, length, dest left, dest right, temp, temp2, label, ret label	load_n_bytes(in0, local1, global4, out4, local2, local3, .LNB1, .ncbc.enc.next.block_1)	! Loads 1 to 7 bytes little endian to global4, out4.ncbc.enc.finish:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -