]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: testmgr - Add test vectors for authenc(hmac(sha512),rfc3686(ctr(aes)))
authorAleksander Jan Bajkowski <olek2@wp.pl>
Thu, 5 Mar 2026 20:08:24 +0000 (21:08 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 15 Mar 2026 04:23:13 +0000 (13:23 +0900)
Test vectors were generated starting from existing RFC3686(CTR(AES)) test
vectors and adding HMAC(SHA512) computed with software implementation.
Then, the results were double-checked on Mediatek MT7986 (safexcel).
Platform pass self-tests.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/testmgr.c
crypto/testmgr.h

index 18fa0f3d570106454869ba90fc55ee225ce3701e..84beaa69cd59b931a57810a7d826c7ae38e735bc 100644 (file)
@@ -4281,8 +4281,12 @@ static const struct alg_test_desc alg_test_descs[] = {
                .fips_allowed = 1,
        }, {
                .alg = "authenc(hmac(sha512),rfc3686(ctr(aes)))",
-               .test = alg_test_null,
+               .generic_driver = "authenc(hmac-sha512-lib,rfc3686(ctr(aes-lib)))",
+               .test = alg_test_aead,
                .fips_allowed = 1,
+               .suite = {
+                       .aead = __VECS(hmac_sha512_aes_ctr_rfc3686_tv_temp)
+               }
        }, {
                .alg = "blake2b-160",
                .generic_driver = "blake2b-160-lib",
index faecddec755c9ef6f6a4927172cdaa4b65839bef..458fc8e87673fc61f4665e9d4ffab8dce41c1d0d 100644 (file)
@@ -17148,6 +17148,297 @@ static const struct aead_testvec hmac_md5_des_cbc_tv_temp[] = {
        },
 };
 
+static const struct aead_testvec hmac_sha512_aes_ctr_rfc3686_tv_temp[] = {
+       { /* RFC 3686 Case 1 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x14"    /* enc key length */
+                         "\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"
+                         "\xae\x68\x52\xf8\x12\x10\x67\xcc"
+                         "\x4b\xf7\xa5\x76\x55\x77\xf3\x9e"
+                         "\x00\x00\x00\x30",
+               .klen   = 8 + 64 + 20,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 8,
+               .ptext  = "Single block msg",
+               .plen   = 16,
+               .ctext  = "\xe4\x09\x5d\x4f\xb7\xa7\xb3\x79"
+                         "\x2d\x61\x75\xa3\x26\x13\x11\xb8"
+                         "\xa4\x45\x3a\x44\x9c\xe5\x1c\xd9"
+                         "\x10\x43\x51\x2e\x76\x5e\xf8\x9d"
+                         "\x03\x12\x1a\x31\x00\x33\x10\xb4"
+                         "\x94\x4b\x70\x84\x6c\xda\xb1\x46"
+                         "\x24\xb6\x3b\x2a\xec\xd5\x67\xb8"
+                         "\x65\xa2\xbd\xac\x18\xe2\xf8\x55"
+                         "\xc6\x91\xb0\x92\x84\x2d\x74\x44"
+                         "\xa7\xee\xc3\x44\xa0\x07\x0e\x62",
+               .clen   = 16 + 64,
+       }, { /* RFC 3686 Case 2 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x14"    /* enc key length */
+                         "\x20\x21\x22\x23\x24\x25\x26\x27"
+                         "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+                         "\x30\x31\x32\x33\x34\x35\x36\x37"
+                         "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+                         "\x40\x41\x42\x43\x44\x45\x46\x47"
+                         "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+                         "\x50\x51\x52\x53\x54\x55\x56\x57"
+                         "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+                         "\x7e\x24\x06\x78\x17\xfa\xe0\xd7"
+                         "\x43\xd6\xce\x1f\x32\x53\x91\x63"
+                         "\x00\x6c\xb6\xdb",
+               .klen   = 8 + 64 + 20,
+               .iv     = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
+               .assoc  = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
+               .alen   = 8,
+               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x10\x11\x12\x13\x14\x15\x16\x17"
+                         "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
+               .plen   = 32,
+               .ctext  = "\x51\x04\xa1\x06\x16\x8a\x72\xd9"
+                         "\x79\x0d\x41\xee\x8e\xda\xd3\x88"
+                         "\xeb\x2e\x1e\xfc\x46\xda\x57\xc8"
+                         "\xfc\xe6\x30\xdf\x91\x41\xbe\x28"
+                         "\xec\x67\x0d\xb3\xbd\x98\x13\x01"
+                         "\x2b\x04\x9b\xe6\x06\x67\x3c\x76"
+                         "\xcd\x41\xb7\xcc\x70\x6c\x7f\xc8"
+                         "\x67\xbd\x22\x39\xb2\xaa\xe8\x88"
+                         "\xe0\x4f\x81\x52\xdf\xc9\xc3\xd6"
+                         "\x44\xf4\x66\x33\x87\x64\x61\x02"
+                         "\x02\xa2\x64\x15\x2b\xe9\x0b\x3d"
+                         "\x4c\xea\xa1\xa5\xa7\xc9\xd3\x1b",
+               .clen   = 32 + 64,
+       }, { /* RFC 3686 Case 3 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x14"    /* enc key length */
+                         "\x11\x22\x33\x44\x55\x66\x77\x88"
+                         "\x99\xaa\xbb\xcc\xdd\xee\xff\x11"
+                         "\x22\x33\x44\x55\x66\x77\x88\x99"
+                         "\xaa\xbb\xcc\xdd\xee\xff\x11\x22"
+                         "\x33\x44\x55\x66\x77\x88\x99\xaa"
+                         "\xbb\xcc\xdd\xee\xff\x11\x22\x33"
+                         "\x44\x55\x66\x77\x88\x99\xaa\xbb"
+                         "\xcc\xdd\xee\xff\x11\x22\x33\x44"
+                         "\x76\x91\xbe\x03\x5e\x50\x20\xa8"
+                         "\xac\x6e\x61\x85\x29\xf9\xa0\xdc"
+                         "\x00\xe0\x01\x7b",
+               .klen   = 8 + 64 + 20,
+               .iv     = "\x27\x77\x7f\x3f\x4a\x17\x86\xf0",
+               .assoc  = "\x27\x77\x7f\x3f\x4a\x17\x86\xf0",
+               .alen   = 8,
+               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x10\x11\x12\x13\x14\x15\x16\x17"
+                         "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+                         "\x20\x21\x22\x23",
+               .plen   = 36,
+               .ctext  = "\xc1\xcf\x48\xa8\x9f\x2f\xfd\xd9"
+                         "\xcf\x46\x52\xe9\xef\xdb\x72\xd7"
+                         "\x45\x40\xa4\x2b\xde\x6d\x78\x36"
+                         "\xd5\x9a\x5c\xea\xae\xf3\x10\x53"
+                         "\x25\xb2\x07\x2f"
+                         "\x6f\x90\xb6\xa3\x35\x43\x59\xff"
+                         "\x1e\x32\xd6\xfe\xfa\x33\xf9\xf0"
+                         "\x31\x2f\x03\x2d\x88\x1d\xab\xbf"
+                         "\x0e\x19\x16\xd9\xf3\x98\x3e\xdd"
+                         "\x0c\xec\xfe\xe8\x89\x13\x91\x15"
+                         "\xf6\x61\x65\x5c\x1b\x7d\xde\xc0"
+                         "\xe4\xba\x6d\x27\xe2\x89\x23\x24"
+                         "\x15\x82\x37\x3d\x48\xd3\xc9\x32",
+               .clen   = 36 + 64,
+       }, { /* RFC 3686 Case 4 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x1c"    /* enc key length */
+                         "\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"
+                         "\x16\xaf\x5b\x14\x5f\xc9\xf5\x79"
+                         "\xc1\x75\xf9\x3e\x3b\xfb\x0e\xed"
+                         "\x86\x3d\x06\xcc\xfd\xb7\x85\x15"
+                         "\x00\x00\x00\x48",
+               .klen   = 8 + 64 + 28,
+               .iv     = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
+               .assoc  = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
+               .alen   = 8,
+               .ptext  = "Single block msg",
+               .plen   = 16,
+               .ctext  = "\x4b\x55\x38\x4f\xe2\x59\xc9\xc8"
+                         "\x4e\x79\x35\xa0\x03\xcb\xe9\x28"
+                         "\x25\xea\xdc\xad\x52\xb8\x0f\x70"
+                         "\xe7\x39\x83\x80\x10\x3f\x18\xc4"
+                         "\xf8\x59\x14\x25\x5f\xba\x20\x87"
+                         "\x0b\x04\x5e\xf7\xde\x41\x39\xff"
+                         "\xa2\xee\x84\x3f\x9d\x38\xfd\x17"
+                         "\xc0\x66\x5e\x74\x39\xe3\xd3\xd7"
+                         "\x3d\xbc\xe3\x99\x2f\xe7\xef\x37"
+                         "\x61\x03\xf3\x9e\x01\xaf\xba\x9d",
+               .clen   = 16 + 64,
+       }, { /* RFC 3686 Case 5 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x1c"    /* enc key length */
+                         "\x20\x21\x22\x23\x24\x25\x26\x27"
+                         "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+                         "\x30\x31\x32\x33\x34\x35\x36\x37"
+                         "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+                         "\x40\x41\x42\x43\x44\x45\x46\x47"
+                         "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+                         "\x50\x51\x52\x53\x54\x55\x56\x57"
+                         "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+                         "\x7c\x5c\xb2\x40\x1b\x3d\xc3\x3c"
+                         "\x19\xe7\x34\x08\x19\xe0\xf6\x9c"
+                         "\x67\x8c\x3d\xb8\xe6\xf6\xa9\x1a"
+                         "\x00\x96\xb0\x3b",
+               .klen   = 8 + 64 + 28,
+               .iv     = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
+               .assoc  = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
+               .alen   = 8,
+               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x10\x11\x12\x13\x14\x15\x16\x17"
+                         "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
+               .plen   = 32,
+               .ctext  = "\x45\x32\x43\xfc\x60\x9b\x23\x32"
+                         "\x7e\xdf\xaa\xfa\x71\x31\xcd\x9f"
+                         "\x84\x90\x70\x1c\x5a\xd4\xa7\x9c"
+                         "\xfc\x1f\xe0\xff\x42\xf4\xfb\x00"
+                         "\x51\xa3\xe6\x1d\x23\x7d\xd1\x18"
+                         "\x55\x9c\x1c\x92\x2b\xc2\xcd\xfe"
+                         "\x8a\xa8\xa5\x96\x65\x2e\x9d\xdb"
+                         "\x06\xd2\x1c\x57\x2b\x76\xb5\x9c"
+                         "\xd4\x3e\x8b\x61\x54\x2d\x08\xe5"
+                         "\xb2\xf8\x88\x20\x0c\xad\xe8\x85"
+                         "\x61\x8e\x5c\xa4\x96\x2c\xe2\x7d"
+                         "\x4f\xb6\x1d\xb2\x8c\xd7\xe3\x38",
+               .clen   = 32 + 64,
+       }, { /* RFC 3686 Case 7 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x24"    /* enc key length */
+                         "\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"
+                         "\x77\x6b\xef\xf2\x85\x1d\xb0\x6f"
+                         "\x4c\x8a\x05\x42\xc8\x69\x6f\x6c"
+                         "\x6a\x81\xaf\x1e\xec\x96\xb4\xd3"
+                         "\x7f\xc1\xd6\x89\xe6\xc1\xc1\x04"
+                         "\x00\x00\x00\x60",
+               .klen   = 8 + 64 + 36,
+               .iv     = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
+               .assoc  = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
+               .alen   = 8,
+               .ptext  = "Single block msg",
+               .plen   = 16,
+               .ctext  = "\x14\x5a\xd0\x1d\xbf\x82\x4e\xc7"
+                         "\x56\x08\x63\xdc\x71\xe3\xe0\xc0"
+                         "\x6b\x68\x0b\x99\x9a\x4d\xc8\xb9"
+                         "\x35\xea\xcd\x56\x3f\x40\xa2\xb6"
+                         "\x68\xda\x59\xd8\xa0\x89\xcd\x52"
+                         "\xb1\x6e\xed\xc1\x42\x10\xa5\x0f"
+                         "\x88\x0b\x80\xce\xc4\x67\xf0\x45"
+                         "\x5d\xb2\x9e\xde\x1c\x79\x52\x0d"
+                         "\xff\x75\x36\xd5\x0f\x52\x8e\xe5"
+                         "\x31\x85\xcf\x1d\x31\xf8\x62\x67",
+               .clen   = 16 + 64,
+       }, { /* RFC 3686 Case 8 */
+#ifdef __LITTLE_ENDIAN
+               .key    = "\x08\x00"            /* rta length */
+                         "\x01\x00"            /* rta type */
+#else
+               .key    = "\x00\x08"            /* rta length */
+                         "\x00\x01"            /* rta type */
+#endif
+                         "\x00\x00\x00\x24"    /* enc key length */
+                         "\x20\x21\x22\x23\x24\x25\x26\x27"
+                         "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+                         "\x30\x31\x32\x33\x34\x35\x36\x37"
+                         "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+                         "\x40\x41\x42\x43\x44\x45\x46\x47"
+                         "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+                         "\x50\x51\x52\x53\x54\x55\x56\x57"
+                         "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+                         "\xf6\xd6\x6d\x6b\xd5\x2d\x59\xbb"
+                         "\x07\x96\x36\x58\x79\xef\xf8\x86"
+                         "\xc6\x6d\xd5\x1a\x5b\x6a\x99\x74"
+                         "\x4b\x50\x59\x0c\x87\xa2\x38\x84"
+                         "\x00\xfa\xac\x24",
+               .klen   = 8 + 64 + 36,
+               .iv     = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
+               .assoc  = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
+               .alen   = 8,
+               .ptext  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x10\x11\x12\x13\x14\x15\x16\x17"
+                         "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
+               .plen   = 32,
+               .ctext  = "\xf0\x5e\x23\x1b\x38\x94\x61\x2c"
+                         "\x49\xee\x00\x0b\x80\x4e\xb2\xa9"
+                         "\xb8\x30\x6b\x50\x8f\x83\x9d\x6a"
+                         "\x55\x30\x83\x1d\x93\x44\xaf\x1c"
+                         "\x9a\xac\x38\xbd\xf3\xcf\xd5\xd0"
+                         "\x09\x07\xa6\xe1\x7f\xd6\x79\x98"
+                         "\x4e\x90\x0e\xc0\x3d\xa0\xf2\x12"
+                         "\x52\x79\x9c\x17\xff\xb9\xb8\xe3"
+                         "\x2f\x31\xcb\xbd\x63\x70\x72\x7b"
+                         "\x4e\x1e\xd1\xde\xb5\x6b\x7d\x54"
+                         "\x68\x56\xdd\xe5\x53\xee\x29\xd2"
+                         "\x85\xa1\x73\x61\x00\xa9\x26\x8f",
+               .clen   = 32 + 64,
+       },
+};
+
 static const struct aead_testvec hmac_sha1_des_cbc_tv_temp[] = {
        { /*Generated with cryptopp*/
 #ifdef __LITTLE_ENDIAN