summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/perlasm/cbc.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/perlasm/cbc.pl')
-rw-r--r--src/lib/libcrypto/perlasm/cbc.pl82
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
3491; 3311;