Fix sm4-xts aarch64 assembly implementation bug
authorLiu-Ermeng <liuermeng2@huawei.com>
Wed, 17 Jan 2024 02:04:32 +0000 (18:04 -0800)
committerTomas Mraz <tomas@openssl.org>
Thu, 8 Feb 2024 08:55:11 +0000 (09:55 +0100)
Tested on kunpeng920, to turn on 'VPSM4_EX_CAPABLE'.

Signed-off-by: Liu-Ermeng <liuermeng2@huawei.com>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23317)

crypto/sm4/asm/vpsm4-armv8.pl
crypto/sm4/asm/vpsm4_ex-armv8.pl
test/recipes/30-test_evp_data/evpciph_sm4.txt

index eae3704992c5514bb2f54a8072c89ce8f92068a6..35b86cd68f63bd752309f17965dc5c7781287141 100755 (executable)
@@ -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]);
index b7f1a662228a1f5765c2192600394d32628b43f7..de6ee6110d821858cc8425be066ea81bb903b32e 100644 (file)
@@ -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]);
index 044264dad3fc1edc72782718f86714921496a427..793f444761989ea54ce4250e48e4d9e36178a811 100644 (file)
@@ -92,3 +92,9 @@ IV = F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
 Plaintext = 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E5130C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17
 Ciphertext =  E9538251C71D7B80BBE4483FEF497BD1B3DB1A3E60408C575D63FF7DB39F83260869F9E2585FEC9F0B863BF8FD784B8627D16C0DB6D2CFC7
 XTSStandard = IEEE
+
+Cipher = SM4-XTS
+Key = FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+IV = 9A785634120000000000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F10
+Ciphertext =  9E52443A35410CA0BA5637B94C0766F469