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

📄 rsasparc.s

📁 简单的RSA加密范例
💻 S
字号:
/*
	RSASPARC.S - processor-specific C library routines for RSAEURO

        Copyright (c) J.S.A.Kapp 1994 - 1996.

	RSAEURO - RSA Library compatible with RSAREF 2.0.

	All functions prototypes are the Same as for RSAREF.
	To aid compatiblity the source and the files follow the
	same naming comventions that RSAREF uses.  This should aid
	direct importing to your applications.

	This library is legal everywhere outside the US.  And should
	NOT be imported to the US and used there.

	Secure Standard Library Routines, Sparc assembler versions.
	These are only applicable if NN_DIGIT equal to a 32-bit word.

	Requires the 'as' assembler to assemble.  The 'as' assembler
	comes with GNU gcc and is included with 'cc' that comes
	with UNIX boxes.

	Revision history
		0.90 First revision this version should work with most SPARC
		processors.
		Functions added:
			_R_memset, _R_memcpy, _R_memcmp,
			_NN_Digits, _NN_Assign,
			_NN_Add, _NN_Decode,
			_NN_Encode, _NN_AssignZero,
			_NN_Zero, _NN_Cmp.


*/
	/* Math Routines */

	.align 4
	.global _NN_Decode
	.proc 1
_NN_Decode:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov 0,%i4
	b dec1
	add %i3,-1,%i3
dec5:
	bl dec2
	mov 0,%g3
	ldub [%i2+%i3],%g2
dec3:
	sll %g2,%g3,%g2
	or %i5,%g2,%i5
	addcc %i3,-1,%i3
	bneg dec2
	add %g3,8,%g3
	cmp %g3,31
	bleu,a dec3
	ldub [%i2+%i3],%g2
dec2:
	sll %i4,2,%g2
	st %i5,[%i0+%g2]
	add %i4,1,%i4
dec1:
	cmp %i4,%i1
	bgeu dec4
	cmp %i3,0
	bge dec5
	mov 0,%i5
	b dec6
	cmp %i4,%i1
dec7:
	st %g0,[%i0+%g2]
	add %i4,1,%i4
dec4:
	cmp %i4,%i1
dec6:
	blu dec7
	sll %i4,2,%g2
	ret
	restore

	.align 4
	.global _NN_Encode
	.proc 1
_NN_Encode:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov 0,%i4
	b enc1
	add %i1,-1,%i1
enc5:
	ld [%i2+%g2],%i5
	cmp %i1,0
	bl enc2
	mov 0,%g3
	srl %i5,%g3,%g2
enc3:
	stb %g2,[%i0+%i1]
	addcc %i1,-1,%i1
	bneg enc2
	add %g3,8,%g3
	cmp %g3,31
	bleu enc3
	srl %i5,%g3,%g2
enc2:
	add %i4,1,%i4
enc1:
	cmp %i4,%i3
	bgeu enc4
	cmp %i1,0
	bge enc5
	sll %i4,2,%g2
enc4:
	cmp %i1,0
	bl enc6
	nop
	stb %g0,[%i0+%i1]
enc7:
	addcc %i1,-1,%i1
	bpos,a enc7
	stb %g0,[%i0+%i1]
enc6:
	ret
	restore

	.align 4
	.global _NN_AssignZero
	.proc 1
_NN_AssignZero:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i1,0
	be azr1
	nop
azr2:
	st %g0,[%i0]
	addcc %i1,-1,%i1
	bne azr2
	add %i0,4,%i0
azr1:
	ret
	restore

	.align 4
	.global _NN_Cmp
	.proc 1
_NN_Cmp:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i2,0
ncmp4:
	be ncmp1
	add %i2,-1,%i2
	sll %i2,2,%g2
	ld [%i0+%g2],%g3
	ld [%i1+%g2],%g2
	cmp %g3,%g2
	bleu ncmp2
	sll %i2,2,%g2
	b ncmp3
	mov 1,%i0
ncmp2:
	ld [%i0+%g2],%g3
	ld [%i1+%g2],%g2
	cmp %g3,%g2
	bgeu ncmp4
	cmp %i2,0
	b ncmp3
	mov -1,%i0
ncmp1:
	mov 0,%i0
ncmp3:
	ret
	restore

	.align 4
	.global _NN_Zero
	.proc 1
_NN_Zero:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i1,0
	be,a nzer1
	mov 1,%i0
	ld [%i0],%g2
nzer3:
	cmp %g2,0
	be nzer2
	add %i0,4,%i0
	b nzer1
	mov 0,%i0
nzer2:
	addcc %i1,-1,%i1
	bne,a nzer3
	ld [%i0],%g2
	mov 1,%i0
nzer1:
	ret
	restore

	.align 4
	.global _NN_Assign
	.proc 1
_NN_Assign:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i2,0
	be nass1
	nop
nass2:
	ld [%i1],%g2
	st %g2,[%i0]
	add %i1,4,%i1
	addcc %i2,-1,%i2
	bne nass2
	add %i0,4,%i0
nass1:
	ret
	restore

	.align 4
	.global _NN_Digits
	.proc 1
_NN_Digits:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov %i0,%g3
	orcc %i1,%g0,%i0
	be ndig1
	nop
	add %i0,-1,%i0
	sll %i0,2,%g2
ndig2:
	ld [%g3+%g2],%g2
	cmp %g2,0
	bne,a ndig1
	add %i0,1,%i0
	add %i0,-1,%i0
	cmp %i0,-1
	bne ndig2
	sll %i0,2,%g2
	add %i0,1,%i0
ndig1:
	ret
	restore

	.align 4
	.global _NN_Add
	.proc 1
_NN_Add:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov %i0,%i4
	cmp %i3,0
	be nadd1
	mov 0,%i0
nadd4:
	ld [%i1],%g2
	add %i0,%g2,%g3
	cmp %g3,%i0
	bgeu nadd2
	add %i1,4,%i1
	ld [%i2],%g3
	b nadd3
	add %i2,4,%i2
nadd2:
	ld [%i2],%g2
	add %g3,%g2,%g3
	add %i2,4,%i2
	cmp %g3,%g2
	addx %g0,0,%i0
nadd3:
	st %g3,[%i4]
	addcc %i3,-1,%i3
	bne nadd4
	add %i4,4,%i4
nadd1:
	ret
	restore


	/* R_STDLIB Routines */

	.align 4
	.global _R_memset
	.proc 1

_R_memset:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i2,0
	be set1
	nop
set2:
	stb %i1,[%i0]
	addcc %i2,-1,%i2
	bne set2
	add %i0,1,%i0
set1:
	ret
	restore

	.align 4
	.global _R_memcpy
	.proc 1

_R_memcpy:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i2,0
	be cpy1
	nop
cpy2:
	ldub [%i1],%g2
	stb %g2,[%i0]
	add %i1,1,%i1
	addcc %i2,-1,%i2
	bne cpy2
	add %i0,1,%i0
cpy1:
	ret
	restore

	.align 4
	.global _R_memcmp
	.proc 1

_R_memcmp:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	cmp %i2,0
	be,a cmp1
	mov 0,%i0
	ldub [%i0],%g3
cmp3:
	ldub [%i1],%g2
	add %i1,1,%i1
	cmp %g3,%g2
	be cmp2
	add %i0,1,%i0
	ldub [%i0-1],%i0
	ldub [%i1-1],%g2
	b cmp1
	sub %i0,%g2,%i0
cmp2:
	addcc %i2,-1,%i2
	bne,a cmp3
	ldub [%i0],%g3
	mov 0,%i0
cmp1:
	ret
	restore

⌨️ 快捷键说明

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