diff options
Diffstat (limited to 'src/lib/libcrypto/perlasm/cbc.pl')
-rw-r--r-- | src/lib/libcrypto/perlasm/cbc.pl | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/src/lib/libcrypto/perlasm/cbc.pl b/src/lib/libcrypto/perlasm/cbc.pl index 24561e759a..392f23e145 100644 --- a/src/lib/libcrypto/perlasm/cbc.pl +++ b/src/lib/libcrypto/perlasm/cbc.pl | |||
@@ -34,6 +34,15 @@ sub cbc | |||
34 | # p1,p2,p3 are the offsets for parameters to be passed to the | 34 | # p1,p2,p3 are the offsets for parameters to be passed to the |
35 | # underlying calls. | 35 | # underlying calls. |
36 | 36 | ||
37 | &static_label("cbc_enc_jmp_table_".$name); | ||
38 | &static_label("ej1_".$name); | ||
39 | &static_label("ej2_".$name); | ||
40 | &static_label("ej3_".$name); | ||
41 | &static_label("ej4_".$name); | ||
42 | &static_label("ej5_".$name); | ||
43 | &static_label("ej6_".$name); | ||
44 | &static_label("ej7_".$name); | ||
45 | |||
37 | &function_begin_B($name,""); | 46 | &function_begin_B($name,""); |
38 | &comment(""); | 47 | &comment(""); |
39 | 48 | ||
@@ -146,33 +155,32 @@ sub cbc | |||
146 | &mov($count, &wparam(2)); # length | 155 | &mov($count, &wparam(2)); # length |
147 | &and($count, 7); | 156 | &and($count, 7); |
148 | &jz(&label("finish")); | 157 | &jz(&label("finish")); |
149 | &call(&label("PIC_point")); | 158 | |
150 | &set_label("PIC_point"); | 159 | &picsetup("edx"); |
151 | &blindpop("edx"); | 160 | &picsymbol("ecx", &label("cbc_enc_jmp_table_".$name), "edx") |
152 | &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx")); | ||
153 | &mov($count,&DWP(0,"ecx",$count,4)); | 161 | &mov($count,&DWP(0,"ecx",$count,4)); |
154 | &add($count,"edx"); | 162 | &picadjust($count, "edx"); |
163 | |||
155 | &xor("ecx","ecx"); | 164 | &xor("ecx","ecx"); |
156 | &xor("edx","edx"); | 165 | &xor("edx","edx"); |
157 | #&mov($count,&DWP(&label("cbc_enc_jmp_table"),"",$count,4)); | ||
158 | &jmp_ptr($count); | 166 | &jmp_ptr($count); |
159 | 167 | ||
160 | &set_label("ej7"); | 168 | &set_label("ej7_".$name); |
161 | &movb(&HB("edx"), &BP(6,$in,"",0)); | 169 | &movb(&HB("edx"), &BP(6,$in,"",0)); |
162 | &shl("edx",8); | 170 | &shl("edx",8); |
163 | &set_label("ej6"); | 171 | &set_label("ej6_".$name); |
164 | &movb(&HB("edx"), &BP(5,$in,"",0)); | 172 | &movb(&HB("edx"), &BP(5,$in,"",0)); |
165 | &set_label("ej5"); | 173 | &set_label("ej5_".$name); |
166 | &movb(&LB("edx"), &BP(4,$in,"",0)); | 174 | &movb(&LB("edx"), &BP(4,$in,"",0)); |
167 | &set_label("ej4"); | 175 | &set_label("ej4_".$name); |
168 | &mov("ecx", &DWP(0,$in,"",0)); | 176 | &mov("ecx", &DWP(0,$in,"",0)); |
169 | &jmp(&label("ejend")); | 177 | &jmp(&label("ejend")); |
170 | &set_label("ej3"); | 178 | &set_label("ej3_".$name); |
171 | &movb(&HB("ecx"), &BP(2,$in,"",0)); | 179 | &movb(&HB("ecx"), &BP(2,$in,"",0)); |
172 | &shl("ecx",8); | 180 | &shl("ecx",8); |
173 | &set_label("ej2"); | 181 | &set_label("ej2_".$name); |
174 | &movb(&HB("ecx"), &BP(1,$in,"",0)); | 182 | &movb(&HB("ecx"), &BP(1,$in,"",0)); |
175 | &set_label("ej1"); | 183 | &set_label("ej1_".$name); |
176 | &movb(&LB("ecx"), &BP(0,$in,"",0)); | 184 | &movb(&LB("ecx"), &BP(0,$in,"",0)); |
177 | &set_label("ejend"); | 185 | &set_label("ejend"); |
178 | 186 | ||
@@ -279,30 +287,14 @@ sub cbc | |||
279 | &mov("eax", &DWP(0,$in,"",0)); # get old cipher text, | 287 | &mov("eax", &DWP(0,$in,"",0)); # get old cipher text, |
280 | &mov("ebx", &DWP(4,$in,"",0)); # next iv actually | 288 | &mov("ebx", &DWP(4,$in,"",0)); # next iv actually |
281 | 289 | ||
282 | &set_label("dj7"); | ||
283 | &rotr("edx", 16); | 290 | &rotr("edx", 16); |
284 | &movb(&BP(6,$out,"",0), &LB("edx")); | 291 | &movb(&BP(6,$out,"",0), &LB("edx")); |
285 | &shr("edx",16); | 292 | &shr("edx",16); |
286 | &set_label("dj6"); | ||
287 | &movb(&BP(5,$out,"",0), &HB("edx")); | 293 | &movb(&BP(5,$out,"",0), &HB("edx")); |
288 | &set_label("dj5"); | ||
289 | &movb(&BP(4,$out,"",0), &LB("edx")); | 294 | &movb(&BP(4,$out,"",0), &LB("edx")); |
290 | &set_label("dj4"); | ||
291 | &mov(&DWP(0,$out,"",0), "ecx"); | 295 | &mov(&DWP(0,$out,"",0), "ecx"); |
292 | &jmp(&label("djend")); | ||
293 | &set_label("dj3"); | ||
294 | &rotr("ecx", 16); | ||
295 | &movb(&BP(2,$out,"",0), &LB("ecx")); | ||
296 | &shl("ecx",16); | ||
297 | &set_label("dj2"); | ||
298 | &movb(&BP(1,$in,"",0), &HB("ecx")); | ||
299 | &set_label("dj1"); | ||
300 | &movb(&BP(0,$in,"",0), &LB("ecx")); | ||
301 | &set_label("djend"); | ||
302 | 296 | ||
303 | # final iv is still in eax:ebx | 297 | # final iv is still in eax:ebx |
304 | &jmp(&label("finish")); | ||
305 | |||
306 | 298 | ||
307 | ############################ FINISH #######################3 | 299 | ############################ FINISH #######################3 |
308 | &set_label("finish",1); | 300 | &set_label("finish",1); |
@@ -319,31 +311,21 @@ sub cbc | |||
319 | &mov(&DWP(4,"ecx","",0), "ebx"); # save iv | 311 | &mov(&DWP(4,"ecx","",0), "ebx"); # save iv |
320 | 312 | ||
321 | &function_end_A($name); | 313 | &function_end_A($name); |
314 | &function_end_B($name); | ||
322 | 315 | ||
316 | &rodataseg(); | ||
323 | &align(64); | 317 | &align(64); |
324 | &set_label("cbc_enc_jmp_table"); | 318 | &set_label("cbc_enc_jmp_table_".$name); |
325 | &data_word("0"); | 319 | &data_word("0"); |
326 | &data_word(&label("ej1")."-".&label("PIC_point")); | 320 | &data_word(&code_sym(&label("ej1_".$name))); |
327 | &data_word(&label("ej2")."-".&label("PIC_point")); | 321 | &data_word(&code_sym(&label("ej2_".$name))); |
328 | &data_word(&label("ej3")."-".&label("PIC_point")); | 322 | &data_word(&code_sym(&label("ej3_".$name))); |
329 | &data_word(&label("ej4")."-".&label("PIC_point")); | 323 | &data_word(&code_sym(&label("ej4_".$name))); |
330 | &data_word(&label("ej5")."-".&label("PIC_point")); | 324 | &data_word(&code_sym(&label("ej5_".$name))); |
331 | &data_word(&label("ej6")."-".&label("PIC_point")); | 325 | &data_word(&code_sym(&label("ej6_".$name))); |
332 | &data_word(&label("ej7")."-".&label("PIC_point")); | 326 | &data_word(&code_sym(&label("ej7_".$name))); |
333 | # not used | 327 | &previous(); |
334 | #&set_label("cbc_dec_jmp_table",1); | ||
335 | #&data_word("0"); | ||
336 | #&data_word(&label("dj1")."-".&label("PIC_point")); | ||
337 | #&data_word(&label("dj2")."-".&label("PIC_point")); | ||
338 | #&data_word(&label("dj3")."-".&label("PIC_point")); | ||
339 | #&data_word(&label("dj4")."-".&label("PIC_point")); | ||
340 | #&data_word(&label("dj5")."-".&label("PIC_point")); | ||
341 | #&data_word(&label("dj6")."-".&label("PIC_point")); | ||
342 | #&data_word(&label("dj7")."-".&label("PIC_point")); | ||
343 | &align(64); | ||
344 | 328 | ||
345 | &function_end_B($name); | ||
346 | |||
347 | } | 329 | } |
348 | 330 | ||
349 | 1; | 331 | 1; |