141d561cbSFan Zhang /* SPDX-License-Identifier: BSD-3-Clause 241d561cbSFan Zhang * Copyright(c) 2019 Intel Corporation 341d561cbSFan Zhang */ 441d561cbSFan Zhang 541d561cbSFan Zhang #include <rte_cryptodev.h> 641d561cbSFan Zhang #include <rte_cryptodev_pmd.h> 741d561cbSFan Zhang 841d561cbSFan Zhang #include "fips_dev_self_test.h" 941d561cbSFan Zhang 1041d561cbSFan Zhang #define IV_OFF (sizeof(struct rte_crypto_op) + sizeof(struct rte_crypto_sym_op)) 1141d561cbSFan Zhang 1241d561cbSFan Zhang #define FIPS_DEV_TEST_DATA_MAX_SIZE 8096 1341d561cbSFan Zhang 1441d561cbSFan Zhang struct fips_dev_self_test_vector { 1541d561cbSFan Zhang const char *name; 1641d561cbSFan Zhang enum rte_crypto_sym_xform_type operation_type; 1741d561cbSFan Zhang 1841d561cbSFan Zhang struct { 1941d561cbSFan Zhang uint8_t data[64]; 2041d561cbSFan Zhang uint16_t len; 2141d561cbSFan Zhang } digest; 2241d561cbSFan Zhang 2341d561cbSFan Zhang struct { 2441d561cbSFan Zhang uint8_t data[256]; 2541d561cbSFan Zhang uint16_t len; 2641d561cbSFan Zhang } key; 2741d561cbSFan Zhang 2841d561cbSFan Zhang struct { 2941d561cbSFan Zhang uint8_t data[16]; 3041d561cbSFan Zhang uint8_t len; 3141d561cbSFan Zhang } iv; 3241d561cbSFan Zhang 3341d561cbSFan Zhang union { 3441d561cbSFan Zhang struct { 3541d561cbSFan Zhang enum rte_crypto_cipher_algorithm algo; 3641d561cbSFan Zhang } cipher; 3741d561cbSFan Zhang 3841d561cbSFan Zhang struct { 3941d561cbSFan Zhang enum rte_crypto_aead_algorithm algo; 4041d561cbSFan Zhang struct { 4141d561cbSFan Zhang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 4241d561cbSFan Zhang uint16_t len; 4341d561cbSFan Zhang } aad; 4441d561cbSFan Zhang } aead; 4541d561cbSFan Zhang 4641d561cbSFan Zhang struct { 4741d561cbSFan Zhang enum rte_crypto_auth_algorithm algo; 4841d561cbSFan Zhang } auth; 4941d561cbSFan Zhang }; 5041d561cbSFan Zhang 5141d561cbSFan Zhang struct { 5241d561cbSFan Zhang const uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 5341d561cbSFan Zhang uint16_t len; 5441d561cbSFan Zhang } input; 5541d561cbSFan Zhang 5641d561cbSFan Zhang struct { 5741d561cbSFan Zhang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 5841d561cbSFan Zhang uint16_t len; 5941d561cbSFan Zhang } output; 6041d561cbSFan Zhang }; 6141d561cbSFan Zhang 6241d561cbSFan Zhang #define GET_MBUF_DATA(data, len, m) \ 6341d561cbSFan Zhang do { \ 6441d561cbSFan Zhang len = rte_pktmbuf_pkt_len(m); \ 6541d561cbSFan Zhang data = rte_pktmbuf_mtod(m, uint8_t *); \ 6641d561cbSFan Zhang } while (0) 6741d561cbSFan Zhang 6841d561cbSFan Zhang 6941d561cbSFan Zhang /* <-- SHA-x HMAC --> */ 7041d561cbSFan Zhang static struct fips_dev_self_test_vector 7141d561cbSFan Zhang SELF_TEST_SHA1_HMAC_test_vector = { 7241d561cbSFan Zhang .name = "SELF_TEST_SHA1_HMAC_test_vector", 7341d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 7441d561cbSFan Zhang 7541d561cbSFan Zhang .auth = { 7641d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 7741d561cbSFan Zhang }, 7841d561cbSFan Zhang .input = { 7941d561cbSFan Zhang .data = { 8041d561cbSFan Zhang 0xed, 0xb2, 0xba, 0x09, 0x99, 0x61, 0xd3, 0x8f, 8141d561cbSFan Zhang 0xd0, 0xa0, 0xa6, 0xa2, 0x35, 0xd6, 0x12, 0x71, 8241d561cbSFan Zhang 0xcb, 0x4d, 0x49, 0x3b, 0x64, 0xd9, 0xde, 0x13, 8341d561cbSFan Zhang 0x5c, 0xbb, 0x1f, 0xe0, 0x86, 0xc4, 0xa4, 0xa7, 8441d561cbSFan Zhang 0x67, 0xbe, 0x28, 0x0d, 0xa2, 0x07, 0x98, 0x17, 8541d561cbSFan Zhang 0xb4, 0x7f, 0x6a, 0x35, 0xe1, 0xa4, 0x30, 0x7f, 8641d561cbSFan Zhang 0x6e, 0xfc, 0x6d, 0x3e, 0x11, 0xb4, 0xa7, 0xae, 8741d561cbSFan Zhang 0xa6, 0x86, 0xbd, 0x02, 0x23, 0xe0, 0x7b, 0xa9, 8841d561cbSFan Zhang 0xce, 0x42, 0x6c, 0xd0, 0xae, 0xe7, 0xef, 0x28, 8941d561cbSFan Zhang 0x3f, 0xa9, 0x8d, 0xe9, 0x6a, 0x1f, 0x8a, 0x17, 9041d561cbSFan Zhang 0xb3, 0x08, 0xba, 0x04, 0xb5, 0xec, 0x96, 0x16, 9141d561cbSFan Zhang 0xcb, 0x00, 0x8f, 0xca, 0x11, 0x4b, 0xa3, 0xf9, 9241d561cbSFan Zhang 0x8b, 0x07, 0x2d, 0x5a, 0xa3, 0x4a, 0x01, 0x49, 9341d561cbSFan Zhang 0xd9, 0xe5, 0xb8, 0xc6, 0xb6, 0x8c, 0x49, 0xc1, 9441d561cbSFan Zhang 0x01, 0x38, 0xda, 0x95, 0x36, 0xca, 0xd5, 0xd2, 9541d561cbSFan Zhang 0x34, 0xf1, 0x3d, 0x3f, 0x36, 0x4d, 0x43, 0x1f 9641d561cbSFan Zhang }, 9741d561cbSFan Zhang .len = 128, 9841d561cbSFan Zhang }, 9941d561cbSFan Zhang .key = { 10041d561cbSFan Zhang .data = { 10141d561cbSFan Zhang 0x8d, 0x8d, 0x15, 0xd8, 0xa9, 0x57, 0x9a, 0xdb, 10241d561cbSFan Zhang 0x2d, 0x62 10341d561cbSFan Zhang }, 10441d561cbSFan Zhang .len = 10, 10541d561cbSFan Zhang }, 10641d561cbSFan Zhang .digest = { 10741d561cbSFan Zhang .data = { 10841d561cbSFan Zhang 0x0c, 0x66, 0x2e, 0x47, 0x93, 0x93, 0x8c, 0xc3, 10941d561cbSFan Zhang 0x7f, 0x3d, 0x51, 0xd2, 0xb4, 0x05, 0x48, 0xec, 11041d561cbSFan Zhang 0x55, 0x91, 0x4f, 0x0d 11141d561cbSFan Zhang }, 11241d561cbSFan Zhang .len = 20, 11341d561cbSFan Zhang }, 11441d561cbSFan Zhang }; 11541d561cbSFan Zhang 11641d561cbSFan Zhang static struct fips_dev_self_test_vector 11741d561cbSFan Zhang SELF_TEST_SHA224_HMAC_test_vector = { 11841d561cbSFan Zhang .name = "SELF_TEST_SHA224_HMAC_test_vector", 11941d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 12041d561cbSFan Zhang .auth = { 12141d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 12241d561cbSFan Zhang }, 12341d561cbSFan Zhang .input = { 12441d561cbSFan Zhang .data = { 12541d561cbSFan Zhang 0x41, 0x18, 0x43, 0xa2, 0x13, 0x87, 0x84, 0x6f, 12641d561cbSFan Zhang 0x3b, 0x9e, 0xd5, 0xfc, 0x54, 0x5a, 0xca, 0xdf, 12741d561cbSFan Zhang 0xa5, 0xb7, 0x03, 0x86, 0xf6, 0x2d, 0xa4, 0xd9, 12841d561cbSFan Zhang 0xa2, 0x7b, 0x04, 0x1b, 0xee, 0xa3, 0xaa, 0x11, 12941d561cbSFan Zhang 0x99, 0x36, 0x75, 0x67, 0xb4, 0xd1, 0x1a, 0x4f, 13041d561cbSFan Zhang 0xb4, 0xe8, 0xd4, 0x6b, 0xc6, 0xc2, 0x56, 0xed, 13141d561cbSFan Zhang 0x62, 0xc5, 0x05, 0xfd, 0x23, 0xf4, 0x64, 0x5b, 13241d561cbSFan Zhang 0xd6, 0xb6, 0xcf, 0x45, 0xd1, 0xd9, 0x6d, 0x9b, 13341d561cbSFan Zhang 0x86, 0xd6, 0x60, 0x41, 0x57, 0x57, 0x3e, 0xc5, 13441d561cbSFan Zhang 0xac, 0xf6, 0xc5, 0x41, 0x43, 0x48, 0xca, 0x83, 13541d561cbSFan Zhang 0xc8, 0x1a, 0x73, 0x6c, 0xa6, 0xfa, 0xa6, 0x96, 13641d561cbSFan Zhang 0x1c, 0xfa, 0xc1, 0x39, 0x93, 0xb0, 0x8c, 0x50, 13741d561cbSFan Zhang 0x2f, 0x81, 0x6c, 0xf7, 0xa4, 0x20, 0xd9, 0x18, 13841d561cbSFan Zhang 0x4b, 0x51, 0x11, 0x46, 0x75, 0xf3, 0x0e, 0xe9, 13941d561cbSFan Zhang 0xff, 0x3d, 0xb6, 0x9c, 0x26, 0x48, 0x53, 0xd3, 14041d561cbSFan Zhang 0x9d, 0xcd, 0x42, 0xc1, 0xdd, 0x31, 0xef, 0x79 14141d561cbSFan Zhang 14241d561cbSFan Zhang }, 14341d561cbSFan Zhang .len = 128, 14441d561cbSFan Zhang }, 14541d561cbSFan Zhang .key = { 14641d561cbSFan Zhang .data = { 14741d561cbSFan Zhang 0x37, 0x14, 0x70, 0x78, 0x39, 0xda, 0xf7, 0x91, 14841d561cbSFan Zhang 0x22, 0xc7, 0x82, 0x41, 0x63, 0x51, 0x38, 0x5e, 14941d561cbSFan Zhang 0x88, 0xa8, 0x1d, 0x31, 0xc9, 0xf6, 0x41, 0xd8, 15041d561cbSFan Zhang 0xdc, 0xe5, 0x38, 0xe9, 0x0e, 0x63, 0xc9, 0x58, 15141d561cbSFan Zhang 0x92, 0xa2, 0xea, 0x9b, 0x19, 0x62, 0xed, 0x0b, 15241d561cbSFan Zhang 0xa3, 0x72, 0xf4, 0x8e, 0x94, 0x74, 0xaa, 0x73, 15341d561cbSFan Zhang 0x0a, 0xe2 15441d561cbSFan Zhang }, 15541d561cbSFan Zhang .len = 50, 15641d561cbSFan Zhang }, 15741d561cbSFan Zhang .digest = { 15841d561cbSFan Zhang .data = { 15941d561cbSFan Zhang 0x33, 0xf1, 0x7a, 0xc8, 0xa5, 0xc6, 0xb5, 0x25, 16041d561cbSFan Zhang 0xdb, 0x8b, 0x86, 0x44, 0xb6, 0xab 16141d561cbSFan Zhang 16241d561cbSFan Zhang }, 16341d561cbSFan Zhang .len = 14, 16441d561cbSFan Zhang }, 16541d561cbSFan Zhang }; 16641d561cbSFan Zhang 16741d561cbSFan Zhang 16841d561cbSFan Zhang static struct fips_dev_self_test_vector 16941d561cbSFan Zhang SELF_TEST_SHA256_HMAC_test_vector = { 17041d561cbSFan Zhang .name = "SELF_TEST_SHA256_HMAC_test_vector", 17141d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 17241d561cbSFan Zhang .auth = { 17341d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 17441d561cbSFan Zhang }, 17541d561cbSFan Zhang .input = { 17641d561cbSFan Zhang .data = { 17741d561cbSFan Zhang 0x1c, 0x43, 0x96, 0xf7, 0xb7, 0xf9, 0x22, 0x8e, 17841d561cbSFan Zhang 0x83, 0x2a, 0x13, 0x69, 0x20, 0x02, 0xba, 0x2a, 17941d561cbSFan Zhang 0xff, 0x43, 0x9d, 0xcb, 0x7f, 0xdd, 0xbf, 0xd4, 18041d561cbSFan Zhang 0x56, 0xc0, 0x22, 0xd1, 0x33, 0xee, 0x89, 0x03, 18141d561cbSFan Zhang 0xa2, 0xd4, 0x82, 0x56, 0x2f, 0xda, 0xa4, 0x93, 18241d561cbSFan Zhang 0xce, 0x39, 0x16, 0xd7, 0x7a, 0x0c, 0x51, 0x44, 18341d561cbSFan Zhang 0x1d, 0xab, 0x26, 0xf6, 0xb0, 0x34, 0x02, 0x38, 18441d561cbSFan Zhang 0xa3, 0x6a, 0x71, 0xf8, 0x7f, 0xc3, 0xe1, 0x79, 18541d561cbSFan Zhang 0xca, 0xbc, 0xa9, 0x48, 0x2b, 0x70, 0x49, 0x71, 18641d561cbSFan Zhang 0xce, 0x69, 0xf3, 0xf2, 0x0a, 0xb6, 0x4b, 0x70, 18741d561cbSFan Zhang 0x41, 0x3d, 0x6c, 0x29, 0x08, 0x53, 0x2b, 0x2a, 18841d561cbSFan Zhang 0x88, 0x8a, 0x9f, 0xc2, 0x24, 0xca, 0xe1, 0x36, 18941d561cbSFan Zhang 0x5d, 0xa4, 0x10, 0xb6, 0xf2, 0xe2, 0x98, 0x90, 19041d561cbSFan Zhang 0x4b, 0x63, 0xb4, 0xa4, 0x17, 0x26, 0x32, 0x18, 19141d561cbSFan Zhang 0x35, 0xa4, 0x77, 0x4d, 0xd0, 0x63, 0xc2, 0x11, 19241d561cbSFan Zhang 0xcf, 0xc8, 0xb5, 0x16, 0x6c, 0x2d, 0x11, 0xa2 19341d561cbSFan Zhang }, 19441d561cbSFan Zhang .len = 128, 19541d561cbSFan Zhang }, 19641d561cbSFan Zhang .key = { 19741d561cbSFan Zhang .data = { 19841d561cbSFan Zhang 0x54, 0x48, 0x99, 0x8f, 0x9d, 0x8f, 0x98, 0x53, 19941d561cbSFan Zhang 0x4a, 0xdd, 0xf0, 0xc8, 0xba, 0x63, 0x1c, 0x49, 20041d561cbSFan Zhang 0x6b, 0xf8, 0xa8, 0x00, 0x6c, 0xbb, 0x46, 0xad, 20141d561cbSFan Zhang 0x15, 0xfa, 0x1f, 0xa2, 0xf5, 0x53, 0x67, 0x12, 20241d561cbSFan Zhang 0x0c, 0x19, 0x34, 0x8c, 0x3a, 0xfa, 0x90, 0xc3 20341d561cbSFan Zhang }, 20441d561cbSFan Zhang .len = 40, 20541d561cbSFan Zhang }, 20641d561cbSFan Zhang .digest = { 20741d561cbSFan Zhang .data = { 20841d561cbSFan Zhang 0x7e, 0x8c, 0xba, 0x9d, 0xd9, 0xf0, 0x6e, 0xbd, 20941d561cbSFan Zhang 0xd7, 0xf9, 0x2e, 0x0f, 0x1a, 0x67, 0xc7, 0xf4, 21041d561cbSFan Zhang 0xdf, 0x52, 0x69, 0x3c, 0x21, 0x2b, 0xdd, 0x84, 21141d561cbSFan Zhang 0xf6, 0x73, 0x70, 0xb3, 0x51, 0x53, 0x3c, 0x6c 21241d561cbSFan Zhang }, 21341d561cbSFan Zhang .len = 32, 21441d561cbSFan Zhang }, 21541d561cbSFan Zhang }; 21641d561cbSFan Zhang 21741d561cbSFan Zhang /* HMAC count=34 L=48 SHA384 GENERATE*/ 21841d561cbSFan Zhang static struct fips_dev_self_test_vector 21941d561cbSFan Zhang SELF_TEST_SHA384_HMAC_test_vector = { 22041d561cbSFan Zhang .name = "SELF_TEST_SHA384_HMAC_test_vector", 22141d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 22241d561cbSFan Zhang .auth = { 22341d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 22441d561cbSFan Zhang }, 22541d561cbSFan Zhang .input = { 22641d561cbSFan Zhang .data = { 22741d561cbSFan Zhang 0xf5, 0x10, 0x86, 0xfe, 0x78, 0x15, 0x0f, 0xe4, 22841d561cbSFan Zhang 0x8b, 0xd1, 0x41, 0x5a, 0x47, 0x85, 0xac, 0xc0, 22941d561cbSFan Zhang 0x5a, 0xb8, 0x0e, 0xf0, 0x0b, 0x29, 0x75, 0xce, 23041d561cbSFan Zhang 0x78, 0x07, 0xa4, 0x21, 0x22, 0x64, 0xb8, 0xa1, 23141d561cbSFan Zhang 0xac, 0xe8, 0x0b, 0x50, 0xe0, 0xc2, 0x59, 0x0e, 23241d561cbSFan Zhang 0xf3, 0xe4, 0x21, 0x68, 0x0a, 0x70, 0x4e, 0xb2, 23341d561cbSFan Zhang 0xfc, 0x6d, 0x17, 0x55, 0x5a, 0xbf, 0x24, 0x69, 23441d561cbSFan Zhang 0xad, 0x56, 0xf2, 0x87, 0xfe, 0xa5, 0x78, 0xd8, 23541d561cbSFan Zhang 0x9c, 0x56, 0x0b, 0x72, 0x19, 0x3c, 0x7f, 0xe5, 23641d561cbSFan Zhang 0x96, 0x89, 0x8f, 0x10, 0x40, 0x41, 0x7e, 0x3a, 23741d561cbSFan Zhang 0x1b, 0xee, 0xff, 0x5e, 0xff, 0x96, 0x53, 0xc5, 23841d561cbSFan Zhang 0xe0, 0xea, 0xb1, 0xda, 0x52, 0xc0, 0xea, 0x3b, 23941d561cbSFan Zhang 0x4b, 0xc3, 0x4d, 0x0c, 0x2b, 0x69, 0xc8, 0x90, 24041d561cbSFan Zhang 0xfb, 0x26, 0x51, 0xfa, 0xf2, 0xe0, 0x84, 0x80, 24141d561cbSFan Zhang 0x3e, 0xa2, 0x8e, 0xb2, 0x01, 0x94, 0x49, 0x0a, 24241d561cbSFan Zhang 0x99, 0x2b, 0xa8, 0xc4, 0x24, 0x9d, 0x56, 0xef 24341d561cbSFan Zhang }, 24441d561cbSFan Zhang .len = 128, 24541d561cbSFan Zhang }, 24641d561cbSFan Zhang .key = { 24741d561cbSFan Zhang .data = { 24841d561cbSFan Zhang 0x91, 0x7a, 0x69, 0x8c, 0x82, 0xf4, 0x4f, 0x19, 24941d561cbSFan Zhang 0x57, 0x3b, 0x64, 0x5c, 0x48, 0x79, 0xb8, 0x73, 25041d561cbSFan Zhang 0x0b, 0x58, 0xdf, 0xf4, 0xed, 0xc6, 0xa0, 0xd3, 25141d561cbSFan Zhang 0x21, 0xf5, 0xf1, 0x86, 0x58, 0xa5, 0x24, 0x66, 25241d561cbSFan Zhang 0x92, 0xa5, 0x5b, 0x59, 0x33, 0x97, 0x41, 0xae, 25341d561cbSFan Zhang 0x59, 0xf5, 0xfc, 0x48, 0x6d, 0x51, 0x5d, 0xff, 25441d561cbSFan Zhang 0xf8, 0xe1 25541d561cbSFan Zhang }, 25641d561cbSFan Zhang .len = 50, 25741d561cbSFan Zhang }, 25841d561cbSFan Zhang .digest = { 25941d561cbSFan Zhang .data = { 26041d561cbSFan Zhang 0x77, 0xbf, 0x56, 0x15, 0xec, 0x52, 0xf7, 0x06, 26141d561cbSFan Zhang 0xca, 0x74, 0x64, 0x01, 0xe9, 0xfd, 0xe4, 0x3f, 26241d561cbSFan Zhang 0x15, 0x60, 0x52, 0x37, 0xe5, 0x50, 0xb9, 0x3a, 26341d561cbSFan Zhang 0x84, 0x72, 0xfd, 0x14, 0x4f, 0xc3, 0x9e, 0x5e, 26441d561cbSFan Zhang 0xca, 0x0f, 0xe8, 0x90, 0x83, 0x88, 0x28, 0xa0 26541d561cbSFan Zhang }, 26641d561cbSFan Zhang .len = 40, 26741d561cbSFan Zhang }, 26841d561cbSFan Zhang }; 26941d561cbSFan Zhang 27041d561cbSFan Zhang /* HMAC count=28 L=64 SHA512 GENERATE*/ 27141d561cbSFan Zhang static struct fips_dev_self_test_vector 27241d561cbSFan Zhang SELF_TEST_SHA512_HMAC_test_vector = { 27341d561cbSFan Zhang .name = "SELF_TEST_SHA512_HMAC_test_vector", 27441d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 27541d561cbSFan Zhang .auth = { 27641d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 27741d561cbSFan Zhang }, 27841d561cbSFan Zhang .input = { 27941d561cbSFan Zhang .data = { 28041d561cbSFan Zhang 0x0a, 0x33, 0x1c, 0xe2, 0x00, 0x89, 0xb2, 0x9e, 28141d561cbSFan Zhang 0x94, 0xb2, 0xc5, 0xf5, 0x18, 0xc8, 0xdb, 0xea, 28241d561cbSFan Zhang 0xd4, 0x04, 0x17, 0xa2, 0xa8, 0xd5, 0x00, 0x18, 28341d561cbSFan Zhang 0xf3, 0x2f, 0x85, 0x12, 0xb3, 0x26, 0x3d, 0x54, 28441d561cbSFan Zhang 0xed, 0xbb, 0xf3, 0x13, 0x4f, 0xf6, 0x61, 0xac, 28541d561cbSFan Zhang 0x14, 0x35, 0x3c, 0x96, 0x28, 0xc3, 0x71, 0x95, 28641d561cbSFan Zhang 0x8c, 0xac, 0xaf, 0x31, 0xfd, 0xd0, 0x25, 0x67, 28741d561cbSFan Zhang 0xd0, 0x37, 0x8d, 0x9e, 0x21, 0xa4, 0x69, 0xdd, 28841d561cbSFan Zhang 0x2c, 0x6d, 0x8c, 0x3a, 0xfb, 0x89, 0xdd, 0x96, 28941d561cbSFan Zhang 0x42, 0xeb, 0x58, 0x87, 0x87, 0x0e, 0x55, 0x96, 29041d561cbSFan Zhang 0x85, 0xd2, 0x0d, 0xab, 0xd3, 0x86, 0x5a, 0xc5, 29141d561cbSFan Zhang 0xc1, 0x46, 0xbe, 0xee, 0x83, 0x87, 0xa7, 0x6f, 29241d561cbSFan Zhang 0x91, 0xf0, 0xf1, 0x40, 0x4d, 0x6c, 0xad, 0xc2, 29341d561cbSFan Zhang 0xe6, 0x7d, 0x21, 0xb0, 0x7d, 0xd3, 0x0f, 0x53, 29441d561cbSFan Zhang 0x87, 0x1d, 0x3b, 0xf6, 0x73, 0x1f, 0x27, 0x9a, 29541d561cbSFan Zhang 0x8c, 0x04, 0x21, 0xeb, 0x20, 0xf6, 0x7f, 0x72 29641d561cbSFan Zhang }, 29741d561cbSFan Zhang .len = 128, 29841d561cbSFan Zhang }, 29941d561cbSFan Zhang .key = { 30041d561cbSFan Zhang .data = { 30141d561cbSFan Zhang 0x39, 0xb8, 0x77, 0xb8, 0xe8, 0x2e, 0xcb, 0xd9, 30241d561cbSFan Zhang 0x74, 0x03, 0x25, 0x82, 0x8f, 0xaf, 0x67, 0x21, 30341d561cbSFan Zhang 0xc1, 0x29, 0x04, 0x6e, 0xb0, 0x13, 0x61, 0x44, 30441d561cbSFan Zhang 0xa0, 0x31, 0x82, 0xb1, 0x36, 0x20, 0xe2, 0x49, 30541d561cbSFan Zhang 0x81, 0x45, 0xa2, 0xbf, 0x3b, 0x03, 0xe6, 0xb6, 30641d561cbSFan Zhang 0x4b, 0x31, 0x7d, 0xd4, 0x8f, 0xcb, 0xc0, 0x18, 30741d561cbSFan Zhang 0xd9, 0xe7, 0xbc, 0x6e, 0x37, 0xeb, 0x93, 0x81, 30841d561cbSFan Zhang 0x78, 0xfe, 0x1f, 0xd1, 0xeb, 0xbc, 0xd9, 0x05, 30941d561cbSFan Zhang 0x6a, 0x2e, 0xf9, 0x82, 0x97, 0xf9, 0xdf, 0x3c, 31041d561cbSFan Zhang 0x66, 0xd5, 0xb2, 0xcc, 0xdc, 0x41, 0x47, 0xc4, 31141d561cbSFan Zhang 0x16, 0x76, 0x44, 0x3f, 0x8c, 0x99, 0x85, 0xbc, 31241d561cbSFan Zhang 0x97, 0x34, 0xbe, 0x2c, 0x31, 0xe7, 0x62, 0x49, 31341d561cbSFan Zhang 0xfc, 0x5b, 0xc4, 0x2a 31441d561cbSFan Zhang }, 31541d561cbSFan Zhang .len = 100, 31641d561cbSFan Zhang }, 31741d561cbSFan Zhang .digest = { 31841d561cbSFan Zhang .data = { 31941d561cbSFan Zhang 0x97, 0x16, 0x8f, 0x55, 0x13, 0xc2, 0xe9, 0xbc, 32041d561cbSFan Zhang 0x4b, 0xc5, 0x25, 0xce, 0x27, 0x03, 0x74, 0x0b, 32141d561cbSFan Zhang 0xce, 0x1a, 0x06, 0xec, 0xfe, 0x99, 0xa5, 0x70, 32241d561cbSFan Zhang 0xac, 0x66, 0xc8, 0x3e, 0xde, 0x96, 0x67, 0xcc, 32341d561cbSFan Zhang 0x07, 0xed, 0xf6, 0x64, 0x61, 0x7c, 0xe5, 0x3c 32441d561cbSFan Zhang }, 32541d561cbSFan Zhang .len = 40, 32641d561cbSFan Zhang }, 32741d561cbSFan Zhang }; 32841d561cbSFan Zhang 32941d561cbSFan Zhang /* <-- AES CMAC --> */ 33041d561cbSFan Zhang static struct fips_dev_self_test_vector 33141d561cbSFan Zhang SELF_TEST_AES_CMAC_test_vector = { 33241d561cbSFan Zhang .name = "SELF_TEST_AES_CMAC_test_vector", 33341d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 33441d561cbSFan Zhang .auth = { 33541d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_AES_CMAC, 33641d561cbSFan Zhang }, 33741d561cbSFan Zhang .input = { 33841d561cbSFan Zhang .data = { 33941d561cbSFan Zhang 0x57, 0x88, 0xf6, 0x1e, 0x02, 0x30, 0x47, 0x91, 34041d561cbSFan Zhang 0xb5, 0x2f, 0x40, 0x05, 0x7a, 0xbb, 0x4e, 0x04, 34141d561cbSFan Zhang 0x46, 0x40, 0x3e, 0xf3, 0x74, 0x02, 0x53, 0xdf, 34241d561cbSFan Zhang 0x72, 0x05, 0x96, 0x79, 0xbb, 0x2a, 0x6e, 0x5e, 34341d561cbSFan Zhang 0x05, 0x9a, 0x70, 0x9c, 0xbb 34441d561cbSFan Zhang }, 34541d561cbSFan Zhang .len = 37, 34641d561cbSFan Zhang }, 34741d561cbSFan Zhang .key = { 34841d561cbSFan Zhang .data = { 34941d561cbSFan Zhang 0x18, 0x42, 0x15, 0x14, 0x5d, 0xa4, 0x9d, 0xb4, 35041d561cbSFan Zhang 0x17, 0xe8, 0xbd, 0xd5, 0x73, 0xd6, 0x28, 0x2d 35141d561cbSFan Zhang }, 35241d561cbSFan Zhang .len = 16, 35341d561cbSFan Zhang }, 35441d561cbSFan Zhang .digest = { 35541d561cbSFan Zhang .data = { 35641d561cbSFan Zhang 0x8d, 0xa8, 0xcc, 0xa9, 0xb3, 0x6f, 0x68, 0x57, 35741d561cbSFan Zhang 0x1c, 0x6c, 0x0e, 0x40, 0xa3, 0xf4, 0x10 35841d561cbSFan Zhang }, 35941d561cbSFan Zhang .len = 15, 36041d561cbSFan Zhang }, 36141d561cbSFan Zhang }; 36241d561cbSFan Zhang 36341d561cbSFan Zhang /* <-- AES CCM --> */ 36441d561cbSFan Zhang static struct fips_dev_self_test_vector 36541d561cbSFan Zhang SELF_TEST_AES128_CCM_test_vector = { 36641d561cbSFan Zhang .name = "SELF_TEST_AES128_CCM_test_vector", 36741d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 36841d561cbSFan Zhang .iv = { 36941d561cbSFan Zhang .data = { 37041d561cbSFan Zhang 0x00, 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xB5, 37141d561cbSFan Zhang 0x03, 0x97, 0x76, 0xE7, 0x0C 37241d561cbSFan Zhang }, 37341d561cbSFan Zhang .len = 13, 37441d561cbSFan Zhang }, 37541d561cbSFan Zhang .aead = { 37641d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_CCM, 37741d561cbSFan Zhang .aad = { 37841d561cbSFan Zhang .data = { 37941d561cbSFan Zhang /* 18 bytes padding for AAD */ 38041d561cbSFan Zhang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38141d561cbSFan Zhang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38241d561cbSFan Zhang 0x00, 0x00, 38341d561cbSFan Zhang 0x08, 0x40, 0x0F, 0xD2, 0xE1, 0x28, 0xA5, 0x7C, 38441d561cbSFan Zhang 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xAB, 0xAE, 38541d561cbSFan Zhang 0xA5, 0xB8, 0xFC, 0xBA, 0x00, 0x00 38641d561cbSFan Zhang }, 38741d561cbSFan Zhang .len = 22, 38841d561cbSFan Zhang }, 38941d561cbSFan Zhang }, 39041d561cbSFan Zhang .input = { 39141d561cbSFan Zhang .data = { 39241d561cbSFan Zhang 0xF8, 0xBA, 0x1A, 0x55, 0xD0, 0x2F, 0x85, 0xAE, 39341d561cbSFan Zhang 0x96, 0x7B, 0xB6, 0x2F, 0xB6, 0xCD, 0xA8, 0xEB, 39441d561cbSFan Zhang 0x7E, 0x78, 0xA0, 0x50 39541d561cbSFan Zhang }, 39641d561cbSFan Zhang .len = 20, 39741d561cbSFan Zhang }, 39841d561cbSFan Zhang .key = { 39941d561cbSFan Zhang .data = { 40041d561cbSFan Zhang 0xC9, 0x7C, 0x1F, 0x67, 0xCE, 0x37, 0x11, 0x85, 40141d561cbSFan Zhang 0x51, 0x4A, 0x8A, 0x19, 0xF2, 0xBD, 0xD5, 0x2F 40241d561cbSFan Zhang }, 40341d561cbSFan Zhang .len = 16, 40441d561cbSFan Zhang }, 40541d561cbSFan Zhang .output = { 40641d561cbSFan Zhang .data = { 40741d561cbSFan Zhang 0xF3, 0xD0, 0xA2, 0xFE, 0x9A, 0x3D, 0xBF, 0x23, 40841d561cbSFan Zhang 0x42, 0xA6, 0x43, 0xE4, 0x32, 0x46, 0xE8, 0x0C, 40941d561cbSFan Zhang 0x3C, 0x04, 0xD0, 0x19 41041d561cbSFan Zhang }, 41141d561cbSFan Zhang .len = 20, 41241d561cbSFan Zhang }, 41341d561cbSFan Zhang .digest = { 41441d561cbSFan Zhang .data = { 41541d561cbSFan Zhang 0x78, 0x45, 0xCE, 0x0B, 0x16, 0xF9, 0x76, 0x23 41641d561cbSFan Zhang }, 41741d561cbSFan Zhang .len = 8, 41841d561cbSFan Zhang }, 41941d561cbSFan Zhang }; 42041d561cbSFan Zhang 42141d561cbSFan Zhang /* <-- AES CBC --> */ 42241d561cbSFan Zhang static struct fips_dev_self_test_vector 42341d561cbSFan Zhang SELF_TEST_AES128_CBC_test_vector = { 42441d561cbSFan Zhang .name = "SELF_TEST_AES128_CBC_test_vector", 42541d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 42641d561cbSFan Zhang 42741d561cbSFan Zhang .iv = { 42841d561cbSFan Zhang .data = { 42941d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 43041d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 43141d561cbSFan Zhang }, 43241d561cbSFan Zhang .len = 16, 43341d561cbSFan Zhang }, 43441d561cbSFan Zhang .cipher = { 43541d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 43641d561cbSFan Zhang }, 43741d561cbSFan Zhang .input = { 43841d561cbSFan Zhang .data = { 43941d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 44041d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 44141d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 44241d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 44341d561cbSFan Zhang }, 44441d561cbSFan Zhang .len = 32, 44541d561cbSFan Zhang }, 44641d561cbSFan Zhang .key = { 44741d561cbSFan Zhang .data = { 44841d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 44941d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A 45041d561cbSFan Zhang }, 45141d561cbSFan Zhang .len = 16, 45241d561cbSFan Zhang }, 45341d561cbSFan Zhang .output = { 45441d561cbSFan Zhang .data = { 45541d561cbSFan Zhang 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31, 45641d561cbSFan Zhang 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76, 45741d561cbSFan Zhang 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E, 45841d561cbSFan Zhang 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A, 45941d561cbSFan Zhang }, 46041d561cbSFan Zhang .len = 32, 46141d561cbSFan Zhang }, 46241d561cbSFan Zhang }; 46341d561cbSFan Zhang 46441d561cbSFan Zhang static struct fips_dev_self_test_vector 46541d561cbSFan Zhang SELF_TEST_AES192_CBC_test_vector = { 46641d561cbSFan Zhang .name = "SELF_TEST_AES192_CBC_test_vector", 46741d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 46841d561cbSFan Zhang 46941d561cbSFan Zhang .iv = { 47041d561cbSFan Zhang .data = { 47141d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 47241d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 47341d561cbSFan Zhang }, 47441d561cbSFan Zhang .len = 16, 47541d561cbSFan Zhang }, 47641d561cbSFan Zhang .cipher = { 47741d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 47841d561cbSFan Zhang }, 47941d561cbSFan Zhang .input = { 48041d561cbSFan Zhang .data = { 48141d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 48241d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 48341d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 48441d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 48541d561cbSFan Zhang }, 48641d561cbSFan Zhang .len = 32, 48741d561cbSFan Zhang }, 48841d561cbSFan Zhang .key = { 48941d561cbSFan Zhang .data = { 49041d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 49141d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 49241d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0 49341d561cbSFan Zhang }, 49441d561cbSFan Zhang .len = 24, 49541d561cbSFan Zhang }, 49641d561cbSFan Zhang .output = { 49741d561cbSFan Zhang .data = { 49841d561cbSFan Zhang 0x45, 0xEE, 0x9A, 0xEA, 0x3C, 0x03, 0xFC, 0x4C, 49941d561cbSFan Zhang 0x84, 0x36, 0xB0, 0xDA, 0xB0, 0xDC, 0xF3, 0x5B, 50041d561cbSFan Zhang 0x75, 0xA7, 0xBE, 0x0E, 0xC0, 0x8D, 0x6C, 0xF8, 50141d561cbSFan Zhang 0xC1, 0x0F, 0xD0, 0x35, 0x1D, 0x82, 0xAE, 0x7C, 50241d561cbSFan Zhang }, 50341d561cbSFan Zhang .len = 32, 50441d561cbSFan Zhang }, 50541d561cbSFan Zhang }; 50641d561cbSFan Zhang 50741d561cbSFan Zhang /* AES-256 CBC ENCRYPT*/ 50841d561cbSFan Zhang static struct fips_dev_self_test_vector 50941d561cbSFan Zhang SELF_TEST_AES256_CBC_test_vector = { 51041d561cbSFan Zhang .name = "SELF_TEST_AES256_CBC_test_vector", 51141d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 51241d561cbSFan Zhang 51341d561cbSFan Zhang .iv = { 51441d561cbSFan Zhang .data = { 51541d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 51641d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 51741d561cbSFan Zhang }, 51841d561cbSFan Zhang .len = 16, 51941d561cbSFan Zhang }, 52041d561cbSFan Zhang .cipher = { 52141d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 52241d561cbSFan Zhang }, 52341d561cbSFan Zhang .input = { 52441d561cbSFan Zhang .data = { 52541d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 52641d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 52741d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 52841d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 52941d561cbSFan Zhang }, 53041d561cbSFan Zhang .len = 32, 53141d561cbSFan Zhang }, 53241d561cbSFan Zhang .key = { 53341d561cbSFan Zhang .data = { 53441d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 53541d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 53641d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0, 53741d561cbSFan Zhang 0x37, 0x07, 0xB8, 0x23, 0xA2, 0xA3, 0xB5, 0x8D 53841d561cbSFan Zhang }, 53941d561cbSFan Zhang .len = 32, 54041d561cbSFan Zhang }, 54141d561cbSFan Zhang .output = { 54241d561cbSFan Zhang .data = { 54341d561cbSFan Zhang 0xF3, 0xDD, 0xF0, 0x0B, 0xFF, 0xA2, 0x6A, 0x04, 54441d561cbSFan Zhang 0xBE, 0xDA, 0x52, 0xA6, 0xFE, 0x6B, 0xA6, 0xA7, 54541d561cbSFan Zhang 0x48, 0x1D, 0x7D, 0x98, 0x65, 0xDB, 0xEF, 0x06, 54641d561cbSFan Zhang 0x26, 0xB5, 0x8E, 0xEB, 0x05, 0x0E, 0x77, 0x98, 54741d561cbSFan Zhang }, 54841d561cbSFan Zhang .len = 32, 54941d561cbSFan Zhang }, 55041d561cbSFan Zhang }; 55141d561cbSFan Zhang 55241d561cbSFan Zhang /* DES-128 CBC ENCRYPT*/ 55341d561cbSFan Zhang static struct fips_dev_self_test_vector 55441d561cbSFan Zhang SELF_TEST_3DES_2KEY_CBC_test_vector = { 55541d561cbSFan Zhang .name = "SELF_TEST_3DES_2KEY_CBC_test_vector", 55641d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 55741d561cbSFan Zhang .iv = { 55841d561cbSFan Zhang .data = { 55941d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 56041d561cbSFan Zhang }, 56141d561cbSFan Zhang .len = 8, 56241d561cbSFan Zhang }, 56341d561cbSFan Zhang .cipher = { 56441d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 56541d561cbSFan Zhang }, 56641d561cbSFan Zhang .input = { 56741d561cbSFan Zhang .data = { 56841d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 56941d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 57041d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 57141d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 57241d561cbSFan Zhang }, 57341d561cbSFan Zhang .len = 32, 57441d561cbSFan Zhang }, 57541d561cbSFan Zhang .key = { 57641d561cbSFan Zhang .data = { 57741d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 57841d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 57941d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2 58041d561cbSFan Zhang }, 58141d561cbSFan Zhang .len = 24, 58241d561cbSFan Zhang }, 58341d561cbSFan Zhang .output = { 58441d561cbSFan Zhang .data = { 58541d561cbSFan Zhang 0x28, 0x2a, 0xff, 0x15, 0x5c, 0xdf, 0xd9, 0x6b, 58641d561cbSFan Zhang 0x54, 0xbc, 0x7b, 0xfb, 0xc5, 0x64, 0x4d, 0xdd, 58741d561cbSFan Zhang 0x3e, 0xf2, 0x9e, 0xb7, 0x53, 0x65, 0x37, 0x05, 58841d561cbSFan Zhang 0xe0, 0xdf, 0xae, 0xf7, 0xc9, 0x27, 0xe4, 0xec, 58941d561cbSFan Zhang }, 59041d561cbSFan Zhang .len = 32, 59141d561cbSFan Zhang }, 59241d561cbSFan Zhang }; 59341d561cbSFan Zhang 59441d561cbSFan Zhang static struct fips_dev_self_test_vector 59541d561cbSFan Zhang SELF_TEST_3DES_3KEY_CBC_test_vector = { 59641d561cbSFan Zhang .name = "SELF_TEST_3DES_3KEY_CBC_test_vector", 59741d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 59841d561cbSFan Zhang 59941d561cbSFan Zhang .iv = { 60041d561cbSFan Zhang .data = { 60141d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 60241d561cbSFan Zhang }, 60341d561cbSFan Zhang .len = 8, 60441d561cbSFan Zhang }, 60541d561cbSFan Zhang .cipher = { 60641d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 60741d561cbSFan Zhang }, 60841d561cbSFan Zhang .input = { 60941d561cbSFan Zhang .data = { 61041d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 61141d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 61241d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 61341d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 61441d561cbSFan Zhang }, 61541d561cbSFan Zhang .len = 32, 61641d561cbSFan Zhang }, 61741d561cbSFan Zhang .key = { 61841d561cbSFan Zhang .data = { 61941d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 62041d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 62141d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0 62241d561cbSFan Zhang }, 62341d561cbSFan Zhang .len = 24, 62441d561cbSFan Zhang }, 62541d561cbSFan Zhang .output = { 62641d561cbSFan Zhang .data = { 62741d561cbSFan Zhang 0xd0, 0xc9, 0xdc, 0x51, 0x29, 0x97, 0x03, 0x64, 62841d561cbSFan Zhang 0xcd, 0x22, 0xba, 0x3d, 0x2b, 0xbc, 0x21, 0x37, 62941d561cbSFan Zhang 0x7b, 0x1e, 0x29, 0x23, 0xeb, 0x51, 0x6e, 0xac, 63041d561cbSFan Zhang 0xbe, 0x5b, 0xd3, 0x67, 0xe0, 0x3f, 0xc3, 0xb5, 63141d561cbSFan Zhang }, 63241d561cbSFan Zhang .len = 32, 63341d561cbSFan Zhang }, 63441d561cbSFan Zhang }; 63541d561cbSFan Zhang 63641d561cbSFan Zhang /* <-- AES GCM --> */ 63741d561cbSFan Zhang static struct fips_dev_self_test_vector 63841d561cbSFan Zhang SELF_TEST_AES128_GCM_encrypt_test_vector = { 63941d561cbSFan Zhang .name = "SELF_TEST_AES128_GCM_encrypt_test_vector", 64041d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 64141d561cbSFan Zhang 64241d561cbSFan Zhang .iv = { 64341d561cbSFan Zhang .data = { 64441d561cbSFan Zhang 0x5a, 0xdb, 0x96, 0x09, 0xdb, 0xae, 0xb5, 0x8c, 64541d561cbSFan Zhang 0xbd, 0x6e, 0x72, 0x75 64641d561cbSFan Zhang }, 64741d561cbSFan Zhang .len = 12, 64841d561cbSFan Zhang }, 64941d561cbSFan Zhang .aead = { 65041d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 65141d561cbSFan Zhang .aad = { 65241d561cbSFan Zhang .data = { 65341d561cbSFan Zhang 0x88, 0x31, 0x9d, 0x6e, 0x1d, 0x3f, 0xfa, 0x5f, 65441d561cbSFan Zhang 0x98, 0x71, 0x99, 0x16, 0x6c, 0x8a, 0x9b, 0x56, 65541d561cbSFan Zhang 0xc2, 0xae, 0xba, 0x5a 65641d561cbSFan Zhang }, 65741d561cbSFan Zhang .len = 20, 65841d561cbSFan Zhang }, 65941d561cbSFan Zhang }, 66041d561cbSFan Zhang .input = { 66141d561cbSFan Zhang .data = { 66241d561cbSFan Zhang 0x7c, 0x0e, 0x88, 0xc8, 0x88, 0x99, 0xa7, 0x79, 66341d561cbSFan Zhang 0x22, 0x84, 0x65, 0x07, 0x47, 0x97, 0xcd, 0x4c, 66441d561cbSFan Zhang 0x2e, 0x14, 0x98, 0xd2, 0x59, 0xb5, 0x43, 0x90, 66541d561cbSFan Zhang 0xb8, 0x5e, 0x3e, 0xef, 0x1c, 0x02, 0xdf, 0x60, 66641d561cbSFan Zhang 0xe7, 0x43, 0xf1, 0xb8, 0x40, 0x38, 0x2c, 0x4b, 66741d561cbSFan Zhang 0xcc, 0xaf, 0x3b, 0xaf, 0xb4, 0xca, 0x84, 0x29, 66841d561cbSFan Zhang 0xbe, 0xa0, 0x63 66941d561cbSFan Zhang }, 67041d561cbSFan Zhang .len = 51, 67141d561cbSFan Zhang }, 67241d561cbSFan Zhang .key = { 67341d561cbSFan Zhang .data = { 67441d561cbSFan Zhang 0xfe, 0x47, 0xfc, 0xce, 0x5f, 0xc3, 0x26, 0x65, 67541d561cbSFan Zhang 0xd2, 0xae, 0x39, 0x9e, 0x4e, 0xec, 0x72, 0xba 67641d561cbSFan Zhang }, 67741d561cbSFan Zhang .len = 16, 67841d561cbSFan Zhang }, 67941d561cbSFan Zhang .output = { 68041d561cbSFan Zhang .data = { 68141d561cbSFan Zhang 0x98, 0xf4, 0x82, 0x6f, 0x05, 0xa2, 0x65, 0xe6, 68241d561cbSFan Zhang 0xdd, 0x2b, 0xe8, 0x2d, 0xb2, 0x41, 0xc0, 0xfb, 68341d561cbSFan Zhang 0xbb, 0xf9, 0xff, 0xb1, 0xc1, 0x73, 0xaa, 0x83, 68441d561cbSFan Zhang 0x96, 0x4b, 0x7c, 0xf5, 0x39, 0x30, 0x43, 0x73, 68541d561cbSFan Zhang 0x63, 0x65, 0x25, 0x3d, 0xdb, 0xc5, 0xdb, 0x87, 68641d561cbSFan Zhang 0x78, 0x37, 0x14, 0x95, 0xda, 0x76, 0xd2, 0x69, 68741d561cbSFan Zhang 0xe5, 0xdb, 0x3e 68841d561cbSFan Zhang }, 68941d561cbSFan Zhang .len = 51, 69041d561cbSFan Zhang }, 69141d561cbSFan Zhang .digest = { 69241d561cbSFan Zhang .data = { 69341d561cbSFan Zhang 0x29, 0x1e, 0xf1, 0x98, 0x2e, 0x4d, 0xef, 0xed, 69441d561cbSFan Zhang 0xaa, 0x22, 0x49, 0xf8, 0x98, 0x55, 0x6b, 0x47 69541d561cbSFan Zhang }, 69641d561cbSFan Zhang .len = 16, 69741d561cbSFan Zhang }, 69841d561cbSFan Zhang }; 69941d561cbSFan Zhang 70041d561cbSFan Zhang static struct fips_dev_self_test_vector 70141d561cbSFan Zhang SELF_TEST_AES192_GCM_encrypt_test_vector = { 70241d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 70341d561cbSFan Zhang .name = "SELF_TEST_AES192_GCM_encrypt_test_vector", 70441d561cbSFan Zhang .iv = { 70541d561cbSFan Zhang .data = { 70641d561cbSFan Zhang 0x0b, 0xd4, 0x4f, 0xf4, 0xd2, 0x0c, 0x15, 0xd0, 70741d561cbSFan Zhang 0x4f, 0xc6, 0x1e, 0xe7 70841d561cbSFan Zhang }, 70941d561cbSFan Zhang .len = 12, 71041d561cbSFan Zhang }, 71141d561cbSFan Zhang .aead = { 71241d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 71341d561cbSFan Zhang .aad = { 71441d561cbSFan Zhang .data = { 71541d561cbSFan Zhang 0x9e, 0xa4, 0x2c, 0x50, 0xa7, 0xfd, 0xb8, 0x5e, 71641d561cbSFan Zhang 0x14, 0x1a, 0xa0, 0x84, 0xb4, 0x6b, 0xde, 0x12 71741d561cbSFan Zhang }, 71841d561cbSFan Zhang .len = 16, 71941d561cbSFan Zhang }, 72041d561cbSFan Zhang }, 72141d561cbSFan Zhang .input = { 72241d561cbSFan Zhang .data = { 72341d561cbSFan Zhang 0x56, 0x7c, 0xcb, 0x3f, 0xa0, 0xdb, 0x89, 0x70, 72441d561cbSFan Zhang 0x8a, 0xf3, 0xff, 0x2b, 0xb0, 0x29, 0xdd, 0xec, 72541d561cbSFan Zhang 0x52, 0xc6, 0x69, 0x47, 0x58, 0x5d, 0x29, 0x1a, 72641d561cbSFan Zhang 0x28, 0x56, 0x4b, 0xf5, 0x6d, 0xb7, 0x06, 0xf7 72741d561cbSFan Zhang }, 72841d561cbSFan Zhang .len = 32, 72941d561cbSFan Zhang }, 73041d561cbSFan Zhang .key = { 73141d561cbSFan Zhang .data = { 73241d561cbSFan Zhang 0x0d, 0x4a, 0x90, 0x0d, 0x1b, 0x0b, 0xb5, 0xb7, 73341d561cbSFan Zhang 0xbe, 0x24, 0x38, 0xc2, 0xba, 0x48, 0xfc, 0x45, 73441d561cbSFan Zhang 0x13, 0x4c, 0xc1, 0x98, 0x10, 0x8c, 0xf8, 0x85 73541d561cbSFan Zhang }, 73641d561cbSFan Zhang .len = 24, 73741d561cbSFan Zhang }, 73841d561cbSFan Zhang .output = { 73941d561cbSFan Zhang .data = { 74041d561cbSFan Zhang 0x2f, 0x8a, 0x42, 0xcd, 0x18, 0x3b, 0x03, 0x14, 74141d561cbSFan Zhang 0xfd, 0x20, 0xa3, 0xd9, 0x7d, 0x9e, 0x0c, 0x52, 74241d561cbSFan Zhang 0x17, 0xb0, 0xf0, 0x88, 0xd2, 0xca, 0x87, 0xa8, 74341d561cbSFan Zhang 0x29, 0x0d, 0x4b, 0xae, 0x69, 0xad, 0x83, 0xf5 74441d561cbSFan Zhang }, 74541d561cbSFan Zhang .len = 32, 74641d561cbSFan Zhang }, 74741d561cbSFan Zhang .digest = { 74841d561cbSFan Zhang .data = { 74941d561cbSFan Zhang 0xde, 0x41, 0x45, 0x92, 0xd7, 0x7f, 0x2f, 0x0b, 75041d561cbSFan Zhang 0x50, 0xdf, 0x4a, 0xec, 0x71, 0x4f, 0xad, 0x43 75141d561cbSFan Zhang }, 75241d561cbSFan Zhang .len = 16, 75341d561cbSFan Zhang }, 75441d561cbSFan Zhang }; 75541d561cbSFan Zhang 75641d561cbSFan Zhang static struct fips_dev_self_test_vector 75741d561cbSFan Zhang SELF_TEST_AES256_GCM_encrypt_test_vector = { 75841d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 75941d561cbSFan Zhang .name = "SELF_TEST_AES256_GCM_encrypt_test_vector", 76041d561cbSFan Zhang .iv = { 76141d561cbSFan Zhang .data = { 76241d561cbSFan Zhang 0x5c, 0x1b, 0x21, 0xc8, 0x99, 0x8e, 0xd6, 0x29, 76341d561cbSFan Zhang 0x90, 0x06, 0xd3, 0xf9 76441d561cbSFan Zhang }, 76541d561cbSFan Zhang .len = 12, 76641d561cbSFan Zhang }, 76741d561cbSFan Zhang .aead = { 76841d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 76941d561cbSFan Zhang .aad = { 77041d561cbSFan Zhang .data = { 77141d561cbSFan Zhang 0x22, 0xed, 0x23, 0x59, 0x46, 0x23, 0x5a, 0x85, 77241d561cbSFan Zhang 0xa4, 0x5b, 0xc5, 0xfa, 0xd7, 0x14, 0x0b, 0xfa 77341d561cbSFan Zhang }, 77441d561cbSFan Zhang .len = 16, 77541d561cbSFan Zhang }, 77641d561cbSFan Zhang }, 77741d561cbSFan Zhang .input = { 77841d561cbSFan Zhang .data = { 77941d561cbSFan Zhang 0xad, 0x42, 0x60, 0xe3, 0xcd, 0xc7, 0x6b, 0xcc, 78041d561cbSFan Zhang 0x10, 0xc7, 0xb2, 0xc0, 0x6b, 0x80, 0xb3, 0xbe, 78141d561cbSFan Zhang 0x94, 0x82, 0x58, 0xe5, 0xef, 0x20, 0xc5, 0x08, 78241d561cbSFan Zhang 0xa8, 0x1f, 0x51, 0xe9, 0x6a, 0x51, 0x83, 0x88 78341d561cbSFan Zhang }, 78441d561cbSFan Zhang .len = 32, 78541d561cbSFan Zhang }, 78641d561cbSFan Zhang .key = { 78741d561cbSFan Zhang .data = { 78841d561cbSFan Zhang 0x37, 0xcc, 0xdb, 0xa1, 0xd9, 0x29, 0xd6, 0x43, 78941d561cbSFan Zhang 0x6c, 0x16, 0xbb, 0xa5, 0xb5, 0xff, 0x34, 0xde, 79041d561cbSFan Zhang 0xec, 0x88, 0xed, 0x7d, 0xf3, 0xd1, 0x5d, 0x0f, 79141d561cbSFan Zhang 0x4d, 0xdf, 0x80, 0xc0, 0xc7, 0x31, 0xee, 0x1f 79241d561cbSFan Zhang }, 79341d561cbSFan Zhang .len = 32, 79441d561cbSFan Zhang }, 79541d561cbSFan Zhang .output = { 79641d561cbSFan Zhang .data = { 79741d561cbSFan Zhang 0x3b, 0x33, 0x5f, 0x8b, 0x08, 0xd3, 0x3c, 0xcd, 79841d561cbSFan Zhang 0xca, 0xd2, 0x28, 0xa7, 0x47, 0x00, 0xf1, 0x00, 79941d561cbSFan Zhang 0x75, 0x42, 0xa4, 0xd1, 0xe7, 0xfc, 0x1e, 0xbe, 80041d561cbSFan Zhang 0x3f, 0x44, 0x7f, 0xe7, 0x1a, 0xf2, 0x98, 0x16 80141d561cbSFan Zhang }, 80241d561cbSFan Zhang .len = 32, 80341d561cbSFan Zhang }, 80441d561cbSFan Zhang .digest = { 80541d561cbSFan Zhang .data = { 80641d561cbSFan Zhang 0x1f, 0xbf, 0x49, 0xcc, 0x46, 0xf4, 0x58, 0xbf, 80741d561cbSFan Zhang 0x6e, 0x88, 0xf6, 0x37, 0x09, 0x75, 0xe6, 0xd4 80841d561cbSFan Zhang }, 80941d561cbSFan Zhang .len = 16, 81041d561cbSFan Zhang }, 81141d561cbSFan Zhang }; 81241d561cbSFan Zhang 81341d561cbSFan Zhang 81441d561cbSFan Zhang /* <-- AES CTR --> */ 81541d561cbSFan Zhang static struct fips_dev_self_test_vector 81641d561cbSFan Zhang SELF_TEST_AES128_CTR_test_vector = { 81741d561cbSFan Zhang .name = "SELF_TEST_AES128_CTR_test_vector", 81841d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 81941d561cbSFan Zhang 82041d561cbSFan Zhang .iv = { 82141d561cbSFan Zhang .data = { 82241d561cbSFan Zhang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 82341d561cbSFan Zhang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF 82441d561cbSFan Zhang }, 82541d561cbSFan Zhang .len = 16, 82641d561cbSFan Zhang }, 82741d561cbSFan Zhang .cipher = { 82841d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 82941d561cbSFan Zhang }, 83041d561cbSFan Zhang .input = { 83141d561cbSFan Zhang .data = { 83241d561cbSFan Zhang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 83341d561cbSFan Zhang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 83441d561cbSFan Zhang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, 83541d561cbSFan Zhang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, 83641d561cbSFan Zhang }, 83741d561cbSFan Zhang .len = 32, 83841d561cbSFan Zhang }, 83941d561cbSFan Zhang .key = { 84041d561cbSFan Zhang .data = { 84141d561cbSFan Zhang 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 84241d561cbSFan Zhang 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C 84341d561cbSFan Zhang }, 84441d561cbSFan Zhang .len = 16, 84541d561cbSFan Zhang }, 84641d561cbSFan Zhang .output = { 84741d561cbSFan Zhang .data = { 84841d561cbSFan Zhang 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26, 84941d561cbSFan Zhang 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE, 85041d561cbSFan Zhang 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF, 85141d561cbSFan Zhang 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF, 85241d561cbSFan Zhang }, 85341d561cbSFan Zhang .len = 32, 85441d561cbSFan Zhang }, 85541d561cbSFan Zhang }; 85641d561cbSFan Zhang 85741d561cbSFan Zhang static struct fips_dev_self_test_vector 85841d561cbSFan Zhang SELF_TEST_AES192_CTR_test_vector = { 85941d561cbSFan Zhang .name = "SELF_TEST_AES192_CTR_test_vector", 86041d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 86141d561cbSFan Zhang 86241d561cbSFan Zhang .iv = { 86341d561cbSFan Zhang .data = { 86441d561cbSFan Zhang 0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40, 86541d561cbSFan Zhang 0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57 86641d561cbSFan Zhang }, 86741d561cbSFan Zhang .len = 16, 86841d561cbSFan Zhang }, 86941d561cbSFan Zhang .cipher = { 87041d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 87141d561cbSFan Zhang }, 87241d561cbSFan Zhang .input = { 87341d561cbSFan Zhang .data = { 87441d561cbSFan Zhang 0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8, 87541d561cbSFan Zhang 0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B, 87641d561cbSFan Zhang 0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55, 87741d561cbSFan Zhang 0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC, 87841d561cbSFan Zhang }, 87941d561cbSFan Zhang .len = 32, 88041d561cbSFan Zhang }, 88141d561cbSFan Zhang .key = { 88241d561cbSFan Zhang .data = { 88341d561cbSFan Zhang 0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C, 88441d561cbSFan Zhang 0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F, 88541d561cbSFan Zhang 0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4 88641d561cbSFan Zhang }, 88741d561cbSFan Zhang .len = 24, 88841d561cbSFan Zhang }, 88941d561cbSFan Zhang .output = { 89041d561cbSFan Zhang .data = { 89141d561cbSFan Zhang 0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84, 89241d561cbSFan Zhang 0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2, 89341d561cbSFan Zhang 0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37, 89441d561cbSFan Zhang 0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E, 89541d561cbSFan Zhang }, 89641d561cbSFan Zhang .len = 32, 89741d561cbSFan Zhang }, 89841d561cbSFan Zhang }; 89941d561cbSFan Zhang 90041d561cbSFan Zhang static struct fips_dev_self_test_vector 90141d561cbSFan Zhang SELF_TEST_AES256_CTR_test_vector = { 90241d561cbSFan Zhang .name = "SELF_TEST_AES256_CTR_test_vector", 90341d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 90441d561cbSFan Zhang 90541d561cbSFan Zhang .iv = { 90641d561cbSFan Zhang .data = { 90741d561cbSFan Zhang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 90841d561cbSFan Zhang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF 90941d561cbSFan Zhang }, 91041d561cbSFan Zhang .len = 16, 91141d561cbSFan Zhang }, 91241d561cbSFan Zhang .cipher = { 91341d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 91441d561cbSFan Zhang }, 91541d561cbSFan Zhang .input = { 91641d561cbSFan Zhang .data = { 91741d561cbSFan Zhang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 91841d561cbSFan Zhang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 91941d561cbSFan Zhang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, 92041d561cbSFan Zhang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, 92141d561cbSFan Zhang }, 92241d561cbSFan Zhang .len = 32, 92341d561cbSFan Zhang }, 92441d561cbSFan Zhang .key = { 92541d561cbSFan Zhang .data = { 92641d561cbSFan Zhang 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, 92741d561cbSFan Zhang 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, 92841d561cbSFan Zhang 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, 92941d561cbSFan Zhang 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 93041d561cbSFan Zhang }, 93141d561cbSFan Zhang .len = 32, 93241d561cbSFan Zhang }, 93341d561cbSFan Zhang .output = { 93441d561cbSFan Zhang .data = { 93541d561cbSFan Zhang 0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5, 93641d561cbSFan Zhang 0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28, 93741d561cbSFan Zhang 0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A, 93841d561cbSFan Zhang 0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5, 93941d561cbSFan Zhang }, 94041d561cbSFan Zhang .len = 32, 94141d561cbSFan Zhang }, 94241d561cbSFan Zhang }; 94341d561cbSFan Zhang 94441d561cbSFan Zhang 94541d561cbSFan Zhang struct fips_dev_self_test_vector 94641d561cbSFan Zhang *self_test_vectors[] = { 94741d561cbSFan Zhang &SELF_TEST_AES128_CBC_test_vector, 94841d561cbSFan Zhang &SELF_TEST_AES192_CBC_test_vector, 94941d561cbSFan Zhang &SELF_TEST_AES256_CBC_test_vector, 95041d561cbSFan Zhang &SELF_TEST_3DES_2KEY_CBC_test_vector, 95141d561cbSFan Zhang &SELF_TEST_3DES_3KEY_CBC_test_vector, 95241d561cbSFan Zhang &SELF_TEST_AES128_CCM_test_vector, 95341d561cbSFan Zhang &SELF_TEST_SHA1_HMAC_test_vector, 95441d561cbSFan Zhang &SELF_TEST_SHA224_HMAC_test_vector, 95541d561cbSFan Zhang &SELF_TEST_SHA256_HMAC_test_vector, 95641d561cbSFan Zhang &SELF_TEST_SHA384_HMAC_test_vector, 95741d561cbSFan Zhang &SELF_TEST_SHA512_HMAC_test_vector, 95841d561cbSFan Zhang &SELF_TEST_AES_CMAC_test_vector, 95941d561cbSFan Zhang &SELF_TEST_AES128_GCM_encrypt_test_vector, 96041d561cbSFan Zhang &SELF_TEST_AES192_GCM_encrypt_test_vector, 96141d561cbSFan Zhang &SELF_TEST_AES256_GCM_encrypt_test_vector, 96241d561cbSFan Zhang &SELF_TEST_AES128_CTR_test_vector, 96341d561cbSFan Zhang &SELF_TEST_AES192_CTR_test_vector, 96441d561cbSFan Zhang &SELF_TEST_AES256_CTR_test_vector, 96541d561cbSFan Zhang }; 96641d561cbSFan Zhang 96741d561cbSFan Zhang struct fips_dev_auto_test_env { 96841d561cbSFan Zhang struct rte_mempool *mpool; 96941d561cbSFan Zhang struct rte_mempool *op_pool; 97041d561cbSFan Zhang struct rte_mempool *sess_pool; 97141d561cbSFan Zhang struct rte_mempool *sess_priv_pool; 97241d561cbSFan Zhang struct rte_mbuf *mbuf; 97341d561cbSFan Zhang struct rte_crypto_op *op; 97441d561cbSFan Zhang }; 97541d561cbSFan Zhang 97641d561cbSFan Zhang typedef int (*fips_dev_self_test_prepare_xform_t)(uint8_t, 97741d561cbSFan Zhang struct rte_crypto_sym_xform *, 97841d561cbSFan Zhang struct fips_dev_self_test_vector *, 97941d561cbSFan Zhang uint32_t, uint8_t *, 98041d561cbSFan Zhang uint32_t); 98141d561cbSFan Zhang 98241d561cbSFan Zhang typedef int (*fips_dev_self_test_prepare_op_t)(struct rte_crypto_op *, 98341d561cbSFan Zhang struct rte_mbuf *, struct rte_cryptodev_sym_session *, 98441d561cbSFan Zhang uint32_t, struct fips_dev_self_test_vector *); 98541d561cbSFan Zhang 98641d561cbSFan Zhang typedef int (*fips_dev_self_test_check_result_t)(struct rte_crypto_op *, 98741d561cbSFan Zhang struct fips_dev_self_test_vector *, uint32_t); 98841d561cbSFan Zhang 98941d561cbSFan Zhang struct fips_dev_self_test_ops { 99041d561cbSFan Zhang enum rte_crypto_sym_xform_type last_operation_type; 99141d561cbSFan Zhang fips_dev_self_test_prepare_xform_t prepare_xform; 99241d561cbSFan Zhang fips_dev_self_test_prepare_op_t prepare_op; 99341d561cbSFan Zhang fips_dev_self_test_check_result_t check_result; 99441d561cbSFan Zhang }; 99541d561cbSFan Zhang 99641d561cbSFan Zhang static int 99741d561cbSFan Zhang prepare_cipher_xform(uint8_t dev_id, 99841d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 99941d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 100041d561cbSFan Zhang uint32_t dir, 100141d561cbSFan Zhang uint8_t *key, 100241d561cbSFan Zhang uint32_t neg_test) 100341d561cbSFan Zhang { 100441d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 100541d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 100641d561cbSFan Zhang struct rte_crypto_cipher_xform *cipher_xform = &xform->cipher; 100741d561cbSFan Zhang 100841d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 100941d561cbSFan Zhang 101041d561cbSFan Zhang /** negative test, key is xored */ 101141d561cbSFan Zhang if (neg_test) { 101241d561cbSFan Zhang uint32_t i; 101341d561cbSFan Zhang 101441d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 101541d561cbSFan Zhang key[i] ^= vec->key.data[i]; 101641d561cbSFan Zhang } else 101741d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 101841d561cbSFan Zhang 101941d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER; 102041d561cbSFan Zhang 102141d561cbSFan Zhang cipher_xform->algo = vec->cipher.algo; 102241d561cbSFan Zhang cipher_xform->op = (dir == self_test_dir_enc_auth_gen) ? 102341d561cbSFan Zhang RTE_CRYPTO_CIPHER_OP_ENCRYPT : 102441d561cbSFan Zhang RTE_CRYPTO_CIPHER_OP_DECRYPT; 102541d561cbSFan Zhang cipher_xform->key.data = key; 102641d561cbSFan Zhang cipher_xform->key.length = vec->key.len; 102741d561cbSFan Zhang cipher_xform->iv.length = vec->iv.len; 102841d561cbSFan Zhang cipher_xform->iv.offset = IV_OFF; 102941d561cbSFan Zhang 103041d561cbSFan Zhang cap_idx.algo.cipher = cipher_xform->algo; 103141d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 103241d561cbSFan Zhang 103341d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 103441d561cbSFan Zhang if (!cap) { 103541d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 103641d561cbSFan Zhang dev_id); 103741d561cbSFan Zhang return -EACCES; 103841d561cbSFan Zhang } 103941d561cbSFan Zhang 104041d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_cipher(cap, 104141d561cbSFan Zhang cipher_xform->key.length, 104241d561cbSFan Zhang cipher_xform->iv.length) != 0) { 104341d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %s key length %u IV length %u\n", 104441d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 104541d561cbSFan Zhang cipher_xform->key.length, 104641d561cbSFan Zhang cipher_xform->iv.length); 104741d561cbSFan Zhang return -EACCES; 104841d561cbSFan Zhang } 104941d561cbSFan Zhang 105041d561cbSFan Zhang return 0; 105141d561cbSFan Zhang } 105241d561cbSFan Zhang 105341d561cbSFan Zhang static int 105441d561cbSFan Zhang prepare_auth_xform(uint8_t dev_id, 105541d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 105641d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 105741d561cbSFan Zhang uint32_t dir, 105841d561cbSFan Zhang uint8_t *key, 105941d561cbSFan Zhang uint32_t neg_test) 106041d561cbSFan Zhang { 106141d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 106241d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 106341d561cbSFan Zhang struct rte_crypto_auth_xform *auth_xform = &xform->auth; 106441d561cbSFan Zhang 106541d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 106641d561cbSFan Zhang 106741d561cbSFan Zhang /** negative test, key is xored */ 106841d561cbSFan Zhang if (neg_test) { 106941d561cbSFan Zhang uint32_t i; 107041d561cbSFan Zhang 107141d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 107241d561cbSFan Zhang key[i] ^= vec->key.data[i]; 107341d561cbSFan Zhang } else 107441d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 107541d561cbSFan Zhang 107641d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_AUTH; 107741d561cbSFan Zhang 107841d561cbSFan Zhang auth_xform->algo = vec->auth.algo; 107941d561cbSFan Zhang auth_xform->op = (dir == self_test_dir_enc_auth_gen) ? 108041d561cbSFan Zhang RTE_CRYPTO_AUTH_OP_GENERATE : 108141d561cbSFan Zhang RTE_CRYPTO_AUTH_OP_VERIFY; 108241d561cbSFan Zhang auth_xform->digest_length = vec->digest.len; 108341d561cbSFan Zhang auth_xform->key.data = key; 108441d561cbSFan Zhang auth_xform->key.length = vec->key.len; 108541d561cbSFan Zhang 108641d561cbSFan Zhang cap_idx.algo.auth = auth_xform->algo; 108741d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 108841d561cbSFan Zhang 108941d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 109041d561cbSFan Zhang if (!cap) { 109141d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 109241d561cbSFan Zhang dev_id); 109341d561cbSFan Zhang return -EACCES; 109441d561cbSFan Zhang } 109541d561cbSFan Zhang 109641d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_auth(cap, 109741d561cbSFan Zhang auth_xform->key.length, 109841d561cbSFan Zhang auth_xform->digest_length, 0) != 0) { 109941d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %s key length %u Digest length %u\n", 110041d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 110141d561cbSFan Zhang auth_xform->key.length, 110241d561cbSFan Zhang auth_xform->digest_length); 110341d561cbSFan Zhang return -EACCES; 110441d561cbSFan Zhang } 110541d561cbSFan Zhang 110641d561cbSFan Zhang return 0; 110741d561cbSFan Zhang } 110841d561cbSFan Zhang 110941d561cbSFan Zhang static int 111041d561cbSFan Zhang prepare_aead_xform(uint8_t dev_id, 111141d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 111241d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 111341d561cbSFan Zhang uint32_t dir, 111441d561cbSFan Zhang uint8_t *key, 111541d561cbSFan Zhang uint32_t neg_test) 111641d561cbSFan Zhang { 111741d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 111841d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 111941d561cbSFan Zhang struct rte_crypto_aead_xform *aead_xform = &xform->aead; 112041d561cbSFan Zhang 112141d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 112241d561cbSFan Zhang 112341d561cbSFan Zhang /** negative test, key is xored */ 112441d561cbSFan Zhang if (neg_test) { 112541d561cbSFan Zhang uint32_t i; 112641d561cbSFan Zhang 112741d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 112841d561cbSFan Zhang key[i] ^= vec->key.data[i]; 112941d561cbSFan Zhang } else 113041d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 113141d561cbSFan Zhang 113241d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_AEAD; 113341d561cbSFan Zhang 113441d561cbSFan Zhang aead_xform->algo = vec->aead.algo; 113541d561cbSFan Zhang aead_xform->op = (dir == self_test_dir_enc_auth_gen) ? 113641d561cbSFan Zhang RTE_CRYPTO_AEAD_OP_ENCRYPT : 113741d561cbSFan Zhang RTE_CRYPTO_AEAD_OP_DECRYPT; 113841d561cbSFan Zhang aead_xform->aad_length = vec->aead.aad.len; 113941d561cbSFan Zhang aead_xform->digest_length = vec->digest.len; 114041d561cbSFan Zhang aead_xform->iv.offset = IV_OFF; 114141d561cbSFan Zhang aead_xform->iv.length = vec->iv.len; 114241d561cbSFan Zhang aead_xform->key.data = key; 114341d561cbSFan Zhang aead_xform->key.length = vec->key.len; 114441d561cbSFan Zhang 114541d561cbSFan Zhang cap_idx.algo.aead = aead_xform->algo; 114641d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 114741d561cbSFan Zhang 114841d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 114941d561cbSFan Zhang if (!cap) { 115041d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 115141d561cbSFan Zhang dev_id); 115241d561cbSFan Zhang return -EACCES; 115341d561cbSFan Zhang } 115441d561cbSFan Zhang 115541d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_aead(cap, 115641d561cbSFan Zhang aead_xform->key.length, 115741d561cbSFan Zhang aead_xform->digest_length, aead_xform->aad_length, 115841d561cbSFan Zhang aead_xform->iv.length) != 0) { 115941d561cbSFan Zhang RTE_LOG(ERR, PMD, 116041d561cbSFan Zhang "PMD %s key_len %u tag_len %u aad_len %u iv_len %u\n", 116141d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 116241d561cbSFan Zhang aead_xform->key.length, 116341d561cbSFan Zhang aead_xform->digest_length, 116441d561cbSFan Zhang aead_xform->aad_length, 116541d561cbSFan Zhang aead_xform->iv.length); 116641d561cbSFan Zhang return -EACCES; 116741d561cbSFan Zhang } 116841d561cbSFan Zhang 116941d561cbSFan Zhang return 0; 117041d561cbSFan Zhang } 117141d561cbSFan Zhang 117241d561cbSFan Zhang static int 117341d561cbSFan Zhang prepare_cipher_op(struct rte_crypto_op *op, 117441d561cbSFan Zhang struct rte_mbuf *mbuf, 117541d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 117641d561cbSFan Zhang uint32_t dir, 117741d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 117841d561cbSFan Zhang { 117941d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 118041d561cbSFan Zhang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF); 118141d561cbSFan Zhang uint8_t *dst; 118241d561cbSFan Zhang const uint8_t *src; 118341d561cbSFan Zhang uint32_t len; 118441d561cbSFan Zhang 118541d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 118641d561cbSFan Zhang src = vec->input.data; 118741d561cbSFan Zhang len = vec->input.len; 118841d561cbSFan Zhang } else { 118941d561cbSFan Zhang src = vec->output.data; 119041d561cbSFan Zhang len = vec->output.len; 119141d561cbSFan Zhang } 119241d561cbSFan Zhang 119341d561cbSFan Zhang sym->cipher.data.offset = 0; 119441d561cbSFan Zhang memcpy(iv, vec->iv.data, vec->iv.len); 119541d561cbSFan Zhang 119641d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, len); 119741d561cbSFan Zhang if (!dst) { 119841d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 119941d561cbSFan Zhang return -ENOMEM; 120041d561cbSFan Zhang } 120141d561cbSFan Zhang 120241d561cbSFan Zhang memcpy(dst, src, len); 120341d561cbSFan Zhang 120441d561cbSFan Zhang sym->cipher.data.length = len; 120541d561cbSFan Zhang 120641d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 120741d561cbSFan Zhang 120841d561cbSFan Zhang return 0; 120941d561cbSFan Zhang } 121041d561cbSFan Zhang 121141d561cbSFan Zhang static int 121241d561cbSFan Zhang prepare_auth_op(struct rte_crypto_op *op, 121341d561cbSFan Zhang struct rte_mbuf *mbuf, 121441d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 121541d561cbSFan Zhang uint32_t dir, 121641d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 121741d561cbSFan Zhang { 121841d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 121941d561cbSFan Zhang uint8_t *dst; 122041d561cbSFan Zhang 122141d561cbSFan Zhang if (vec->input.len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) { 122241d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n", 122341d561cbSFan Zhang -ENOMEM, vec->input.len + vec->digest.len); 122441d561cbSFan Zhang return -ENOMEM; 122541d561cbSFan Zhang } 122641d561cbSFan Zhang 122741d561cbSFan Zhang sym->auth.data.offset = 0; 122841d561cbSFan Zhang 122941d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, vec->input.len + 123041d561cbSFan Zhang vec->digest.len); 123141d561cbSFan Zhang if (!dst) { 123241d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 123341d561cbSFan Zhang return -ENOMEM; 123441d561cbSFan Zhang } 123541d561cbSFan Zhang 123641d561cbSFan Zhang memcpy(dst, vec->input.data, vec->input.len); 123741d561cbSFan Zhang sym->auth.data.length = vec->input.len; 123841d561cbSFan Zhang sym->auth.digest.data = dst + vec->input.len; 123941d561cbSFan Zhang 124041d561cbSFan Zhang if (dir == self_test_dir_dec_auth_verify) 124141d561cbSFan Zhang memcpy(dst + vec->input.len, vec->digest.data, vec->digest.len); 124241d561cbSFan Zhang 124341d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 124441d561cbSFan Zhang 124541d561cbSFan Zhang return 0; 124641d561cbSFan Zhang } 124741d561cbSFan Zhang 124841d561cbSFan Zhang static int 124941d561cbSFan Zhang prepare_aead_op(struct rte_crypto_op *op, 125041d561cbSFan Zhang struct rte_mbuf *mbuf, 125141d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 125241d561cbSFan Zhang uint32_t dir, 125341d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 125441d561cbSFan Zhang { 125541d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 125641d561cbSFan Zhang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF); 125741d561cbSFan Zhang uint8_t *dst; 125841d561cbSFan Zhang const uint8_t *src; 125941d561cbSFan Zhang uint32_t len; 126041d561cbSFan Zhang 126141d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 126241d561cbSFan Zhang len = vec->input.len; 126341d561cbSFan Zhang src = vec->input.data; 126441d561cbSFan Zhang } else { 126541d561cbSFan Zhang len = vec->output.len; 126641d561cbSFan Zhang src = vec->output.data; 126741d561cbSFan Zhang } 126841d561cbSFan Zhang 126941d561cbSFan Zhang if (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM) 127041d561cbSFan Zhang memcpy(iv + 1, vec->iv.data, vec->iv.len); 127141d561cbSFan Zhang else 127241d561cbSFan Zhang memcpy(iv, vec->iv.data, vec->iv.len); 127341d561cbSFan Zhang 127441d561cbSFan Zhang if (len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) { 127541d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n", 127641d561cbSFan Zhang -ENOMEM, len + vec->digest.len); 127741d561cbSFan Zhang return -ENOMEM; 127841d561cbSFan Zhang } 127941d561cbSFan Zhang 128041d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, len + vec->digest.len); 128141d561cbSFan Zhang if (!dst) { 128241d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 128341d561cbSFan Zhang return -ENOMEM; 128441d561cbSFan Zhang } 128541d561cbSFan Zhang 128641d561cbSFan Zhang sym->m_src = mbuf; 128741d561cbSFan Zhang sym->aead.data.length = len; 128841d561cbSFan Zhang sym->aead.data.offset = 0; 128941d561cbSFan Zhang sym->aead.aad.data = vec->aead.aad.data; 129041d561cbSFan Zhang sym->aead.digest.data = dst + vec->input.len; 129141d561cbSFan Zhang memcpy(dst, src, len); 129241d561cbSFan Zhang 129341d561cbSFan Zhang if (dir == self_test_dir_dec_auth_verify) 129441d561cbSFan Zhang memcpy(sym->aead.digest.data, vec->digest.data, vec->digest.len); 129541d561cbSFan Zhang 129641d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 129741d561cbSFan Zhang 129841d561cbSFan Zhang return 0; 129941d561cbSFan Zhang } 130041d561cbSFan Zhang 130141d561cbSFan Zhang static int 130241d561cbSFan Zhang check_cipher_result(struct rte_crypto_op *op, 130341d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 130441d561cbSFan Zhang uint32_t dir) 130541d561cbSFan Zhang { 130641d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 130741d561cbSFan Zhang uint8_t *data; 130841d561cbSFan Zhang const uint8_t *src; 130941d561cbSFan Zhang uint32_t len, src_len; 131041d561cbSFan Zhang int ret; 131141d561cbSFan Zhang 131241d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 131341d561cbSFan Zhang src = vec->output.data; 131441d561cbSFan Zhang src_len = vec->output.len; 131541d561cbSFan Zhang } else { 131641d561cbSFan Zhang src = vec->input.data; 131741d561cbSFan Zhang src_len = vec->input.len; 131841d561cbSFan Zhang } 131941d561cbSFan Zhang 132041d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 132141d561cbSFan Zhang if (len != src_len) 132241d561cbSFan Zhang return -1; 132341d561cbSFan Zhang 132441d561cbSFan Zhang ret = memcmp(data, src, src_len); 132541d561cbSFan Zhang if (ret != 0) 132641d561cbSFan Zhang return -1; 132741d561cbSFan Zhang 132841d561cbSFan Zhang return 0; 132941d561cbSFan Zhang } 133041d561cbSFan Zhang 133141d561cbSFan Zhang static int 133241d561cbSFan Zhang check_auth_result(struct rte_crypto_op *op, 133341d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 133441d561cbSFan Zhang uint32_t dir) 133541d561cbSFan Zhang { 133641d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 133741d561cbSFan Zhang uint8_t *data; 133841d561cbSFan Zhang uint32_t len; 133941d561cbSFan Zhang int ret; 134041d561cbSFan Zhang 134141d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 134241d561cbSFan Zhang if (len != vec->input.len + vec->digest.len) 134341d561cbSFan Zhang return -1; 134441d561cbSFan Zhang 134541d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 134641d561cbSFan Zhang data += vec->input.len; 134741d561cbSFan Zhang ret = memcmp(data, vec->digest.data, vec->digest.len); 134841d561cbSFan Zhang if (ret != 0) 134941d561cbSFan Zhang return -1; 135041d561cbSFan Zhang } 135141d561cbSFan Zhang 135241d561cbSFan Zhang return 0; 135341d561cbSFan Zhang } 135441d561cbSFan Zhang 135541d561cbSFan Zhang static int 135641d561cbSFan Zhang check_aead_result(struct rte_crypto_op *op, 135741d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 135841d561cbSFan Zhang uint32_t dir) 135941d561cbSFan Zhang { 136041d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 136141d561cbSFan Zhang uint8_t *data; 136241d561cbSFan Zhang const uint8_t *src; 136341d561cbSFan Zhang uint32_t len, src_len; 136441d561cbSFan Zhang int ret; 136541d561cbSFan Zhang 136641d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 136741d561cbSFan Zhang src = vec->output.data; 136841d561cbSFan Zhang src_len = vec->output.len; 136941d561cbSFan Zhang } else { 137041d561cbSFan Zhang src = vec->input.data; 137141d561cbSFan Zhang src_len = vec->input.len; 137241d561cbSFan Zhang } 137341d561cbSFan Zhang 137441d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 137541d561cbSFan Zhang if (len != src_len + vec->digest.len) 137641d561cbSFan Zhang return -1; 137741d561cbSFan Zhang 137841d561cbSFan Zhang ret = memcmp(data, src, src_len); 137941d561cbSFan Zhang if (ret != 0) 138041d561cbSFan Zhang return -1; 138141d561cbSFan Zhang 138241d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 138341d561cbSFan Zhang data += src_len; 138441d561cbSFan Zhang ret = memcmp(data, vec->digest.data, vec->digest.len); 138541d561cbSFan Zhang if (ret != 0) 138641d561cbSFan Zhang return -1; 138741d561cbSFan Zhang } 138841d561cbSFan Zhang 138941d561cbSFan Zhang return 0; 139041d561cbSFan Zhang } 139141d561cbSFan Zhang 139241d561cbSFan Zhang static void 139341d561cbSFan Zhang init_test_op(struct fips_dev_self_test_ops *test_ops, 139441d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 139541d561cbSFan Zhang { 139641d561cbSFan Zhang if (test_ops->last_operation_type == vec->operation_type) 139741d561cbSFan Zhang return; 139841d561cbSFan Zhang 139941d561cbSFan Zhang switch (vec->operation_type) { 140041d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_CIPHER: 140141d561cbSFan Zhang test_ops->prepare_xform = prepare_cipher_xform; 140241d561cbSFan Zhang test_ops->prepare_op = prepare_cipher_op; 140341d561cbSFan Zhang test_ops->check_result = check_cipher_result; 140441d561cbSFan Zhang break; 140541d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_AUTH: 140641d561cbSFan Zhang test_ops->prepare_xform = prepare_auth_xform; 140741d561cbSFan Zhang test_ops->prepare_op = prepare_auth_op; 140841d561cbSFan Zhang test_ops->check_result = check_auth_result; 140941d561cbSFan Zhang break; 141041d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_AEAD: 141141d561cbSFan Zhang test_ops->prepare_xform = prepare_aead_xform; 141241d561cbSFan Zhang test_ops->prepare_op = prepare_aead_op; 141341d561cbSFan Zhang test_ops->check_result = check_aead_result; 141441d561cbSFan Zhang break; 141541d561cbSFan Zhang default: 141641d561cbSFan Zhang break; 141741d561cbSFan Zhang } 141841d561cbSFan Zhang 141941d561cbSFan Zhang test_ops->last_operation_type = vec->operation_type; 142041d561cbSFan Zhang } 142141d561cbSFan Zhang 142241d561cbSFan Zhang static int 142341d561cbSFan Zhang run_single_test(uint8_t dev_id, 142441d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 142541d561cbSFan Zhang const struct fips_dev_self_test_ops *test_ops, 142641d561cbSFan Zhang struct fips_dev_auto_test_env *env, 142741d561cbSFan Zhang uint32_t dir, 142841d561cbSFan Zhang uint32_t negative_test) 142941d561cbSFan Zhang { 143041d561cbSFan Zhang struct rte_crypto_sym_xform xform; 143141d561cbSFan Zhang struct rte_cryptodev_sym_session *sess; 143241d561cbSFan Zhang uint16_t n_deqd; 143341d561cbSFan Zhang uint8_t key[256]; 143441d561cbSFan Zhang int ret; 143541d561cbSFan Zhang 143641d561cbSFan Zhang __rte_crypto_op_reset(env->op, RTE_CRYPTO_OP_TYPE_SYMMETRIC); 143741d561cbSFan Zhang rte_pktmbuf_reset(env->mbuf); 143841d561cbSFan Zhang env->op->sym->m_src = env->mbuf; 143941d561cbSFan Zhang 144041d561cbSFan Zhang ret = test_ops->prepare_xform(dev_id, &xform, vec, dir, key, 144141d561cbSFan Zhang negative_test); 144241d561cbSFan Zhang if (ret < 0) { 144341d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Prepare Xform\n", ret); 144441d561cbSFan Zhang return ret; 144541d561cbSFan Zhang } 144641d561cbSFan Zhang 144741d561cbSFan Zhang sess = rte_cryptodev_sym_session_create(env->sess_pool); 144841d561cbSFan Zhang if (!sess) 144941d561cbSFan Zhang return -ENOMEM; 145041d561cbSFan Zhang 145141d561cbSFan Zhang ret = rte_cryptodev_sym_session_init(dev_id, 1452*19f4fa70SFan Zhang sess, &xform, env->sess_priv_pool); 145341d561cbSFan Zhang if (ret < 0) { 145441d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Init session\n", ret); 145541d561cbSFan Zhang return ret; 145641d561cbSFan Zhang } 145741d561cbSFan Zhang 145841d561cbSFan Zhang ret = test_ops->prepare_op(env->op, env->mbuf, sess, dir, vec); 145941d561cbSFan Zhang if (ret < 0) { 146041d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Prepare op\n", ret); 146141d561cbSFan Zhang return ret; 146241d561cbSFan Zhang } 146341d561cbSFan Zhang 146441d561cbSFan Zhang if (rte_cryptodev_enqueue_burst(dev_id, 0, &env->op, 1) < 1) { 146541d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error: Failed enqueue\n"); 146641d561cbSFan Zhang return ret; 146741d561cbSFan Zhang } 146841d561cbSFan Zhang 146941d561cbSFan Zhang do { 147041d561cbSFan Zhang struct rte_crypto_op *deqd_op; 147141d561cbSFan Zhang 147241d561cbSFan Zhang n_deqd = rte_cryptodev_dequeue_burst(dev_id, 0, &deqd_op, 147341d561cbSFan Zhang 1); 147441d561cbSFan Zhang } while (n_deqd == 0); 147541d561cbSFan Zhang 147641d561cbSFan Zhang rte_cryptodev_sym_session_clear(dev_id, sess); 147741d561cbSFan Zhang rte_cryptodev_sym_session_free(sess); 147841d561cbSFan Zhang 147941d561cbSFan Zhang if (env->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) 148041d561cbSFan Zhang return -1; 148141d561cbSFan Zhang 148241d561cbSFan Zhang return test_ops->check_result(env->op, vec, dir); 148341d561cbSFan Zhang } 148441d561cbSFan Zhang 148541d561cbSFan Zhang 148641d561cbSFan Zhang static void 148741d561cbSFan Zhang fips_dev_auto_test_uninit(uint8_t dev_id, 148841d561cbSFan Zhang struct fips_dev_auto_test_env *env) 148941d561cbSFan Zhang { 149041d561cbSFan Zhang struct rte_cryptodev *dev = rte_cryptodev_pmd_get_dev(dev_id); 149141d561cbSFan Zhang uint32_t i; 149241d561cbSFan Zhang 149341d561cbSFan Zhang if (!dev) 149441d561cbSFan Zhang return; 149541d561cbSFan Zhang 149641d561cbSFan Zhang if (env->mbuf) 149741d561cbSFan Zhang rte_pktmbuf_free(env->mbuf); 149841d561cbSFan Zhang if (env->op) 149941d561cbSFan Zhang rte_crypto_op_free(env->op); 150041d561cbSFan Zhang if (env->mpool) 150141d561cbSFan Zhang rte_mempool_free(env->mpool); 150241d561cbSFan Zhang if (env->op_pool) 150341d561cbSFan Zhang rte_mempool_free(env->op_pool); 150441d561cbSFan Zhang if (env->sess_pool) 150541d561cbSFan Zhang rte_mempool_free(env->sess_pool); 150641d561cbSFan Zhang if (env->sess_priv_pool) 150741d561cbSFan Zhang rte_mempool_free(env->sess_priv_pool); 150841d561cbSFan Zhang 150941d561cbSFan Zhang if (dev->data->dev_started) 151041d561cbSFan Zhang rte_cryptodev_stop(dev_id); 151141d561cbSFan Zhang 151241d561cbSFan Zhang if (dev->data->nb_queue_pairs) { 151341d561cbSFan Zhang for (i = 0; i < dev->data->nb_queue_pairs; i++) 151441d561cbSFan Zhang (*dev->dev_ops->queue_pair_release)(dev, i); 151541d561cbSFan Zhang dev->data->nb_queue_pairs = 0; 151641d561cbSFan Zhang rte_free(dev->data->queue_pairs); 151741d561cbSFan Zhang dev->data->queue_pairs = NULL; 151841d561cbSFan Zhang } 151941d561cbSFan Zhang } 152041d561cbSFan Zhang 152141d561cbSFan Zhang static int 152241d561cbSFan Zhang fips_dev_auto_test_init(uint8_t dev_id, struct fips_dev_auto_test_env *env) 152341d561cbSFan Zhang { 152441d561cbSFan Zhang struct rte_cryptodev_config conf = {rte_cryptodev_socket_id(dev_id), 1}; 152541d561cbSFan Zhang struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL}; 152641d561cbSFan Zhang uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id); 152741d561cbSFan Zhang char name[128]; 152841d561cbSFan Zhang int ret; 152941d561cbSFan Zhang 153041d561cbSFan Zhang ret = rte_cryptodev_configure(dev_id, &conf); 153141d561cbSFan Zhang if (ret < 0) 153241d561cbSFan Zhang return ret; 153341d561cbSFan Zhang 153441d561cbSFan Zhang memset(name, 0, 128); 153541d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_MEMPOOL", dev_id); 153641d561cbSFan Zhang 153741d561cbSFan Zhang memset(env, 0, sizeof(*env)); 153841d561cbSFan Zhang 153941d561cbSFan Zhang env->mpool = rte_pktmbuf_pool_create(name, 128, 0, 0, 154041d561cbSFan Zhang UINT16_MAX, rte_cryptodev_socket_id(dev_id)); 154141d561cbSFan Zhang if (!env->mpool) { 154241d561cbSFan Zhang ret = -ENOMEM; 154341d561cbSFan Zhang goto error_exit; 154441d561cbSFan Zhang } 154541d561cbSFan Zhang 154641d561cbSFan Zhang memset(name, 0, 128); 154741d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_OP_POOL", dev_id); 154841d561cbSFan Zhang 154941d561cbSFan Zhang env->op_pool = rte_crypto_op_pool_create( 155041d561cbSFan Zhang name, 155141d561cbSFan Zhang RTE_CRYPTO_OP_TYPE_SYMMETRIC, 155241d561cbSFan Zhang 16, 0, 155341d561cbSFan Zhang 16, 155441d561cbSFan Zhang rte_socket_id()); 155541d561cbSFan Zhang if (!env->op_pool) { 155641d561cbSFan Zhang ret = -ENOMEM; 155741d561cbSFan Zhang goto error_exit; 155841d561cbSFan Zhang } 155941d561cbSFan Zhang 156041d561cbSFan Zhang memset(name, 0, 128); 156141d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_POOL", dev_id); 156241d561cbSFan Zhang 156341d561cbSFan Zhang env->sess_pool = rte_cryptodev_sym_session_pool_create(name, 156441d561cbSFan Zhang 128, 0, 0, 0, rte_cryptodev_socket_id(dev_id)); 156541d561cbSFan Zhang if (!env->sess_pool) { 156641d561cbSFan Zhang ret = -ENOMEM; 156741d561cbSFan Zhang goto error_exit; 156841d561cbSFan Zhang } 156941d561cbSFan Zhang 157041d561cbSFan Zhang memset(name, 0, 128); 157141d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_PRIV_POOL", dev_id); 157241d561cbSFan Zhang 157341d561cbSFan Zhang env->sess_priv_pool = rte_mempool_create(name, 157441d561cbSFan Zhang 128, sess_sz, 0, 0, NULL, NULL, NULL, 157541d561cbSFan Zhang NULL, rte_cryptodev_socket_id(dev_id), 0); 157641d561cbSFan Zhang if (!env->sess_priv_pool) { 157741d561cbSFan Zhang ret = -ENOMEM; 157841d561cbSFan Zhang goto error_exit; 157941d561cbSFan Zhang } 158041d561cbSFan Zhang 158141d561cbSFan Zhang qp_conf.mp_session = env->sess_pool; 158241d561cbSFan Zhang qp_conf.mp_session_private = env->sess_priv_pool; 158341d561cbSFan Zhang 158441d561cbSFan Zhang ret = rte_cryptodev_queue_pair_setup(dev_id, 0, &qp_conf, 158541d561cbSFan Zhang rte_cryptodev_socket_id(dev_id)); 158641d561cbSFan Zhang if (ret < 0) 158741d561cbSFan Zhang goto error_exit; 158841d561cbSFan Zhang 158941d561cbSFan Zhang env->mbuf = rte_pktmbuf_alloc(env->mpool); 159041d561cbSFan Zhang if (!env->mbuf) { 159141d561cbSFan Zhang ret = -ENOMEM; 159241d561cbSFan Zhang goto error_exit; 159341d561cbSFan Zhang } 159441d561cbSFan Zhang 159541d561cbSFan Zhang env->op = rte_crypto_op_alloc(env->op_pool, 159641d561cbSFan Zhang RTE_CRYPTO_OP_TYPE_SYMMETRIC); 159741d561cbSFan Zhang if (!env->op) { 159841d561cbSFan Zhang ret = -ENOMEM; 159941d561cbSFan Zhang goto error_exit; 160041d561cbSFan Zhang } 160141d561cbSFan Zhang 160241d561cbSFan Zhang ret = rte_cryptodev_start(dev_id); 160341d561cbSFan Zhang if (ret < 0) 160441d561cbSFan Zhang goto error_exit; 160541d561cbSFan Zhang 160641d561cbSFan Zhang 160741d561cbSFan Zhang return 0; 160841d561cbSFan Zhang 160941d561cbSFan Zhang error_exit: 161041d561cbSFan Zhang 161141d561cbSFan Zhang fips_dev_auto_test_uninit(dev_id, env); 161241d561cbSFan Zhang 161341d561cbSFan Zhang return ret; 161441d561cbSFan Zhang } 161541d561cbSFan Zhang 161641d561cbSFan Zhang int 161741d561cbSFan Zhang fips_dev_self_test(uint8_t dev_id, 161841d561cbSFan Zhang struct fips_dev_broken_test_config *config) 161941d561cbSFan Zhang { 162041d561cbSFan Zhang struct fips_dev_self_test_ops test_ops = {0}; 162141d561cbSFan Zhang struct fips_dev_auto_test_env env; 162241d561cbSFan Zhang uint32_t i, j, negative_test; 162341d561cbSFan Zhang int ret; 162441d561cbSFan Zhang 162541d561cbSFan Zhang ret = fips_dev_auto_test_init(dev_id, &env); 162641d561cbSFan Zhang if (ret < 0) { 162741d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to init self-test for PMD %u\n", 162841d561cbSFan Zhang dev_id); 162941d561cbSFan Zhang return ret; 163041d561cbSFan Zhang } 163141d561cbSFan Zhang 163241d561cbSFan Zhang for (i = 0; i < RTE_DIM(self_test_vectors); i++) { 163341d561cbSFan Zhang struct fips_dev_self_test_vector *vec = 163441d561cbSFan Zhang self_test_vectors[i]; 163541d561cbSFan Zhang 163641d561cbSFan Zhang init_test_op(&test_ops, vec); 163741d561cbSFan Zhang 163841d561cbSFan Zhang for (j = 0; j < self_test_dir_max; j++) { 163941d561cbSFan Zhang if (!config) 164041d561cbSFan Zhang negative_test = 0; 164141d561cbSFan Zhang else { 164241d561cbSFan Zhang if ((config->expect_fail_test_idx == i) && 164341d561cbSFan Zhang (config->expect_fail_dir == j)) 164441d561cbSFan Zhang negative_test = 1; 164541d561cbSFan Zhang else 164641d561cbSFan Zhang negative_test = 0; 164741d561cbSFan Zhang } 164841d561cbSFan Zhang 164941d561cbSFan Zhang RTE_LOG(INFO, PMD, "Testing (ID %u) %s %s%s...\n", 165041d561cbSFan Zhang i, 165141d561cbSFan Zhang vec->name, 165241d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 165341d561cbSFan Zhang "Encrypt" : "Decrypt", 165441d561cbSFan Zhang negative_test ? " (Expect Fail)" : ""); 165541d561cbSFan Zhang 165641d561cbSFan Zhang ret = run_single_test(dev_id, vec, &test_ops, 165741d561cbSFan Zhang &env, j, negative_test); 165841d561cbSFan Zhang switch (ret) { 165941d561cbSFan Zhang case 0: 166041d561cbSFan Zhang if (!negative_test) 166141d561cbSFan Zhang break; 166241d561cbSFan Zhang ret = -1; 166341d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n", 166441d561cbSFan Zhang dev_id, vec->name, 166541d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 166641d561cbSFan Zhang "Encrypt" : "Decrypt"); 166741d561cbSFan Zhang goto error_exit; 166841d561cbSFan Zhang case -EACCES: 166941d561cbSFan Zhang RTE_LOG(ERR, PMD, "Not supported by %s. Skip\n", 167041d561cbSFan Zhang rte_cryptodev_name_get(dev_id)); 167141d561cbSFan Zhang ret = 0; 167241d561cbSFan Zhang break; 167341d561cbSFan Zhang default: 167441d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n", 167541d561cbSFan Zhang dev_id, vec->name, 167641d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 167741d561cbSFan Zhang "Encrypt" : "Decrypt"); 167841d561cbSFan Zhang goto error_exit; 167941d561cbSFan Zhang } 168041d561cbSFan Zhang } 168141d561cbSFan Zhang } 168241d561cbSFan Zhang 168341d561cbSFan Zhang error_exit: 168441d561cbSFan Zhang fips_dev_auto_test_uninit(dev_id, &env); 168541d561cbSFan Zhang 168641d561cbSFan Zhang if (ret == 0) { 168741d561cbSFan Zhang RTE_LOG(INFO, PMD, "PMD %u finished self-test successfully\n", 168841d561cbSFan Zhang dev_id); 168941d561cbSFan Zhang } 169041d561cbSFan Zhang 169141d561cbSFan Zhang return ret; 169241d561cbSFan Zhang } 1693