From: Liu-Ermeng Date: Wed, 17 Jan 2024 02:04:32 +0000 (-0800) Subject: Fix sm4-xts aarch64 assembly implementation bug X-Git-Tag: openssl-3.3.0-alpha1~163 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a2561709ab316584d8b0a6220e244094fe507f5;p=thirdparty%2Fopenssl.git Fix sm4-xts aarch64 assembly implementation bug Tested on kunpeng920, to turn on 'VPSM4_EX_CAPABLE'. Signed-off-by: Liu-Ermeng Reviewed-by: Shane Lontis Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/23317) --- diff --git a/crypto/sm4/asm/vpsm4-armv8.pl b/crypto/sm4/asm/vpsm4-armv8.pl index eae3704992c..35b86cd68f6 100755 --- a/crypto/sm4/asm/vpsm4-armv8.pl +++ b/crypto/sm4/asm/vpsm4-armv8.pl @@ -1495,7 +1495,7 @@ $code.=<<___; mov @tweak[1].16b,@tweak[0].16b ___ &rev32_armeb(@tweak[1],@tweak[1]); - &compute_tweak_vec(@tweak[1],@tweak[2]); + &compute_tweak_vec(@tweak[1],@tweak[2],$std); $code.=<<___; b .check_dec${std} @@ -1505,12 +1505,12 @@ $code.=<<___; .check_dec${std}: // encryption:1 decryption:0 cmp $enc,1 - b.eq .prcess_last_2blks${std} + b.eq .process_last_2blks${std} mov @vtmp[0].16B,@tweak[1].16b mov @tweak[1].16B,@tweak[2].16b mov @tweak[2].16B,@vtmp[0].16b -.prcess_last_2blks${std}: +.process_last_2blks${std}: ___ &rev32_armeb(@tweak[1],@tweak[1]); &rev32_armeb(@tweak[2],@tweak[2]); diff --git a/crypto/sm4/asm/vpsm4_ex-armv8.pl b/crypto/sm4/asm/vpsm4_ex-armv8.pl index b7f1a662228..de6ee6110d8 100644 --- a/crypto/sm4/asm/vpsm4_ex-armv8.pl +++ b/crypto/sm4/asm/vpsm4_ex-armv8.pl @@ -1469,7 +1469,7 @@ $code.=<<___; mov @tweak[1].16b,@tweak[0].16b ___ &rev32_armeb(@tweak[1],@tweak[1]); - &compute_tweak_vec(@tweak[1],@tweak[2]); + &compute_tweak_vec(@tweak[1],@tweak[2],$std); $code.=<<___; b .check_dec${std} @@ -1479,12 +1479,12 @@ $code.=<<___; .check_dec${std}: // encryption:1 decryption:0 cmp $enc,1 - b.eq .prcess_last_2blks${std} + b.eq .process_last_2blks${std} mov @vtmp[0].16B,@tweak[1].16b mov @tweak[1].16B,@tweak[2].16b mov @tweak[2].16B,@vtmp[0].16b -.prcess_last_2blks${std}: +.process_last_2blks${std}: ___ &rev32_armeb(@tweak[1],@tweak[1]); &rev32_armeb(@tweak[2],@tweak[2]); diff --git a/test/recipes/30-test_evp_data/evpciph_sm4.txt b/test/recipes/30-test_evp_data/evpciph_sm4.txt index 044264dad3f..793f4447619 100644 --- a/test/recipes/30-test_evp_data/evpciph_sm4.txt +++ b/test/recipes/30-test_evp_data/evpciph_sm4.txt @@ -92,3 +92,9 @@ IV = F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF Plaintext = 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E5130C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17 Ciphertext = E9538251C71D7B80BBE4483FEF497BD1B3DB1A3E60408C575D63FF7DB39F83260869F9E2585FEC9F0B863BF8FD784B8627D16C0DB6D2CFC7 XTSStandard = IEEE + +Cipher = SM4-XTS +Key = FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +IV = 9A785634120000000000000000000000 +Plaintext = 000102030405060708090A0B0C0D0E0F10 +Ciphertext = 9E52443A35410CA0BA5637B94C0766F469