提交 3590ebf2 编写于 作者: M Martin Willi 提交者: Herbert Xu

crypto: testmgr - Add ChaCha20 test vectors from RFC7539

We explicitly set the Initial block Counter by prepending it to the nonce in
Little Endian. The same test vector is used for both encryption and decryption,
ChaCha20 is a cipher XORing a keystream.
Signed-off-by: NMartin Willi <martin@strongswan.org>
Acked-by: NSteffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
上级 c08d0e64
...@@ -2307,6 +2307,21 @@ static const struct alg_test_desc alg_test_descs[] = { ...@@ -2307,6 +2307,21 @@ static const struct alg_test_desc alg_test_descs[] = {
} }
} }
} }
}, {
.alg = "chacha20",
.test = alg_test_skcipher,
.suite = {
.cipher = {
.enc = {
.vecs = chacha20_enc_tv_template,
.count = CHACHA20_ENC_TEST_VECTORS
},
.dec = {
.vecs = chacha20_enc_tv_template,
.count = CHACHA20_ENC_TEST_VECTORS
},
}
}
}, { }, {
.alg = "cmac(aes)", .alg = "cmac(aes)",
.test = alg_test_hash, .test = alg_test_hash,
......
...@@ -28427,6 +28427,183 @@ static struct cipher_testvec salsa20_stream_enc_tv_template[] = { ...@@ -28427,6 +28427,183 @@ static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
}, },
}; };
#define CHACHA20_ENC_TEST_VECTORS 3
static struct cipher_testvec chacha20_enc_tv_template[] = {
{ /* RFC7539 A.2. Test Vector #1 */
.key = "\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00",
.klen = 32,
.iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00",
.input = "\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00",
.ilen = 64,
.result = "\x76\xb8\xe0\xad\xa0\xf1\x3d\x90"
"\x40\x5d\x6a\xe5\x53\x86\xbd\x28"
"\xbd\xd2\x19\xb8\xa0\x8d\xed\x1a"
"\xa8\x36\xef\xcc\x8b\x77\x0d\xc7"
"\xda\x41\x59\x7c\x51\x57\x48\x8d"
"\x77\x24\xe0\x3f\xb8\xd8\x4a\x37"
"\x6a\x43\xb8\xf4\x15\x18\xa1\x1c"
"\xc3\x87\xb6\x69\xb2\xee\x65\x86",
.rlen = 64,
}, { /* RFC7539 A.2. Test Vector #2 */
.key = "\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x01",
.klen = 32,
.iv = "\x01\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x02",
.input = "\x41\x6e\x79\x20\x73\x75\x62\x6d"
"\x69\x73\x73\x69\x6f\x6e\x20\x74"
"\x6f\x20\x74\x68\x65\x20\x49\x45"
"\x54\x46\x20\x69\x6e\x74\x65\x6e"
"\x64\x65\x64\x20\x62\x79\x20\x74"
"\x68\x65\x20\x43\x6f\x6e\x74\x72"
"\x69\x62\x75\x74\x6f\x72\x20\x66"
"\x6f\x72\x20\x70\x75\x62\x6c\x69"
"\x63\x61\x74\x69\x6f\x6e\x20\x61"
"\x73\x20\x61\x6c\x6c\x20\x6f\x72"
"\x20\x70\x61\x72\x74\x20\x6f\x66"
"\x20\x61\x6e\x20\x49\x45\x54\x46"
"\x20\x49\x6e\x74\x65\x72\x6e\x65"
"\x74\x2d\x44\x72\x61\x66\x74\x20"
"\x6f\x72\x20\x52\x46\x43\x20\x61"
"\x6e\x64\x20\x61\x6e\x79\x20\x73"
"\x74\x61\x74\x65\x6d\x65\x6e\x74"
"\x20\x6d\x61\x64\x65\x20\x77\x69"
"\x74\x68\x69\x6e\x20\x74\x68\x65"
"\x20\x63\x6f\x6e\x74\x65\x78\x74"
"\x20\x6f\x66\x20\x61\x6e\x20\x49"
"\x45\x54\x46\x20\x61\x63\x74\x69"
"\x76\x69\x74\x79\x20\x69\x73\x20"
"\x63\x6f\x6e\x73\x69\x64\x65\x72"
"\x65\x64\x20\x61\x6e\x20\x22\x49"
"\x45\x54\x46\x20\x43\x6f\x6e\x74"
"\x72\x69\x62\x75\x74\x69\x6f\x6e"
"\x22\x2e\x20\x53\x75\x63\x68\x20"
"\x73\x74\x61\x74\x65\x6d\x65\x6e"
"\x74\x73\x20\x69\x6e\x63\x6c\x75"
"\x64\x65\x20\x6f\x72\x61\x6c\x20"
"\x73\x74\x61\x74\x65\x6d\x65\x6e"
"\x74\x73\x20\x69\x6e\x20\x49\x45"
"\x54\x46\x20\x73\x65\x73\x73\x69"
"\x6f\x6e\x73\x2c\x20\x61\x73\x20"
"\x77\x65\x6c\x6c\x20\x61\x73\x20"
"\x77\x72\x69\x74\x74\x65\x6e\x20"
"\x61\x6e\x64\x20\x65\x6c\x65\x63"
"\x74\x72\x6f\x6e\x69\x63\x20\x63"
"\x6f\x6d\x6d\x75\x6e\x69\x63\x61"
"\x74\x69\x6f\x6e\x73\x20\x6d\x61"
"\x64\x65\x20\x61\x74\x20\x61\x6e"
"\x79\x20\x74\x69\x6d\x65\x20\x6f"
"\x72\x20\x70\x6c\x61\x63\x65\x2c"
"\x20\x77\x68\x69\x63\x68\x20\x61"
"\x72\x65\x20\x61\x64\x64\x72\x65"
"\x73\x73\x65\x64\x20\x74\x6f",
.ilen = 375,
.result = "\xa3\xfb\xf0\x7d\xf3\xfa\x2f\xde"
"\x4f\x37\x6c\xa2\x3e\x82\x73\x70"
"\x41\x60\x5d\x9f\x4f\x4f\x57\xbd"
"\x8c\xff\x2c\x1d\x4b\x79\x55\xec"
"\x2a\x97\x94\x8b\xd3\x72\x29\x15"
"\xc8\xf3\xd3\x37\xf7\xd3\x70\x05"
"\x0e\x9e\x96\xd6\x47\xb7\xc3\x9f"
"\x56\xe0\x31\xca\x5e\xb6\x25\x0d"
"\x40\x42\xe0\x27\x85\xec\xec\xfa"
"\x4b\x4b\xb5\xe8\xea\xd0\x44\x0e"
"\x20\xb6\xe8\xdb\x09\xd8\x81\xa7"
"\xc6\x13\x2f\x42\x0e\x52\x79\x50"
"\x42\xbd\xfa\x77\x73\xd8\xa9\x05"
"\x14\x47\xb3\x29\x1c\xe1\x41\x1c"
"\x68\x04\x65\x55\x2a\xa6\xc4\x05"
"\xb7\x76\x4d\x5e\x87\xbe\xa8\x5a"
"\xd0\x0f\x84\x49\xed\x8f\x72\xd0"
"\xd6\x62\xab\x05\x26\x91\xca\x66"
"\x42\x4b\xc8\x6d\x2d\xf8\x0e\xa4"
"\x1f\x43\xab\xf9\x37\xd3\x25\x9d"
"\xc4\xb2\xd0\xdf\xb4\x8a\x6c\x91"
"\x39\xdd\xd7\xf7\x69\x66\xe9\x28"
"\xe6\x35\x55\x3b\xa7\x6c\x5c\x87"
"\x9d\x7b\x35\xd4\x9e\xb2\xe6\x2b"
"\x08\x71\xcd\xac\x63\x89\x39\xe2"
"\x5e\x8a\x1e\x0e\xf9\xd5\x28\x0f"
"\xa8\xca\x32\x8b\x35\x1c\x3c\x76"
"\x59\x89\xcb\xcf\x3d\xaa\x8b\x6c"
"\xcc\x3a\xaf\x9f\x39\x79\xc9\x2b"
"\x37\x20\xfc\x88\xdc\x95\xed\x84"
"\xa1\xbe\x05\x9c\x64\x99\xb9\xfd"
"\xa2\x36\xe7\xe8\x18\xb0\x4b\x0b"
"\xc3\x9c\x1e\x87\x6b\x19\x3b\xfe"
"\x55\x69\x75\x3f\x88\x12\x8c\xc0"
"\x8a\xaa\x9b\x63\xd1\xa1\x6f\x80"
"\xef\x25\x54\xd7\x18\x9c\x41\x1f"
"\x58\x69\xca\x52\xc5\xb8\x3f\xa3"
"\x6f\xf2\x16\xb9\xc1\xd3\x00\x62"
"\xbe\xbc\xfd\x2d\xc5\xbc\xe0\x91"
"\x19\x34\xfd\xa7\x9a\x86\xf6\xe6"
"\x98\xce\xd7\x59\xc3\xff\x9b\x64"
"\x77\x33\x8f\x3d\xa4\xf9\xcd\x85"
"\x14\xea\x99\x82\xcc\xaf\xb3\x41"
"\xb2\x38\x4d\xd9\x02\xf3\xd1\xab"
"\x7a\xc6\x1d\xd2\x9c\x6f\x21\xba"
"\x5b\x86\x2f\x37\x30\xe3\x7c\xfd"
"\xc4\xfd\x80\x6c\x22\xf2\x21",
.rlen = 375,
}, { /* RFC7539 A.2. Test Vector #3 */
.key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
"\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
"\x47\x39\x17\xc1\x40\x2b\x80\x09"
"\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
.klen = 32,
.iv = "\x2a\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x02",
.input = "\x27\x54\x77\x61\x73\x20\x62\x72"
"\x69\x6c\x6c\x69\x67\x2c\x20\x61"
"\x6e\x64\x20\x74\x68\x65\x20\x73"
"\x6c\x69\x74\x68\x79\x20\x74\x6f"
"\x76\x65\x73\x0a\x44\x69\x64\x20"
"\x67\x79\x72\x65\x20\x61\x6e\x64"
"\x20\x67\x69\x6d\x62\x6c\x65\x20"
"\x69\x6e\x20\x74\x68\x65\x20\x77"
"\x61\x62\x65\x3a\x0a\x41\x6c\x6c"
"\x20\x6d\x69\x6d\x73\x79\x20\x77"
"\x65\x72\x65\x20\x74\x68\x65\x20"
"\x62\x6f\x72\x6f\x67\x6f\x76\x65"
"\x73\x2c\x0a\x41\x6e\x64\x20\x74"
"\x68\x65\x20\x6d\x6f\x6d\x65\x20"
"\x72\x61\x74\x68\x73\x20\x6f\x75"
"\x74\x67\x72\x61\x62\x65\x2e",
.ilen = 127,
.result = "\x62\xe6\x34\x7f\x95\xed\x87\xa4"
"\x5f\xfa\xe7\x42\x6f\x27\xa1\xdf"
"\x5f\xb6\x91\x10\x04\x4c\x0d\x73"
"\x11\x8e\xff\xa9\x5b\x01\xe5\xcf"
"\x16\x6d\x3d\xf2\xd7\x21\xca\xf9"
"\xb2\x1e\x5f\xb1\x4c\x61\x68\x71"
"\xfd\x84\xc5\x4f\x9d\x65\xb2\x83"
"\x19\x6c\x7f\xe4\xf6\x05\x53\xeb"
"\xf3\x9c\x64\x02\xc4\x22\x34\xe3"
"\x2a\x35\x6b\x3e\x76\x43\x12\xa6"
"\x1a\x55\x32\x05\x57\x16\xea\xd6"
"\x96\x25\x68\xf8\x7d\x3f\x3f\x77"
"\x04\xc6\xa8\xd1\xbc\xd1\xbf\x4d"
"\x50\xd6\x15\x4b\x6d\xa7\x31\xb1"
"\x87\xb5\x8d\xfd\x72\x8a\xfa\x36"
"\x75\x7a\x79\x7a\xc1\x88\xd1",
.rlen = 127,
},
};
/* /*
* CTS (Cipher Text Stealing) mode tests * CTS (Cipher Text Stealing) mode tests
*/ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册