crypto: xchacha - add test vector from XChaCha20 draft RFC
authorEric Biggers <ebiggers@google.com>
Thu, 6 Dec 2018 20:31:54 +0000 (12:31 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 13 Dec 2018 10:24:58 +0000 (18:24 +0800)
There is a draft specification for XChaCha20 being worked on.  Add the
XChaCha20 test vector from the appendix so that we can be extra sure the
kernel's implementation is compatible.

I also recomputed the ciphertext with XChaCha12 and added it there too,
to keep the tests for XChaCha20 and XChaCha12 in sync.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/testmgr.h

index e7e56a8febbcab2ed27d0597a20b58c11f4e0891..357cf4cbcbb1cb95504d39a989a7f6a849008359 100644 (file)
@@ -32800,7 +32800,94 @@ static const struct cipher_testvec xchacha20_tv_template[] = {
                .also_non_np = 1,
                .np     = 3,
                .tap    = { 1200, 1, 80 },
-       },
+       }, { /* test vector from https://tools.ietf.org/html/draft-arciszewski-xchacha-02#appendix-A.3.2 */
+               .key    = "\x80\x81\x82\x83\x84\x85\x86\x87"
+                         "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+                         "\x90\x91\x92\x93\x94\x95\x96\x97"
+                         "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+               .klen   = 32,
+               .iv     = "\x40\x41\x42\x43\x44\x45\x46\x47"
+                         "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+                         "\x50\x51\x52\x53\x54\x55\x56\x58"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .ptext  = "\x54\x68\x65\x20\x64\x68\x6f\x6c"
+                         "\x65\x20\x28\x70\x72\x6f\x6e\x6f"
+                         "\x75\x6e\x63\x65\x64\x20\x22\x64"
+                         "\x6f\x6c\x65\x22\x29\x20\x69\x73"
+                         "\x20\x61\x6c\x73\x6f\x20\x6b\x6e"
+                         "\x6f\x77\x6e\x20\x61\x73\x20\x74"
+                         "\x68\x65\x20\x41\x73\x69\x61\x74"
+                         "\x69\x63\x20\x77\x69\x6c\x64\x20"
+                         "\x64\x6f\x67\x2c\x20\x72\x65\x64"
+                         "\x20\x64\x6f\x67\x2c\x20\x61\x6e"
+                         "\x64\x20\x77\x68\x69\x73\x74\x6c"
+                         "\x69\x6e\x67\x20\x64\x6f\x67\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x61"
+                         "\x62\x6f\x75\x74\x20\x74\x68\x65"
+                         "\x20\x73\x69\x7a\x65\x20\x6f\x66"
+                         "\x20\x61\x20\x47\x65\x72\x6d\x61"
+                         "\x6e\x20\x73\x68\x65\x70\x68\x65"
+                         "\x72\x64\x20\x62\x75\x74\x20\x6c"
+                         "\x6f\x6f\x6b\x73\x20\x6d\x6f\x72"
+                         "\x65\x20\x6c\x69\x6b\x65\x20\x61"
+                         "\x20\x6c\x6f\x6e\x67\x2d\x6c\x65"
+                         "\x67\x67\x65\x64\x20\x66\x6f\x78"
+                         "\x2e\x20\x54\x68\x69\x73\x20\x68"
+                         "\x69\x67\x68\x6c\x79\x20\x65\x6c"
+                         "\x75\x73\x69\x76\x65\x20\x61\x6e"
+                         "\x64\x20\x73\x6b\x69\x6c\x6c\x65"
+                         "\x64\x20\x6a\x75\x6d\x70\x65\x72"
+                         "\x20\x69\x73\x20\x63\x6c\x61\x73"
+                         "\x73\x69\x66\x69\x65\x64\x20\x77"
+                         "\x69\x74\x68\x20\x77\x6f\x6c\x76"
+                         "\x65\x73\x2c\x20\x63\x6f\x79\x6f"
+                         "\x74\x65\x73\x2c\x20\x6a\x61\x63"
+                         "\x6b\x61\x6c\x73\x2c\x20\x61\x6e"
+                         "\x64\x20\x66\x6f\x78\x65\x73\x20"
+                         "\x69\x6e\x20\x74\x68\x65\x20\x74"
+                         "\x61\x78\x6f\x6e\x6f\x6d\x69\x63"
+                         "\x20\x66\x61\x6d\x69\x6c\x79\x20"
+                         "\x43\x61\x6e\x69\x64\x61\x65\x2e",
+               .ctext  = "\x45\x59\xab\xba\x4e\x48\xc1\x61"
+                         "\x02\xe8\xbb\x2c\x05\xe6\x94\x7f"
+                         "\x50\xa7\x86\xde\x16\x2f\x9b\x0b"
+                         "\x7e\x59\x2a\x9b\x53\xd0\xd4\xe9"
+                         "\x8d\x8d\x64\x10\xd5\x40\xa1\xa6"
+                         "\x37\x5b\x26\xd8\x0d\xac\xe4\xfa"
+                         "\xb5\x23\x84\xc7\x31\xac\xbf\x16"
+                         "\xa5\x92\x3c\x0c\x48\xd3\x57\x5d"
+                         "\x4d\x0d\x2c\x67\x3b\x66\x6f\xaa"
+                         "\x73\x10\x61\x27\x77\x01\x09\x3a"
+                         "\x6b\xf7\xa1\x58\xa8\x86\x42\x92"
+                         "\xa4\x1c\x48\xe3\xa9\xb4\xc0\xda"
+                         "\xec\xe0\xf8\xd9\x8d\x0d\x7e\x05"
+                         "\xb3\x7a\x30\x7b\xbb\x66\x33\x31"
+                         "\x64\xec\x9e\x1b\x24\xea\x0d\x6c"
+                         "\x3f\xfd\xdc\xec\x4f\x68\xe7\x44"
+                         "\x30\x56\x19\x3a\x03\xc8\x10\xe1"
+                         "\x13\x44\xca\x06\xd8\xed\x8a\x2b"
+                         "\xfb\x1e\x8d\x48\xcf\xa6\xbc\x0e"
+                         "\xb4\xe2\x46\x4b\x74\x81\x42\x40"
+                         "\x7c\x9f\x43\x1a\xee\x76\x99\x60"
+                         "\xe1\x5b\xa8\xb9\x68\x90\x46\x6e"
+                         "\xf2\x45\x75\x99\x85\x23\x85\xc6"
+                         "\x61\xf7\x52\xce\x20\xf9\xda\x0c"
+                         "\x09\xab\x6b\x19\xdf\x74\xe7\x6a"
+                         "\x95\x96\x74\x46\xf8\xd0\xfd\x41"
+                         "\x5e\x7b\xee\x2a\x12\xa1\x14\xc2"
+                         "\x0e\xb5\x29\x2a\xe7\xa3\x49\xae"
+                         "\x57\x78\x20\xd5\x52\x0a\x1f\x3f"
+                         "\xb6\x2a\x17\xce\x6a\x7e\x68\xfa"
+                         "\x7c\x79\x11\x1d\x88\x60\x92\x0b"
+                         "\xc0\x48\xef\x43\xfe\x84\x48\x6c"
+                         "\xcb\x87\xc2\x5f\x0a\xe0\x45\xf0"
+                         "\xcc\xe1\xe7\x98\x9a\x9a\xa2\x20"
+                         "\xa2\x8b\xdd\x48\x27\xe7\x51\xa2"
+                         "\x4a\x6d\x5c\x62\xd7\x90\xa6\x63"
+                         "\x93\xb9\x31\x11\xc1\xa5\x5d\xd7"
+                         "\x42\x1a\x10\x18\x49\x74\xc7\xc5",
+               .len    = 304,
+       }
 };
 
 /*
@@ -33378,7 +33465,94 @@ static const struct cipher_testvec xchacha12_tv_template[] = {
                .also_non_np = 1,
                .np     = 3,
                .tap    = { 1200, 1, 80 },
-       },
+       }, {
+               .key    = "\x80\x81\x82\x83\x84\x85\x86\x87"
+                         "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+                         "\x90\x91\x92\x93\x94\x95\x96\x97"
+                         "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+               .klen   = 32,
+               .iv     = "\x40\x41\x42\x43\x44\x45\x46\x47"
+                         "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+                         "\x50\x51\x52\x53\x54\x55\x56\x58"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .ptext  = "\x54\x68\x65\x20\x64\x68\x6f\x6c"
+                         "\x65\x20\x28\x70\x72\x6f\x6e\x6f"
+                         "\x75\x6e\x63\x65\x64\x20\x22\x64"
+                         "\x6f\x6c\x65\x22\x29\x20\x69\x73"
+                         "\x20\x61\x6c\x73\x6f\x20\x6b\x6e"
+                         "\x6f\x77\x6e\x20\x61\x73\x20\x74"
+                         "\x68\x65\x20\x41\x73\x69\x61\x74"
+                         "\x69\x63\x20\x77\x69\x6c\x64\x20"
+                         "\x64\x6f\x67\x2c\x20\x72\x65\x64"
+                         "\x20\x64\x6f\x67\x2c\x20\x61\x6e"
+                         "\x64\x20\x77\x68\x69\x73\x74\x6c"
+                         "\x69\x6e\x67\x20\x64\x6f\x67\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x61"
+                         "\x62\x6f\x75\x74\x20\x74\x68\x65"
+                         "\x20\x73\x69\x7a\x65\x20\x6f\x66"
+                         "\x20\x61\x20\x47\x65\x72\x6d\x61"
+                         "\x6e\x20\x73\x68\x65\x70\x68\x65"
+                         "\x72\x64\x20\x62\x75\x74\x20\x6c"
+                         "\x6f\x6f\x6b\x73\x20\x6d\x6f\x72"
+                         "\x65\x20\x6c\x69\x6b\x65\x20\x61"
+                         "\x20\x6c\x6f\x6e\x67\x2d\x6c\x65"
+                         "\x67\x67\x65\x64\x20\x66\x6f\x78"
+                         "\x2e\x20\x54\x68\x69\x73\x20\x68"
+                         "\x69\x67\x68\x6c\x79\x20\x65\x6c"
+                         "\x75\x73\x69\x76\x65\x20\x61\x6e"
+                         "\x64\x20\x73\x6b\x69\x6c\x6c\x65"
+                         "\x64\x20\x6a\x75\x6d\x70\x65\x72"
+                         "\x20\x69\x73\x20\x63\x6c\x61\x73"
+                         "\x73\x69\x66\x69\x65\x64\x20\x77"
+                         "\x69\x74\x68\x20\x77\x6f\x6c\x76"
+                         "\x65\x73\x2c\x20\x63\x6f\x79\x6f"
+                         "\x74\x65\x73\x2c\x20\x6a\x61\x63"
+                         "\x6b\x61\x6c\x73\x2c\x20\x61\x6e"
+                         "\x64\x20\x66\x6f\x78\x65\x73\x20"
+                         "\x69\x6e\x20\x74\x68\x65\x20\x74"
+                         "\x61\x78\x6f\x6e\x6f\x6d\x69\x63"
+                         "\x20\x66\x61\x6d\x69\x6c\x79\x20"
+                         "\x43\x61\x6e\x69\x64\x61\x65\x2e",
+               .ctext  = "\x9f\x1a\xab\x8a\x95\xf4\x7e\xcd"
+                         "\xee\x34\xc0\x39\xd6\x23\x43\x94"
+                         "\xf6\x01\xc1\x7f\x60\x91\xa5\x23"
+                         "\x4a\x8a\xe6\xb1\x14\x8b\xd7\x58"
+                         "\xee\x02\xad\xab\xce\x1e\x7d\xdf"
+                         "\xf9\x49\x27\x69\xd0\x8d\x0c\x20"
+                         "\x6e\x17\xc4\xae\x87\x7a\xc6\x61"
+                         "\x91\xe2\x8e\x0a\x1d\x61\xcc\x38"
+                         "\x02\x64\x43\x49\xc6\xb2\x59\x59"
+                         "\x42\xe7\x9d\x83\x00\x60\x90\xd2"
+                         "\xb9\xcd\x97\x6e\xc7\x95\x71\xbc"
+                         "\x23\x31\x58\x07\xb3\xb4\xac\x0b"
+                         "\x87\x64\x56\xe5\xe3\xec\x63\xa1"
+                         "\x71\x8c\x08\x48\x33\x20\x29\x81"
+                         "\xea\x01\x25\x20\xc3\xda\xe6\xee"
+                         "\x6a\x03\xf6\x68\x4d\x26\xa0\x91"
+                         "\x9e\x44\xb8\xc1\xc0\x8f\x5a\x6a"
+                         "\xc0\xcd\xbf\x24\x5e\x40\x66\xd2"
+                         "\x42\x24\xb5\xbf\xc1\xeb\x12\x60"
+                         "\x56\xbe\xb1\xa6\xc4\x0f\xfc\x49"
+                         "\x69\x9f\xcc\x06\x5c\xe3\x26\xd7"
+                         "\x52\xc0\x42\xe8\xb4\x76\xc3\xee"
+                         "\xb2\x97\xe3\x37\x61\x29\x5a\xb5"
+                         "\x8e\xe8\x8c\xc5\x38\xcc\xcb\xec"
+                         "\x64\x1a\xa9\x12\x5f\xf7\x79\xdf"
+                         "\x64\xca\x77\x4e\xbd\xf9\x83\xa0"
+                         "\x13\x27\x3f\x31\x03\x63\x30\x26"
+                         "\x27\x0b\x3e\xb3\x23\x13\x61\x0b"
+                         "\x70\x1d\xd4\xad\x85\x1e\xbf\xdf"
+                         "\xc6\x8e\x4d\x08\xcc\x7e\x77\xbd"
+                         "\x1e\x18\x77\x38\x3a\xfe\xc0\x5d"
+                         "\x16\xfc\xf0\xa9\x2f\xe9\x17\xc7"
+                         "\xd3\x23\x17\x18\xa3\xe6\x54\x77"
+                         "\x6f\x1b\xbe\x8a\x6e\x7e\xca\x97"
+                         "\x08\x05\x36\x76\xaf\x12\x7a\x42"
+                         "\xf7\x7a\xc2\x35\xc3\xb4\x93\x40"
+                         "\x54\x14\x90\xa0\x4d\x65\x1c\x37"
+                         "\x50\x70\x44\x29\x6d\x6e\x62\x68",
+               .len    = 304,
+       }
 };
 
 /* Adiantum test vectors from https://github.com/google/adiantum */