crypto: xchacha - add test vector from XChaCha20 draft RFC

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>
This commit is contained in:
Eric Biggers 2018-12-06 12:31:54 -08:00 committed by Herbert Xu
parent a033aed5a8
commit 5569e8c074

View 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 */