summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/sha
diff options
context:
space:
mode:
authormiod <>2023-02-01 20:45:04 +0000
committermiod <>2023-02-01 20:45:04 +0000
commitdc4b2cf3e0979364f14ff89a07ffafc47435e2e7 (patch)
tree58219f5c6538172b9d00f33bf48c9a61419ec7a0 /src/lib/libcrypto/sha
parent86f42338b2994b620482c37e3d0d9fc3ba1f523b (diff)
downloadopenbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.tar.gz
openbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.tar.bz2
openbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.zip
Move all data blocks from .text to .rodata and cleanup up and homogeneize code
responsible from getting the proper address of those blocks. ok tb@ jsing@
Diffstat (limited to 'src/lib/libcrypto/sha')
-rw-r--r--src/lib/libcrypto/sha/asm/sha1-586.pl26
-rw-r--r--src/lib/libcrypto/sha/asm/sha256-586.pl14
-rw-r--r--src/lib/libcrypto/sha/asm/sha512-586.pl18
3 files changed, 29 insertions, 29 deletions
diff --git a/src/lib/libcrypto/sha/asm/sha1-586.pl b/src/lib/libcrypto/sha/asm/sha1-586.pl
index 1de5e2650e..5928e083c1 100644
--- a/src/lib/libcrypto/sha/asm/sha1-586.pl
+++ b/src/lib/libcrypto/sha/asm/sha1-586.pl
@@ -295,11 +295,9 @@ if ($xmm) {
295 &static_label("avx_shortcut") if ($ymm); 295 &static_label("avx_shortcut") if ($ymm);
296 &static_label("K_XX_XX"); 296 &static_label("K_XX_XX");
297 297
298 &call (&label("pic_point")); # make it PIC! 298 &picsetup($tmp1);
299 &set_label("pic_point"); 299 &picsymbol($T, "OPENSSL_ia32cap_P", $tmp1);
300 &blindpop($tmp1); 300 &picsymbol($tmp1, &label("K_XX_XX"), $tmp1);
301 &picmeup($T,"OPENSSL_ia32cap_P",$tmp1,&label("pic_point"));
302 &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1));
303 301
304 &mov ($A,&DWP(0,$T)); 302 &mov ($A,&DWP(0,$T));
305 &mov ($D,&DWP(4,$T)); 303 &mov ($D,&DWP(4,$T));
@@ -419,10 +417,9 @@ my $_rol=sub { &rol(@_) };
419my $_ror=sub { &ror(@_) }; 417my $_ror=sub { &ror(@_) };
420 418
421&function_begin("_sha1_block_data_order_ssse3"); 419&function_begin("_sha1_block_data_order_ssse3");
422 &call (&label("pic_point")); # make it PIC! 420 &picsetup($tmp1);
423 &set_label("pic_point"); 421 &picsymbol($tmp1, &label("K_XX_XX"), $tmp1);
424 &blindpop($tmp1); 422
425 &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1));
426&set_label("ssse3_shortcut"); 423&set_label("ssse3_shortcut");
427 424
428 &movdqa (@X[3],&QWP(0,$tmp1)); # K_00_19 425 &movdqa (@X[3],&QWP(0,$tmp1)); # K_00_19
@@ -861,10 +858,9 @@ my $_rol=sub { &shld(@_[0],@_) };
861my $_ror=sub { &shrd(@_[0],@_) }; 858my $_ror=sub { &shrd(@_[0],@_) };
862 859
863&function_begin("_sha1_block_data_order_avx"); 860&function_begin("_sha1_block_data_order_avx");
864 &call (&label("pic_point")); # make it PIC! 861 &picsetup($tmp1);
865 &set_label("pic_point"); 862 &picsymbol($tmp1, &label("K_XX_XX"), $tmp1);
866 &blindpop($tmp1); 863
867 &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1));
868&set_label("avx_shortcut"); 864&set_label("avx_shortcut");
869 &vzeroall(); 865 &vzeroall();
870 866
@@ -1213,13 +1209,15 @@ sub Xtail_avx()
1213 &mov (&DWP(16,@T[1]),$E); 1209 &mov (&DWP(16,@T[1]),$E);
1214&function_end("_sha1_block_data_order_avx"); 1210&function_end("_sha1_block_data_order_avx");
1215} 1211}
1212
1213 &rodataseg();
1216&set_label("K_XX_XX",64); 1214&set_label("K_XX_XX",64);
1217&data_word(0x5a827999,0x5a827999,0x5a827999,0x5a827999); # K_00_19 1215&data_word(0x5a827999,0x5a827999,0x5a827999,0x5a827999); # K_00_19
1218&data_word(0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1); # K_20_39 1216&data_word(0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1); # K_20_39
1219&data_word(0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc); # K_40_59 1217&data_word(0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc); # K_40_59
1220&data_word(0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6); # K_60_79 1218&data_word(0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6); # K_60_79
1221&data_word(0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f); # pbswap mask 1219&data_word(0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f); # pbswap mask
1220 &previous();
1222} 1221}
1223&asciz("SHA1 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
1224 1222
1225&asm_finish(); 1223&asm_finish();
diff --git a/src/lib/libcrypto/sha/asm/sha256-586.pl b/src/lib/libcrypto/sha/asm/sha256-586.pl
index 928ec53123..2b05c96063 100644
--- a/src/lib/libcrypto/sha/asm/sha256-586.pl
+++ b/src/lib/libcrypto/sha/asm/sha256-586.pl
@@ -96,16 +96,15 @@ sub BODY_00_15() {
96 &add ($A,"esi"); # h += K256[i] 96 &add ($A,"esi"); # h += K256[i]
97} 97}
98 98
99&static_label("K256");
99&function_begin("sha256_block_data_order"); 100&function_begin("sha256_block_data_order");
100 &mov ("esi",wparam(0)); # ctx 101 &mov ("esi",wparam(0)); # ctx
101 &mov ("edi",wparam(1)); # inp 102 &mov ("edi",wparam(1)); # inp
102 &mov ("eax",wparam(2)); # num 103 &mov ("eax",wparam(2)); # num
103 &mov ("ebx","esp"); # saved sp 104 &mov ("ebx","esp"); # saved sp
104 105
105 &call (&label("pic_point")); # make it PIC! 106 &picsetup($K256);
106&set_label("pic_point"); 107 &picsymbol($K256, &label("K256"), $K256);
107 &blindpop($K256);
108 &lea ($K256,&DWP(&label("K256")."-".&label("pic_point"),$K256));
109 108
110 &sub ("esp",16); 109 &sub ("esp",16);
111 &and ("esp",-64); 110 &and ("esp",-64);
@@ -225,8 +224,10 @@ sub BODY_00_15() {
225 224
226 &mov ("esp",&DWP(12,"esp")); # restore sp 225 &mov ("esp",&DWP(12,"esp")); # restore sp
227&function_end_A(); 226&function_end_A();
227&function_end_B("sha256_block_data_order");
228 228
229&set_label("K256",64); # Yes! I keep it in the code segment! 229 &rodataseg();
230&set_label("K256",64);
230 &data_word(0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5); 231 &data_word(0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5);
231 &data_word(0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5); 232 &data_word(0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5);
232 &data_word(0xd807aa98,0x12835b01,0x243185be,0x550c7dc3); 233 &data_word(0xd807aa98,0x12835b01,0x243185be,0x550c7dc3);
@@ -243,7 +244,6 @@ sub BODY_00_15() {
243 &data_word(0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3); 244 &data_word(0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3);
244 &data_word(0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208); 245 &data_word(0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208);
245 &data_word(0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2); 246 &data_word(0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2);
246&function_end_B("sha256_block_data_order"); 247 &previous();
247&asciz("SHA256 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
248 248
249&asm_finish(); 249&asm_finish();
diff --git a/src/lib/libcrypto/sha/asm/sha512-586.pl b/src/lib/libcrypto/sha/asm/sha512-586.pl
index 163361ebe9..c1d0684e92 100644
--- a/src/lib/libcrypto/sha/asm/sha512-586.pl
+++ b/src/lib/libcrypto/sha/asm/sha512-586.pl
@@ -261,16 +261,18 @@ sub BODY_00_15_x86 {
261} 261}
262 262
263 263
264&static_label("K512");
264&function_begin("sha512_block_data_order"); 265&function_begin("sha512_block_data_order");
265 &mov ("esi",wparam(0)); # ctx 266 &mov ("esi",wparam(0)); # ctx
266 &mov ("edi",wparam(1)); # inp 267 &mov ("edi",wparam(1)); # inp
267 &mov ("eax",wparam(2)); # num 268 &mov ("eax",wparam(2)); # num
268 &mov ("ebx","esp"); # saved sp 269 &mov ("ebx","esp"); # saved sp
269 270
270 &call (&label("pic_point")); # make it PIC! 271 &picsetup($K512);
271&set_label("pic_point"); 272if ($sse2) {
272 &blindpop($K512); 273 &picsymbol("edx", "OPENSSL_ia32cap_P", $K512);
273 &lea ($K512,&DWP(&label("K512")."-".&label("pic_point"),$K512)); 274}
275 &picsymbol($K512, &label("K512"), $K512);
274 276
275 &sub ("esp",16); 277 &sub ("esp",16);
276 &and ("esp",-64); 278 &and ("esp",-64);
@@ -283,7 +285,6 @@ sub BODY_00_15_x86 {
283 &mov (&DWP(12,"esp"),"ebx"); # saved sp 285 &mov (&DWP(12,"esp"),"ebx"); # saved sp
284 286
285if ($sse2) { 287if ($sse2) {
286 &picmeup("edx","OPENSSL_ia32cap_P",$K512,&label("K512"));
287 &bt (&DWP(0,"edx"),"\$IA32CAP_BIT0_SSE2"); 288 &bt (&DWP(0,"edx"),"\$IA32CAP_BIT0_SSE2");
288 &jnc (&label("loop_x86")); 289 &jnc (&label("loop_x86"));
289 290
@@ -556,8 +557,10 @@ if ($sse2) {
556 557
557 &mov ("esp",&DWP(12,"esp")); # restore sp 558 &mov ("esp",&DWP(12,"esp")); # restore sp
558&function_end_A(); 559&function_end_A();
560&function_end_B("sha512_block_data_order");
559 561
560&set_label("K512",64); # Yes! I keep it in the code segment! 562 &rodataseg();
563&set_label("K512",64);
561 &data_word(0xd728ae22,0x428a2f98); # u64 564 &data_word(0xd728ae22,0x428a2f98); # u64
562 &data_word(0x23ef65cd,0x71374491); # u64 565 &data_word(0x23ef65cd,0x71374491); # u64
563 &data_word(0xec4d3b2f,0xb5c0fbcf); # u64 566 &data_word(0xec4d3b2f,0xb5c0fbcf); # u64
@@ -638,7 +641,6 @@ if ($sse2) {
638 &data_word(0xfc657e2a,0x597f299c); # u64 641 &data_word(0xfc657e2a,0x597f299c); # u64
639 &data_word(0x3ad6faec,0x5fcb6fab); # u64 642 &data_word(0x3ad6faec,0x5fcb6fab); # u64
640 &data_word(0x4a475817,0x6c44198c); # u64 643 &data_word(0x4a475817,0x6c44198c); # u64
641&function_end_B("sha512_block_data_order"); 644 &previous();
642&asciz("SHA512 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
643 645
644&asm_finish(); 646&asm_finish();