Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
	TEXT	_sha1block+0(SB),$352
2
 
3
/* x = (wp[off-f] ^ wp[off-8] ^ wp[off-14] ^ wp[off-16]) <<< 1;
4
 * wp[off] = x;
5
 * x += A <<< 5;
6
 * E += 0xca62c1d6 + x;
7
 * x = FN(B,C,D);
8
 * E += x;
9
 * B >>> 2
10
 */
11
#define BSWAPDI	BYTE $0x0f; BYTE $0xcf;
12
 
13
#define BODY(off,FN,V,A,B,C,D,E)\
14
	MOVL (off-64)(BP),DI;\
15
	XORL (off-56)(BP),DI;\
16
	XORL (off-32)(BP),DI;\
17
	XORL (off-12)(BP),DI;\
18
	ROLL $1,DI;\
19
	MOVL DI,off(BP);\
20
	LEAL V(DI)(E*1),E;\
21
	MOVL A,DI;\
22
	ROLL $5,DI;\
23
	ADDL DI,E;\
24
	FN(B,C,D)\
25
	ADDL DI,E;\
26
	RORL $2,B;\
27
 
28
#define BODY0(off,FN,V,A,B,C,D,E)\
29
	MOVL off(BX),DI;\
30
	BSWAPDI;\
31
	MOVL DI,off(BP);\
32
	LEAL V(DI)(E*1),E;\
33
	MOVL A,DI;\
34
	ROLL $5,DI;\
35
	ADDL DI,E;\
36
	FN(B,C,D)\
37
	ADDL DI,E;\
38
	RORL $2,B;\
39
 
40
/*
41
 * fn1 = (((C^D)&B)^D);
42
 */
43
#define FN1(B,C,D)\
44
	MOVL C,DI;\
45
	XORL D,DI;\
46
	ANDL B,DI;\
47
	XORL D,DI;\
48
 
49
/*
50
 * fn24 = B ^ C ^ D
51
 */
52
#define FN24(B,C,D)\
53
	MOVL B,DI;\
54
	XORL C,DI;\
55
	XORL D,DI;\
56
 
57
/*
58
 * fn3 = ((B ^ C) & (D ^= B)) ^ B
59
 * D ^= B to restore D
60
 */
61
#define FN3(B,C,D)\
62
	MOVL B,DI;\
63
	XORL C,DI;\
64
	XORL B,D;\
65
	ANDL D,DI;\
66
	XORL B,DI;\
67
	XORL B,D;\
68
 
69
/*
70
 * stack offsets
71
 * void sha1block(uchar *DATA, int LEN, ulong *STATE)
72
 */
73
#define	DATA	0
74
#define	LEN	4
75
#define	STATE	8
76
 
77
/*
78
 * stack offsets for locals
79
 * ulong w[80];
80
 * uchar *edata;
81
 * ulong *w15, *w40, *w60, *w80;
82
 * register local
83
 * ulong *wp = BP
84
 * ulong a = eax, b = ebx, c = ecx, d = edx, e = esi
85
 * ulong tmp = edi
86
 */
87
#define WARRAY	(-4-(80*4))
88
#define TMP1	(-8-(80*4))
89
#define TMP2	(-12-(80*4))
90
#define W15	(-16-(80*4))
91
#define W40	(-20-(80*4))
92
#define W60	(-24-(80*4))
93
#define W80	(-28-(80*4))
94
#define EDATA	(-32-(80*4))
95
 
96
	MOVL data+DATA(FP),AX
97
	ADDL len+LEN(FP),AX
98
	MOVL AX,edata+EDATA(SP)
99
 
100
	LEAL aw15+(WARRAY+15*4)(SP),DI
101
	MOVL DI,w15+W15(SP)
102
	LEAL aw40+(WARRAY+40*4)(SP),DX
103
	MOVL DX,w40+W40(SP)
104
	LEAL aw60+(WARRAY+60*4)(SP),CX
105
	MOVL CX,w60+W60(SP)
106
	LEAL aw80+(WARRAY+80*4)(SP),DI
107
	MOVL DI,w80+W80(SP)
108
 
109
mainloop:
110
	LEAL warray+WARRAY(SP),BP
111
 
112
	MOVL state+STATE(FP),DI
113
	MOVL (DI),AX
114
	MOVL 4(DI),BX
115
	MOVL BX,tmp1+TMP1(SP)
116
	MOVL 8(DI),CX
117
	MOVL 12(DI),DX
118
	MOVL 16(DI),SI
119
 
120
	MOVL data+DATA(FP),BX
121
 
122
loop1:
123
	BODY0(0,FN1,0x5a827999,AX,tmp1+TMP1(SP),CX,DX,SI)
124
	MOVL SI,tmp2+TMP2(SP)
125
	BODY0(4,FN1,0x5a827999,SI,AX,tmp1+TMP1(SP),CX,DX)
126
	MOVL tmp1+TMP1(SP),SI
127
	BODY0(8,FN1,0x5a827999,DX,tmp2+TMP2(SP),AX,SI,CX)
128
	BODY0(12,FN1,0x5a827999,CX,DX,tmp2+TMP2(SP),AX,SI)
129
	MOVL SI,tmp1+TMP1(SP)
130
	BODY0(16,FN1,0x5a827999,SI,CX,DX,tmp2+TMP2(SP),AX)
131
	MOVL tmp2+TMP2(SP),SI
132
 
133
	ADDL $20,BX
134
	ADDL $20,BP
135
	CMPL BP,w15+W15(SP)
136
	JCS loop1
137
 
138
	BODY0(0,FN1,0x5a827999,AX,tmp1+TMP1(SP),CX,DX,SI)
139
	ADDL $4,BX
140
	MOVL BX,data+DATA(FP)
141
	MOVL tmp1+TMP1(SP),BX
142
 
143
	BODY(4,FN1,0x5a827999,SI,AX,BX,CX,DX)
144
	BODY(8,FN1,0x5a827999,DX,SI,AX,BX,CX)
145
	BODY(12,FN1,0x5a827999,CX,DX,SI,AX,BX)
146
	BODY(16,FN1,0x5a827999,BX,CX,DX,SI,AX)
147
 
148
	ADDL $20,BP
149
 
150
loop2:
151
	BODY(0,FN24,0x6ed9eba1,AX,BX,CX,DX,SI)
152
	BODY(4,FN24,0x6ed9eba1,SI,AX,BX,CX,DX)
153
	BODY(8,FN24,0x6ed9eba1,DX,SI,AX,BX,CX)
154
	BODY(12,FN24,0x6ed9eba1,CX,DX,SI,AX,BX)
155
	BODY(16,FN24,0x6ed9eba1,BX,CX,DX,SI,AX)
156
 
157
	ADDL $20,BP
158
	CMPL BP,w40+W40(SP)
159
	JCS loop2
160
 
161
loop3:
162
	BODY(0,FN3,0x8f1bbcdc,AX,BX,CX,DX,SI)
163
	BODY(4,FN3,0x8f1bbcdc,SI,AX,BX,CX,DX)
164
	BODY(8,FN3,0x8f1bbcdc,DX,SI,AX,BX,CX)
165
	BODY(12,FN3,0x8f1bbcdc,CX,DX,SI,AX,BX)
166
	BODY(16,FN3,0x8f1bbcdc,BX,CX,DX,SI,AX)
167
 
168
	ADDL $20,BP
169
	CMPL BP,w60+W60(SP)
170
	JCS loop3
171
 
172
loop4:
173
	BODY(0,FN24,0xca62c1d6,AX,BX,CX,DX,SI)
174
	BODY(4,FN24,0xca62c1d6,SI,AX,BX,CX,DX)
175
	BODY(8,FN24,0xca62c1d6,DX,SI,AX,BX,CX)
176
	BODY(12,FN24,0xca62c1d6,CX,DX,SI,AX,BX)
177
	BODY(16,FN24,0xca62c1d6,BX,CX,DX,SI,AX)
178
 
179
	ADDL $20,BP
180
	CMPL BP,w80+W80(SP)
181
	JCS loop4
182
 
183
	MOVL state+STATE(FP),DI
184
	ADDL AX,0(DI)
185
	ADDL BX,4(DI)
186
	ADDL CX,8(DI)
187
	ADDL DX,12(DI)
188
	ADDL SI,16(DI)
189
 
190
	MOVL edata+EDATA(SP),DI
191
	CMPL data+DATA(FP),DI
192
	JCS mainloop
193
 
194
	RET
195
	END