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

📄 md5block.s

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 S
字号:
/* *  rfc1321 requires that I include this.  The code is new.  The constants *  all come from the rfc (hence the copyright).  We trade a table for the *  macros in rfc.  The total size is a lot less. -- presotto * *	Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All *	rights reserved. * *	License to copy and use this software is granted provided that it *	is identified as the "RSA Data Security, Inc. MD5 Message-Digest *	Algorithm" in all material mentioning or referencing this software *	or this function. * *	License is also granted to make and use derivative works provided *	that such works are identified as "derived from the RSA Data *	Security, Inc. MD5 Message-Digest Algorithm" in all material *	mentioning or referencing the derived work. * *	RSA Data Security, Inc. makes no representations concerning either *	the merchantability of this software or the suitability of this *	software forany particular purpose. It is provided "as is" *	without express or implied warranty of any kind. *	These notices must be retained in any copies of any part of this *	documentation and/or software. */	/* round 1 */	DATA	md5tab<>+( 0*4)(SB)/4,$0xd76aa478		DATA	md5tab<>+( 1*4)(SB)/4,$0xe8c7b756		DATA	md5tab<>+( 2*4)(SB)/4,$0x242070db		DATA	md5tab<>+( 3*4)(SB)/4,$0xc1bdceee		DATA	md5tab<>+( 4*4)(SB)/4,$0xf57c0faf		DATA	md5tab<>+( 5*4)(SB)/4,$0x4787c62a		DATA	md5tab<>+( 6*4)(SB)/4,$0xa8304613		DATA	md5tab<>+( 7*4)(SB)/4,$0xfd469501		DATA	md5tab<>+( 8*4)(SB)/4,$0x698098d8		DATA	md5tab<>+( 9*4)(SB)/4,$0x8b44f7af		DATA	md5tab<>+(10*4)(SB)/4,$0xffff5bb1		DATA	md5tab<>+(11*4)(SB)/4,$0x895cd7be		DATA	md5tab<>+(12*4)(SB)/4,$0x6b901122		DATA	md5tab<>+(13*4)(SB)/4,$0xfd987193		DATA	md5tab<>+(14*4)(SB)/4,$0xa679438e		DATA	md5tab<>+(15*4)(SB)/4,$0x49b40821	/* round 2 */	DATA	md5tab<>+(16*4)(SB)/4,$0xf61e2562		DATA	md5tab<>+(17*4)(SB)/4,$0xc040b340		DATA	md5tab<>+(18*4)(SB)/4,$0x265e5a51		DATA	md5tab<>+(19*4)(SB)/4,$0xe9b6c7aa		DATA	md5tab<>+(20*4)(SB)/4,$0xd62f105d		DATA	md5tab<>+(21*4)(SB)/4,$0x02441453		DATA	md5tab<>+(22*4)(SB)/4,$0xd8a1e681		DATA	md5tab<>+(23*4)(SB)/4,$0xe7d3fbc8		DATA	md5tab<>+(24*4)(SB)/4,$0x21e1cde6		DATA	md5tab<>+(25*4)(SB)/4,$0xc33707d6		DATA	md5tab<>+(26*4)(SB)/4,$0xf4d50d87		DATA	md5tab<>+(27*4)(SB)/4,$0x455a14ed		DATA	md5tab<>+(28*4)(SB)/4,$0xa9e3e905		DATA	md5tab<>+(29*4)(SB)/4,$0xfcefa3f8		DATA	md5tab<>+(30*4)(SB)/4,$0x676f02d9		DATA	md5tab<>+(31*4)(SB)/4,$0x8d2a4c8a	/* round 3 */	DATA	md5tab<>+(32*4)(SB)/4,$0xfffa3942		DATA	md5tab<>+(33*4)(SB)/4,$0x8771f681		DATA	md5tab<>+(34*4)(SB)/4,$0x6d9d6122		DATA	md5tab<>+(35*4)(SB)/4,$0xfde5380c		DATA	md5tab<>+(36*4)(SB)/4,$0xa4beea44		DATA	md5tab<>+(37*4)(SB)/4,$0x4bdecfa9		DATA	md5tab<>+(38*4)(SB)/4,$0xf6bb4b60		DATA	md5tab<>+(39*4)(SB)/4,$0xbebfbc70		DATA	md5tab<>+(40*4)(SB)/4,$0x289b7ec6		DATA	md5tab<>+(41*4)(SB)/4,$0xeaa127fa		DATA	md5tab<>+(42*4)(SB)/4,$0xd4ef3085		DATA	md5tab<>+(43*4)(SB)/4,$0x04881d05		DATA	md5tab<>+(44*4)(SB)/4,$0xd9d4d039		DATA	md5tab<>+(45*4)(SB)/4,$0xe6db99e5		DATA	md5tab<>+(46*4)(SB)/4,$0x1fa27cf8		DATA	md5tab<>+(47*4)(SB)/4,$0xc4ac5665		/* round 4 */	DATA	md5tab<>+(48*4)(SB)/4,$0xf4292244		DATA	md5tab<>+(49*4)(SB)/4,$0x432aff97		DATA	md5tab<>+(50*4)(SB)/4,$0xab9423a7		DATA	md5tab<>+(51*4)(SB)/4,$0xfc93a039		DATA	md5tab<>+(52*4)(SB)/4,$0x655b59c3		DATA	md5tab<>+(53*4)(SB)/4,$0x8f0ccc92		DATA	md5tab<>+(54*4)(SB)/4,$0xffeff47d		DATA	md5tab<>+(55*4)(SB)/4,$0x85845dd1		DATA	md5tab<>+(56*4)(SB)/4,$0x6fa87e4f		DATA	md5tab<>+(57*4)(SB)/4,$0xfe2ce6e0		DATA	md5tab<>+(58*4)(SB)/4,$0xa3014314		DATA	md5tab<>+(59*4)(SB)/4,$0x4e0811a1		DATA	md5tab<>+(60*4)(SB)/4,$0xf7537e82		DATA	md5tab<>+(61*4)(SB)/4,$0xbd3af235		DATA	md5tab<>+(62*4)(SB)/4,$0x2ad7d2bb		DATA	md5tab<>+(63*4)(SB)/4,$0xeb86d391#define S11 7#define S12 12#define S13 17#define S14 22#define S21 5#define S22 9#define S23 14#define S24 20#define S31 4#define S32 11#define S33 16#define S34 23#define S41 6#define S42 10#define S43 15#define S44 21#define	AREG		R5#define BREG		R6#define CREG		R7#define DREG		R8#define DATAREG		R1#define TABREG		R10#define STREG		R11#define XREG		R12#define ELOOPREG	R13#define EDREG		R14#define IREG		R15#define TMP1		R9#define TMP2		R2#define TMP3		R3#define TMP4		R4/* * decode little endian data into x[off], then the body * bodies have this form: *	a += FN(B,C,D); *	a += x[off] + t[off]; *	a = (a << S11) | (a >> (32 - S11)); *	a += b; */#define BODY1(off,FN,SH,A,B,C,D)\	MOVBU off(DATAREG),TMP2;\	MOVBU (off+1)(DATAREG),TMP3;\	MOVBU (off+2)(DATAREG),TMP1;\	MOVBU (off+3)(DATAREG),TMP4;\	SLL $8,TMP3;\	OR TMP3,TMP2;\	SLL $16,TMP1;\	OR TMP1,TMP2;\	SLL $24,TMP4;\	OR TMP4,TMP2;\	MOVW off(TABREG),TMP3;\	FN(B,C,D)\	ADDU TMP1,A;\	MOVW TMP2,off(XREG);\	ADDU TMP2,A;\	ADDU TMP3,A;\	SLL $SH,A,TMP1;\	SRL $(32-SH),A;\	OR TMP1,A;\	ADDU B,A;\#define BODY(off,inc,FN,SH,A,B,C,D)\	MOVW off(TABREG),TMP3;\	ADDU XREG,IREG,TMP4;\	MOVW (TMP4),TMP2;\	ADDU $(inc*4),IREG;\	AND $63,IREG;\	FN(B,C,D)\	ADDU TMP1,A;\	ADDU TMP2,A;\	ADDU TMP3,A;\	SLL $SH,A,TMP1;\	SRL $(32-SH),A;\	OR  TMP1,A;\	ADDU B,A;\/* * fn1 = ((c ^ d) & b) ^ d */#define FN1(B,C,D)\	XOR C,D,TMP1;\	AND B,TMP1;\	XOR D,TMP1;\/* * fn2 = ((b ^ c) & d) ^ c; */#define FN2(B,C,D)\	XOR B,C,TMP1;\	AND D,TMP1;\	XOR C,TMP1;\/* * fn3 = b ^ c ^ d; */#define FN3(B,C,D)\	XOR B,C,TMP1;\	XOR D,TMP1;\/* * fn4 = c ^ (b | ~d); */#define FN4(B,C,D)\	XOR $-1,D,TMP1;\	OR B,TMP1;\	XOR C,TMP1;\#define	DATA	0#define	LEN	4#define	STATE	8#define XOFF	(-4-16*4)	TEXT	_md5block+0(SB),$68	MOVW	len+LEN(FP),TMP1	ADDU	DATAREG,TMP1,EDREG	MOVW	state+STATE(FP),STREG	MOVW 0(STREG),AREG	MOVW 4(STREG),BREG	MOVW 8(STREG),CREG	MOVW 12(STREG),DREGmainloop:	MOVW $md5tab<>+0(SB),TABREG	ADDU $(16*4),DATAREG,ELOOPREG	MOVW $x+XOFF(SP),XREGloop1:	BODY1(0,FN1,S11,AREG,BREG,CREG,DREG)	BODY1(4,FN1,S12,DREG,AREG,BREG,CREG)	BODY1(8,FN1,S13,CREG,DREG,AREG,BREG)	BODY1(12,FN1,S14,BREG,CREG,DREG,AREG)	ADDU $16,DATAREG	ADDU $16,TABREG	ADDU $16,XREG	BNE DATAREG,ELOOPREG,loop1	MOVW $x+XOFF(SP),XREG	MOVW $(1*4),IREG	MOVW $(1*4),ELOOPREGloop2:	BODY(0,5,FN2,S21,AREG,BREG,CREG,DREG)	BODY(4,5,FN2,S22,DREG,AREG,BREG,CREG)	BODY(8,5,FN2,S23,CREG,DREG,AREG,BREG)	BODY(12,5,FN2,S24,BREG,CREG,DREG,AREG)	ADDU $16,TABREG	BNE IREG,ELOOPREG,loop2	MOVW $(5*4),IREG	MOVW $(5*4),ELOOPREGloop3:	BODY(0,3,FN3,S31,AREG,BREG,CREG,DREG)	BODY(4,3,FN3,S32,DREG,AREG,BREG,CREG)	BODY(8,3,FN3,S33,CREG,DREG,AREG,BREG)	BODY(12,3,FN3,S34,BREG,CREG,DREG,AREG)	ADDU $16,TABREG	BNE IREG,ELOOPREG,loop3	MOVW $0,IREGloop4:	BODY(0,7,FN4,S41,AREG,BREG,CREG,DREG)	BODY(4,7,FN4,S42,DREG,AREG,BREG,CREG)	BODY(8,7,FN4,S43,CREG,DREG,AREG,BREG)	BODY(12,7,FN4,S44,BREG,CREG,DREG,AREG)	ADDU $16,TABREG	BNE IREG,R0,loop4	MOVW 0(STREG),TMP1	MOVW 4(STREG),TMP2	MOVW 8(STREG),TMP3	MOVW 12(STREG),TMP4	ADDU TMP1,AREG	ADDU TMP2,BREG	ADDU TMP3,CREG	ADDU TMP4,DREG	MOVW AREG,0(STREG)	MOVW BREG,4(STREG)	MOVW CREG,8(STREG)	MOVW DREG,12(STREG)	BNE DATAREG,EDREG,mainloop	RET	GLOBL	md5tab<>+0(SB),$256	END

⌨️ 快捷键说明

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