2 * rfc1321 requires that I include this. The code is new. The constants
3 * all come from the rfc (hence the copyright). We trade a table for the
4 * macros in rfc. The total size is a lot less. -- presotto
6 * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
9 * License to copy and use this software is granted provided that it
10 * is identified as the "RSA Data Security, Inc. MD5 Message-Digest
11 * Algorithm" in all material mentioning or referencing this software
14 * License is also granted to make and use derivative works provided
15 * that such works are identified as "derived from the RSA Data
16 * Security, Inc. MD5 Message-Digest Algorithm" in all material
17 * mentioning or referencing the derived work.
19 * RSA Data Security, Inc. makes no representations concerning either
20 * the merchantability of this software or the suitability of this
21 * software forany particular purpose. It is provided "as is"
22 * without express or implied warranty of any kind.
23 * These notices must be retained in any copies of any part of this
24 * documentation and/or software.
28 DATA md5tab<>+( 0*4)(SB)/4,$0xd76aa478
29 DATA md5tab<>+( 1*4)(SB)/4,$0xe8c7b756
30 DATA md5tab<>+( 2*4)(SB)/4,$0x242070db
31 DATA md5tab<>+( 3*4)(SB)/4,$0xc1bdceee
32 DATA md5tab<>+( 4*4)(SB)/4,$0xf57c0faf
33 DATA md5tab<>+( 5*4)(SB)/4,$0x4787c62a
34 DATA md5tab<>+( 6*4)(SB)/4,$0xa8304613
35 DATA md5tab<>+( 7*4)(SB)/4,$0xfd469501
36 DATA md5tab<>+( 8*4)(SB)/4,$0x698098d8
37 DATA md5tab<>+( 9*4)(SB)/4,$0x8b44f7af
38 DATA md5tab<>+(10*4)(SB)/4,$0xffff5bb1
39 DATA md5tab<>+(11*4)(SB)/4,$0x895cd7be
40 DATA md5tab<>+(12*4)(SB)/4,$0x6b901122
41 DATA md5tab<>+(13*4)(SB)/4,$0xfd987193
42 DATA md5tab<>+(14*4)(SB)/4,$0xa679438e
43 DATA md5tab<>+(15*4)(SB)/4,$0x49b40821
46 DATA md5tab<>+(16*4)(SB)/4,$0xf61e2562
47 DATA md5tab<>+(17*4)(SB)/4,$0xc040b340
48 DATA md5tab<>+(18*4)(SB)/4,$0x265e5a51
49 DATA md5tab<>+(19*4)(SB)/4,$0xe9b6c7aa
50 DATA md5tab<>+(20*4)(SB)/4,$0xd62f105d
51 DATA md5tab<>+(21*4)(SB)/4,$0x02441453
52 DATA md5tab<>+(22*4)(SB)/4,$0xd8a1e681
53 DATA md5tab<>+(23*4)(SB)/4,$0xe7d3fbc8
54 DATA md5tab<>+(24*4)(SB)/4,$0x21e1cde6
55 DATA md5tab<>+(25*4)(SB)/4,$0xc33707d6
56 DATA md5tab<>+(26*4)(SB)/4,$0xf4d50d87
57 DATA md5tab<>+(27*4)(SB)/4,$0x455a14ed
58 DATA md5tab<>+(28*4)(SB)/4,$0xa9e3e905
59 DATA md5tab<>+(29*4)(SB)/4,$0xfcefa3f8
60 DATA md5tab<>+(30*4)(SB)/4,$0x676f02d9
61 DATA md5tab<>+(31*4)(SB)/4,$0x8d2a4c8a
64 DATA md5tab<>+(32*4)(SB)/4,$0xfffa3942
65 DATA md5tab<>+(33*4)(SB)/4,$0x8771f681
66 DATA md5tab<>+(34*4)(SB)/4,$0x6d9d6122
67 DATA md5tab<>+(35*4)(SB)/4,$0xfde5380c
68 DATA md5tab<>+(36*4)(SB)/4,$0xa4beea44
69 DATA md5tab<>+(37*4)(SB)/4,$0x4bdecfa9
70 DATA md5tab<>+(38*4)(SB)/4,$0xf6bb4b60
71 DATA md5tab<>+(39*4)(SB)/4,$0xbebfbc70
72 DATA md5tab<>+(40*4)(SB)/4,$0x289b7ec6
73 DATA md5tab<>+(41*4)(SB)/4,$0xeaa127fa
74 DATA md5tab<>+(42*4)(SB)/4,$0xd4ef3085
75 DATA md5tab<>+(43*4)(SB)/4,$0x04881d05
76 DATA md5tab<>+(44*4)(SB)/4,$0xd9d4d039
77 DATA md5tab<>+(45*4)(SB)/4,$0xe6db99e5
78 DATA md5tab<>+(46*4)(SB)/4,$0x1fa27cf8
79 DATA md5tab<>+(47*4)(SB)/4,$0xc4ac5665
82 DATA md5tab<>+(48*4)(SB)/4,$0xf4292244
83 DATA md5tab<>+(49*4)(SB)/4,$0x432aff97
84 DATA md5tab<>+(50*4)(SB)/4,$0xab9423a7
85 DATA md5tab<>+(51*4)(SB)/4,$0xfc93a039
86 DATA md5tab<>+(52*4)(SB)/4,$0x655b59c3
87 DATA md5tab<>+(53*4)(SB)/4,$0x8f0ccc92
88 DATA md5tab<>+(54*4)(SB)/4,$0xffeff47d
89 DATA md5tab<>+(55*4)(SB)/4,$0x85845dd1
90 DATA md5tab<>+(56*4)(SB)/4,$0x6fa87e4f
91 DATA md5tab<>+(57*4)(SB)/4,$0xfe2ce6e0
92 DATA md5tab<>+(58*4)(SB)/4,$0xa3014314
93 DATA md5tab<>+(59*4)(SB)/4,$0x4e0811a1
94 DATA md5tab<>+(60*4)(SB)/4,$0xf7537e82
95 DATA md5tab<>+(61*4)(SB)/4,$0xbd3af235
96 DATA md5tab<>+(62*4)(SB)/4,$0x2ad7d2bb
97 DATA md5tab<>+(63*4)(SB)/4,$0xeb86d391
137 * decode little endian data into x[off], then the body
138 * bodies have this form:
140 * a += x[off] + t[off];
141 * a = (a << S11) | (a >> (32 - S11));
144 #define BODY1(off,FN,SH,A,B,C,D)\
145 MOVBU off(DATAREG),TMP2;\
146 MOVBU (off+1)(DATAREG),TMP3;\
147 MOVBU (off+2)(DATAREG),TMP1;\
148 MOVBU (off+3)(DATAREG),TMP4;\
155 MOVW off(TABREG),TMP3;\
158 MOVW TMP2,off(XREG);\
166 #define BODY(off,inc,FN,SH,A,B,C,D)\
167 MOVW off(TABREG),TMP3;\
168 ADDU XREG,IREG,TMP4;\
182 * fn1 = ((c ^ d) & b) ^ d
190 * fn2 = ((b ^ c) & d) ^ c;
205 * fn4 = c ^ (b | ~d);
216 #define XOFF (-4-16*4)
218 TEXT _md5block+0(SB),$68
220 MOVW len+LEN(FP),TMP1
221 ADDU DATAREG,TMP1,EDREG
222 MOVW state+STATE(FP),STREG
231 MOVW $md5tab<>+0(SB),TABREG
232 ADDU $(16*4),DATAREG,ELOOPREG
233 MOVW $x+XOFF(SP),XREG
236 BODY1(0,FN1,S11,AREG,BREG,CREG,DREG)
237 BODY1(4,FN1,S12,DREG,AREG,BREG,CREG)
238 BODY1(8,FN1,S13,CREG,DREG,AREG,BREG)
239 BODY1(12,FN1,S14,BREG,CREG,DREG,AREG)
245 BNE DATAREG,ELOOPREG,loop1
248 MOVW $x+XOFF(SP),XREG
252 BODY(0,5,FN2,S21,AREG,BREG,CREG,DREG)
253 BODY(4,5,FN2,S22,DREG,AREG,BREG,CREG)
254 BODY(8,5,FN2,S23,CREG,DREG,AREG,BREG)
255 BODY(12,5,FN2,S24,BREG,CREG,DREG,AREG)
259 BNE IREG,ELOOPREG,loop2
265 BODY(0,3,FN3,S31,AREG,BREG,CREG,DREG)
266 BODY(4,3,FN3,S32,DREG,AREG,BREG,CREG)
267 BODY(8,3,FN3,S33,CREG,DREG,AREG,BREG)
268 BODY(12,3,FN3,S34,BREG,CREG,DREG,AREG)
272 BNE IREG,ELOOPREG,loop3
277 BODY(0,7,FN4,S41,AREG,BREG,CREG,DREG)
278 BODY(4,7,FN4,S42,DREG,AREG,BREG,CREG)
279 BODY(8,7,FN4,S43,CREG,DREG,AREG,BREG)
280 BODY(12,7,FN4,S44,BREG,CREG,DREG,AREG)
299 BNE DATAREG,EDREG,mainloop
303 GLOBL md5tab<>+0(SB),$256