crypto: testmgr - introduce SM4 tests
authorGilad Ben-Yossef <gilad@benyossef.com>
Tue, 6 Mar 2018 09:44:43 +0000 (09:44 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 16 Mar 2018 15:35:50 +0000 (23:35 +0800)
Add testmgr tests for the newly introduced SM4 ECB symmetric cipher.

Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/tcrypt.c
crypto/testmgr.c
crypto/testmgr.h

index 14213a096fd29df0b12e2c23142289890c68d16d..51fe7c8744ae355c7ccf7f899505474a6aff0fc4 100644 (file)
@@ -1983,6 +1983,9 @@ static int do_test(const char *alg, u32 type, u32 mask, int m)
        case 190:
                ret += tcrypt_test("authenc(hmac(sha512),cbc(des3_ede))");
                break;
+       case 191:
+               ret += tcrypt_test("ecb(sm4)");
+               break;
        case 200:
                test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
                                speed_template_16_24_32);
index 9f82e7bc9c56b08755326851ac6a544973389e71..af4a01c5037b367f6ff12eeb5e81de23e850f7ac 100644 (file)
@@ -3000,6 +3000,15 @@ static const struct alg_test_desc alg_test_descs[] = {
                                .dec = __VECS(serpent_dec_tv_template)
                        }
                }
+       }, {
+               .alg = "ecb(sm4)",
+               .test = alg_test_skcipher,
+               .suite = {
+                       .cipher = {
+                               .enc = __VECS(sm4_enc_tv_template),
+                               .dec = __VECS(sm4_dec_tv_template)
+                       }
+               }
        }, {
                .alg = "ecb(speck128)",
                .test = alg_test_skcipher,
index 73ba22c87da980f0a003c31965cf7511f7e7b825..c80ed56a25a310d3ea41c58098108b35f86741bb 100644 (file)
@@ -14323,6 +14323,137 @@ static const struct cipher_testvec serpent_xts_dec_tv_template[] = {
        },
 };
 
+/*
+ * SM4 test vector taken from the draft RFC
+ * https://tools.ietf.org/html/draft-crypto-sm4-00#ref-GBT.32907-2016
+ */
+
+static const struct cipher_testvec sm4_enc_tv_template[] = {
+       { /* SM4 Appendix A: Example Calculations. Example 1. */
+               .key    = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .klen   = 16,
+               .input  = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .ilen   = 16,
+               .result = "\x68\x1E\xDF\x34\xD2\x06\x96\x5E"
+                         "\x86\xB3\xE9\x4F\x53\x6E\x42\x46",
+               .rlen   = 16,
+       }, { /*
+             *  SM4 Appendix A: Example Calculations.
+             *  Last 10 iterations of Example 2.
+             */
+               .key    = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .klen   = 16,
+               .input  = "\x99\x4a\xc3\xe7\xc3\x57\x89\x6a"
+                         "\x81\xfc\xa8\xe\x38\x3e\xef\x80"
+                         "\xb1\x98\xf2\xde\x3f\x4b\xae\xd1"
+                         "\xf0\xf1\x30\x4c\x1\x27\x5a\x8f"
+                         "\x45\xe1\x39\xb7\xae\xff\x1f\x27"
+                         "\xad\x57\x15\xab\x31\x5d\xc\xef"
+                         "\x8c\xc8\x80\xbd\x11\x98\xf3\x7b"
+                         "\xa2\xdd\x14\x20\xf9\xe8\xbb\x82"
+                         "\xf7\x32\xca\x4b\xa8\xf7\xb3\x4d"
+                         "\x27\xd1\xcd\xe6\xb6\x65\x5a\x23"
+                         "\xc2\xf3\x54\x84\x53\xe3\xb9\x20"
+                         "\xa5\x37\x0\xbe\xe7\x7b\x48\xfb"
+                         "\x21\x3d\x9e\x48\x1d\x9e\xf5\xbf"
+                         "\x77\xd5\xb4\x4a\x53\x71\x94\x7a"
+                         "\x88\xa6\x6e\x6\x93\xca\x43\xa5"
+                         "\xc4\xf6\xcd\x53\x4b\x7b\x8e\xfe"
+                         "\xb4\x28\x7c\x42\x29\x32\x5d\x88"
+                         "\xed\xce\x0\x19\xe\x16\x2\x6e"
+                         "\x87\xff\x2c\xac\xe8\xe7\xe9\xbf"
+                         "\x31\x51\xec\x47\xc3\x51\x83\xc1",
+               .ilen   = 160,
+               .result = "\xb1\x98\xf2\xde\x3f\x4b\xae\xd1"
+                         "\xf0\xf1\x30\x4c\x1\x27\x5a\x8f"
+                         "\x45\xe1\x39\xb7\xae\xff\x1f\x27"
+                         "\xad\x57\x15\xab\x31\x5d\xc\xef"
+                         "\x8c\xc8\x80\xbd\x11\x98\xf3\x7b"
+                         "\xa2\xdd\x14\x20\xf9\xe8\xbb\x82"
+                         "\xf7\x32\xca\x4b\xa8\xf7\xb3\x4d"
+                         "\x27\xd1\xcd\xe6\xb6\x65\x5a\x23"
+                         "\xc2\xf3\x54\x84\x53\xe3\xb9\x20"
+                         "\xa5\x37\x0\xbe\xe7\x7b\x48\xfb"
+                         "\x21\x3d\x9e\x48\x1d\x9e\xf5\xbf"
+                         "\x77\xd5\xb4\x4a\x53\x71\x94\x7a"
+                         "\x88\xa6\x6e\x6\x93\xca\x43\xa5"
+                         "\xc4\xf6\xcd\x53\x4b\x7b\x8e\xfe"
+                         "\xb4\x28\x7c\x42\x29\x32\x5d\x88"
+                         "\xed\xce\x0\x19\xe\x16\x2\x6e"
+                         "\x87\xff\x2c\xac\xe8\xe7\xe9\xbf"
+                         "\x31\x51\xec\x47\xc3\x51\x83\xc1"
+                         "\x59\x52\x98\xc7\xc6\xfd\x27\x1f"
+                         "\x4\x2\xf8\x4\xc3\x3d\x3f\x66",
+               .rlen   = 160
+       }
+};
+
+static const struct cipher_testvec sm4_dec_tv_template[] = {
+       { /* SM4 Appendix A: Example Calculations. Example 1. */
+               .key    = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .klen   = 16,
+               .input  = "\x68\x1E\xDF\x34\xD2\x06\x96\x5E"
+                         "\x86\xB3\xE9\x4F\x53\x6E\x42\x46",
+               .ilen   = 16,
+               .result = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .rlen   = 16,
+       }, { /*
+             *  SM4 Appendix A: Example Calculations.
+             *  Last 10 iterations of Example 2.
+             */
+               .key    = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
+                         "\xFE\xDC\xBA\x98\x76\x54\x32\x10",
+               .klen   = 16,
+               .input  = "\xb1\x98\xf2\xde\x3f\x4b\xae\xd1"
+                         "\xf0\xf1\x30\x4c\x1\x27\x5a\x8f"
+                         "\x45\xe1\x39\xb7\xae\xff\x1f\x27"
+                         "\xad\x57\x15\xab\x31\x5d\xc\xef"
+                         "\x8c\xc8\x80\xbd\x11\x98\xf3\x7b"
+                         "\xa2\xdd\x14\x20\xf9\xe8\xbb\x82"
+                         "\xf7\x32\xca\x4b\xa8\xf7\xb3\x4d"
+                         "\x27\xd1\xcd\xe6\xb6\x65\x5a\x23"
+                         "\xc2\xf3\x54\x84\x53\xe3\xb9\x20"
+                         "\xa5\x37\x0\xbe\xe7\x7b\x48\xfb"
+                         "\x21\x3d\x9e\x48\x1d\x9e\xf5\xbf"
+                         "\x77\xd5\xb4\x4a\x53\x71\x94\x7a"
+                         "\x88\xa6\x6e\x6\x93\xca\x43\xa5"
+                         "\xc4\xf6\xcd\x53\x4b\x7b\x8e\xfe"
+                         "\xb4\x28\x7c\x42\x29\x32\x5d\x88"
+                         "\xed\xce\x0\x19\xe\x16\x2\x6e"
+                         "\x87\xff\x2c\xac\xe8\xe7\xe9\xbf"
+                         "\x31\x51\xec\x47\xc3\x51\x83\xc1"
+                         "\x59\x52\x98\xc7\xc6\xfd\x27\x1f"
+                         "\x4\x2\xf8\x4\xc3\x3d\x3f\x66",
+               .ilen   = 160,
+               .result = "\x99\x4a\xc3\xe7\xc3\x57\x89\x6a"
+                         "\x81\xfc\xa8\xe\x38\x3e\xef\x80"
+                         "\xb1\x98\xf2\xde\x3f\x4b\xae\xd1"
+                         "\xf0\xf1\x30\x4c\x1\x27\x5a\x8f"
+                         "\x45\xe1\x39\xb7\xae\xff\x1f\x27"
+                         "\xad\x57\x15\xab\x31\x5d\xc\xef"
+                         "\x8c\xc8\x80\xbd\x11\x98\xf3\x7b"
+                         "\xa2\xdd\x14\x20\xf9\xe8\xbb\x82"
+                         "\xf7\x32\xca\x4b\xa8\xf7\xb3\x4d"
+                         "\x27\xd1\xcd\xe6\xb6\x65\x5a\x23"
+                         "\xc2\xf3\x54\x84\x53\xe3\xb9\x20"
+                         "\xa5\x37\x0\xbe\xe7\x7b\x48\xfb"
+                         "\x21\x3d\x9e\x48\x1d\x9e\xf5\xbf"
+                         "\x77\xd5\xb4\x4a\x53\x71\x94\x7a"
+                         "\x88\xa6\x6e\x6\x93\xca\x43\xa5"
+                         "\xc4\xf6\xcd\x53\x4b\x7b\x8e\xfe"
+                         "\xb4\x28\x7c\x42\x29\x32\x5d\x88"
+                         "\xed\xce\x0\x19\xe\x16\x2\x6e"
+                         "\x87\xff\x2c\xac\xe8\xe7\xe9\xbf"
+                         "\x31\x51\xec\x47\xc3\x51\x83\xc1",
+               .rlen   = 160
+       }
+};
+
 /*
  * Speck test vectors taken from the original paper:
  * "The Simon and Speck Families of Lightweight Block Ciphers"