1 | %ifidn __OUTPUT_FORMAT__,obj
|
---|
2 | section code use32 class=code align=64
|
---|
3 | %elifidn __OUTPUT_FORMAT__,win32
|
---|
4 | section .text code align=64
|
---|
5 | %else
|
---|
6 | section .text code
|
---|
7 | %endif
|
---|
8 | align 64
|
---|
9 | global _poly1305_init
|
---|
10 | align 16
|
---|
11 | _poly1305_init:
|
---|
12 | L$_poly1305_init_begin:
|
---|
13 | push ebp
|
---|
14 | push ebx
|
---|
15 | push esi
|
---|
16 | push edi
|
---|
17 | mov edi,DWORD [20+esp]
|
---|
18 | mov esi,DWORD [24+esp]
|
---|
19 | mov ebp,DWORD [28+esp]
|
---|
20 | xor eax,eax
|
---|
21 | mov DWORD [edi],eax
|
---|
22 | mov DWORD [4+edi],eax
|
---|
23 | mov DWORD [8+edi],eax
|
---|
24 | mov DWORD [12+edi],eax
|
---|
25 | mov DWORD [16+edi],eax
|
---|
26 | mov DWORD [20+edi],eax
|
---|
27 | cmp esi,0
|
---|
28 | je NEAR L$000nokey
|
---|
29 | mov eax,DWORD [esi]
|
---|
30 | mov ebx,DWORD [4+esi]
|
---|
31 | mov ecx,DWORD [8+esi]
|
---|
32 | mov edx,DWORD [12+esi]
|
---|
33 | and eax,268435455
|
---|
34 | and ebx,268435452
|
---|
35 | and ecx,268435452
|
---|
36 | and edx,268435452
|
---|
37 | mov DWORD [24+edi],eax
|
---|
38 | mov DWORD [28+edi],ebx
|
---|
39 | mov DWORD [32+edi],ecx
|
---|
40 | mov DWORD [36+edi],edx
|
---|
41 | mov eax,0
|
---|
42 | L$000nokey:
|
---|
43 | pop edi
|
---|
44 | pop esi
|
---|
45 | pop ebx
|
---|
46 | pop ebp
|
---|
47 | ret
|
---|
48 | global _poly1305_blocks
|
---|
49 | align 16
|
---|
50 | _poly1305_blocks:
|
---|
51 | L$_poly1305_blocks_begin:
|
---|
52 | push ebp
|
---|
53 | push ebx
|
---|
54 | push esi
|
---|
55 | push edi
|
---|
56 | mov edi,DWORD [20+esp]
|
---|
57 | mov esi,DWORD [24+esp]
|
---|
58 | mov ecx,DWORD [28+esp]
|
---|
59 | L$001enter_blocks:
|
---|
60 | and ecx,-15
|
---|
61 | jz NEAR L$002nodata
|
---|
62 | sub esp,64
|
---|
63 | mov eax,DWORD [24+edi]
|
---|
64 | mov ebx,DWORD [28+edi]
|
---|
65 | lea ebp,[ecx*1+esi]
|
---|
66 | mov ecx,DWORD [32+edi]
|
---|
67 | mov edx,DWORD [36+edi]
|
---|
68 | mov DWORD [92+esp],ebp
|
---|
69 | mov ebp,esi
|
---|
70 | mov DWORD [36+esp],eax
|
---|
71 | mov eax,ebx
|
---|
72 | shr eax,2
|
---|
73 | mov DWORD [40+esp],ebx
|
---|
74 | add eax,ebx
|
---|
75 | mov ebx,ecx
|
---|
76 | shr ebx,2
|
---|
77 | mov DWORD [44+esp],ecx
|
---|
78 | add ebx,ecx
|
---|
79 | mov ecx,edx
|
---|
80 | shr ecx,2
|
---|
81 | mov DWORD [48+esp],edx
|
---|
82 | add ecx,edx
|
---|
83 | mov DWORD [52+esp],eax
|
---|
84 | mov DWORD [56+esp],ebx
|
---|
85 | mov DWORD [60+esp],ecx
|
---|
86 | mov eax,DWORD [edi]
|
---|
87 | mov ebx,DWORD [4+edi]
|
---|
88 | mov ecx,DWORD [8+edi]
|
---|
89 | mov esi,DWORD [12+edi]
|
---|
90 | mov edi,DWORD [16+edi]
|
---|
91 | jmp NEAR L$003loop
|
---|
92 | align 32
|
---|
93 | L$003loop:
|
---|
94 | add eax,DWORD [ebp]
|
---|
95 | adc ebx,DWORD [4+ebp]
|
---|
96 | adc ecx,DWORD [8+ebp]
|
---|
97 | adc esi,DWORD [12+ebp]
|
---|
98 | lea ebp,[16+ebp]
|
---|
99 | adc edi,DWORD [96+esp]
|
---|
100 | mov DWORD [esp],eax
|
---|
101 | mov DWORD [12+esp],esi
|
---|
102 | mul DWORD [36+esp]
|
---|
103 | mov DWORD [16+esp],edi
|
---|
104 | mov edi,eax
|
---|
105 | mov eax,ebx
|
---|
106 | mov esi,edx
|
---|
107 | mul DWORD [60+esp]
|
---|
108 | add edi,eax
|
---|
109 | mov eax,ecx
|
---|
110 | adc esi,edx
|
---|
111 | mul DWORD [56+esp]
|
---|
112 | add edi,eax
|
---|
113 | mov eax,DWORD [12+esp]
|
---|
114 | adc esi,edx
|
---|
115 | mul DWORD [52+esp]
|
---|
116 | add edi,eax
|
---|
117 | mov eax,DWORD [esp]
|
---|
118 | adc esi,edx
|
---|
119 | mul DWORD [40+esp]
|
---|
120 | mov DWORD [20+esp],edi
|
---|
121 | xor edi,edi
|
---|
122 | add esi,eax
|
---|
123 | mov eax,ebx
|
---|
124 | adc edi,edx
|
---|
125 | mul DWORD [36+esp]
|
---|
126 | add esi,eax
|
---|
127 | mov eax,ecx
|
---|
128 | adc edi,edx
|
---|
129 | mul DWORD [60+esp]
|
---|
130 | add esi,eax
|
---|
131 | mov eax,DWORD [12+esp]
|
---|
132 | adc edi,edx
|
---|
133 | mul DWORD [56+esp]
|
---|
134 | add esi,eax
|
---|
135 | mov eax,DWORD [16+esp]
|
---|
136 | adc edi,edx
|
---|
137 | imul eax,DWORD [52+esp]
|
---|
138 | add esi,eax
|
---|
139 | mov eax,DWORD [esp]
|
---|
140 | adc edi,0
|
---|
141 | mul DWORD [44+esp]
|
---|
142 | mov DWORD [24+esp],esi
|
---|
143 | xor esi,esi
|
---|
144 | add edi,eax
|
---|
145 | mov eax,ebx
|
---|
146 | adc esi,edx
|
---|
147 | mul DWORD [40+esp]
|
---|
148 | add edi,eax
|
---|
149 | mov eax,ecx
|
---|
150 | adc esi,edx
|
---|
151 | mul DWORD [36+esp]
|
---|
152 | add edi,eax
|
---|
153 | mov eax,DWORD [12+esp]
|
---|
154 | adc esi,edx
|
---|
155 | mul DWORD [60+esp]
|
---|
156 | add edi,eax
|
---|
157 | mov eax,DWORD [16+esp]
|
---|
158 | adc esi,edx
|
---|
159 | imul eax,DWORD [56+esp]
|
---|
160 | add edi,eax
|
---|
161 | mov eax,DWORD [esp]
|
---|
162 | adc esi,0
|
---|
163 | mul DWORD [48+esp]
|
---|
164 | mov DWORD [28+esp],edi
|
---|
165 | xor edi,edi
|
---|
166 | add esi,eax
|
---|
167 | mov eax,ebx
|
---|
168 | adc edi,edx
|
---|
169 | mul DWORD [44+esp]
|
---|
170 | add esi,eax
|
---|
171 | mov eax,ecx
|
---|
172 | adc edi,edx
|
---|
173 | mul DWORD [40+esp]
|
---|
174 | add esi,eax
|
---|
175 | mov eax,DWORD [12+esp]
|
---|
176 | adc edi,edx
|
---|
177 | mul DWORD [36+esp]
|
---|
178 | add esi,eax
|
---|
179 | mov ecx,DWORD [16+esp]
|
---|
180 | adc edi,edx
|
---|
181 | mov edx,ecx
|
---|
182 | imul ecx,DWORD [60+esp]
|
---|
183 | add esi,ecx
|
---|
184 | mov eax,DWORD [20+esp]
|
---|
185 | adc edi,0
|
---|
186 | imul edx,DWORD [36+esp]
|
---|
187 | add edx,edi
|
---|
188 | mov ebx,DWORD [24+esp]
|
---|
189 | mov ecx,DWORD [28+esp]
|
---|
190 | mov edi,edx
|
---|
191 | shr edx,2
|
---|
192 | and edi,3
|
---|
193 | lea edx,[edx*4+edx]
|
---|
194 | add eax,edx
|
---|
195 | adc ebx,0
|
---|
196 | adc ecx,0
|
---|
197 | adc esi,0
|
---|
198 | adc edi,0
|
---|
199 | cmp ebp,DWORD [92+esp]
|
---|
200 | jne NEAR L$003loop
|
---|
201 | mov edx,DWORD [84+esp]
|
---|
202 | add esp,64
|
---|
203 | mov DWORD [edx],eax
|
---|
204 | mov DWORD [4+edx],ebx
|
---|
205 | mov DWORD [8+edx],ecx
|
---|
206 | mov DWORD [12+edx],esi
|
---|
207 | mov DWORD [16+edx],edi
|
---|
208 | L$002nodata:
|
---|
209 | pop edi
|
---|
210 | pop esi
|
---|
211 | pop ebx
|
---|
212 | pop ebp
|
---|
213 | ret
|
---|
214 | global _poly1305_emit
|
---|
215 | align 16
|
---|
216 | _poly1305_emit:
|
---|
217 | L$_poly1305_emit_begin:
|
---|
218 | push ebp
|
---|
219 | push ebx
|
---|
220 | push esi
|
---|
221 | push edi
|
---|
222 | mov ebp,DWORD [20+esp]
|
---|
223 | L$004enter_emit:
|
---|
224 | mov edi,DWORD [24+esp]
|
---|
225 | mov eax,DWORD [ebp]
|
---|
226 | mov ebx,DWORD [4+ebp]
|
---|
227 | mov ecx,DWORD [8+ebp]
|
---|
228 | mov edx,DWORD [12+ebp]
|
---|
229 | mov esi,DWORD [16+ebp]
|
---|
230 | add eax,5
|
---|
231 | adc ebx,0
|
---|
232 | adc ecx,0
|
---|
233 | adc edx,0
|
---|
234 | adc esi,0
|
---|
235 | shr esi,2
|
---|
236 | neg esi
|
---|
237 | and eax,esi
|
---|
238 | and ebx,esi
|
---|
239 | and ecx,esi
|
---|
240 | and edx,esi
|
---|
241 | mov DWORD [edi],eax
|
---|
242 | mov DWORD [4+edi],ebx
|
---|
243 | mov DWORD [8+edi],ecx
|
---|
244 | mov DWORD [12+edi],edx
|
---|
245 | not esi
|
---|
246 | mov eax,DWORD [ebp]
|
---|
247 | mov ebx,DWORD [4+ebp]
|
---|
248 | mov ecx,DWORD [8+ebp]
|
---|
249 | mov edx,DWORD [12+ebp]
|
---|
250 | mov ebp,DWORD [28+esp]
|
---|
251 | and eax,esi
|
---|
252 | and ebx,esi
|
---|
253 | and ecx,esi
|
---|
254 | and edx,esi
|
---|
255 | or eax,DWORD [edi]
|
---|
256 | or ebx,DWORD [4+edi]
|
---|
257 | or ecx,DWORD [8+edi]
|
---|
258 | or edx,DWORD [12+edi]
|
---|
259 | add eax,DWORD [ebp]
|
---|
260 | adc ebx,DWORD [4+ebp]
|
---|
261 | adc ecx,DWORD [8+ebp]
|
---|
262 | adc edx,DWORD [12+ebp]
|
---|
263 | mov DWORD [edi],eax
|
---|
264 | mov DWORD [4+edi],ebx
|
---|
265 | mov DWORD [8+edi],ecx
|
---|
266 | mov DWORD [12+edi],edx
|
---|
267 | pop edi
|
---|
268 | pop esi
|
---|
269 | pop ebx
|
---|
270 | pop ebp
|
---|
271 | ret
|
---|
272 | db 80,111,108,121,49,51,48,53,32,102,111,114,32,120,56,54
|
---|
273 | db 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
|
---|
274 | db 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
|
---|
275 | db 114,103,62,0
|
---|
276 | align 4
|
---|