1*41d561cbSFan Zhang /* SPDX-License-Identifier: BSD-3-Clause 2*41d561cbSFan Zhang * Copyright(c) 2019 Intel Corporation 3*41d561cbSFan Zhang */ 4*41d561cbSFan Zhang 5*41d561cbSFan Zhang #include <rte_cryptodev.h> 6*41d561cbSFan Zhang #include <rte_cryptodev_pmd.h> 7*41d561cbSFan Zhang 8*41d561cbSFan Zhang #include "fips_dev_self_test.h" 9*41d561cbSFan Zhang 10*41d561cbSFan Zhang #define IV_OFF (sizeof(struct rte_crypto_op) + sizeof(struct rte_crypto_sym_op)) 11*41d561cbSFan Zhang 12*41d561cbSFan Zhang #define FIPS_DEV_TEST_DATA_MAX_SIZE 8096 13*41d561cbSFan Zhang 14*41d561cbSFan Zhang struct fips_dev_self_test_vector { 15*41d561cbSFan Zhang const char *name; 16*41d561cbSFan Zhang enum rte_crypto_sym_xform_type operation_type; 17*41d561cbSFan Zhang 18*41d561cbSFan Zhang struct { 19*41d561cbSFan Zhang uint8_t data[64]; 20*41d561cbSFan Zhang uint16_t len; 21*41d561cbSFan Zhang } digest; 22*41d561cbSFan Zhang 23*41d561cbSFan Zhang struct { 24*41d561cbSFan Zhang uint8_t data[256]; 25*41d561cbSFan Zhang uint16_t len; 26*41d561cbSFan Zhang } key; 27*41d561cbSFan Zhang 28*41d561cbSFan Zhang struct { 29*41d561cbSFan Zhang uint8_t data[16]; 30*41d561cbSFan Zhang uint8_t len; 31*41d561cbSFan Zhang } iv; 32*41d561cbSFan Zhang 33*41d561cbSFan Zhang union { 34*41d561cbSFan Zhang struct { 35*41d561cbSFan Zhang enum rte_crypto_cipher_algorithm algo; 36*41d561cbSFan Zhang } cipher; 37*41d561cbSFan Zhang 38*41d561cbSFan Zhang struct { 39*41d561cbSFan Zhang enum rte_crypto_aead_algorithm algo; 40*41d561cbSFan Zhang struct { 41*41d561cbSFan Zhang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 42*41d561cbSFan Zhang uint16_t len; 43*41d561cbSFan Zhang } aad; 44*41d561cbSFan Zhang } aead; 45*41d561cbSFan Zhang 46*41d561cbSFan Zhang struct { 47*41d561cbSFan Zhang enum rte_crypto_auth_algorithm algo; 48*41d561cbSFan Zhang } auth; 49*41d561cbSFan Zhang }; 50*41d561cbSFan Zhang 51*41d561cbSFan Zhang struct { 52*41d561cbSFan Zhang const uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 53*41d561cbSFan Zhang uint16_t len; 54*41d561cbSFan Zhang } input; 55*41d561cbSFan Zhang 56*41d561cbSFan Zhang struct { 57*41d561cbSFan Zhang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE]; 58*41d561cbSFan Zhang uint16_t len; 59*41d561cbSFan Zhang } output; 60*41d561cbSFan Zhang }; 61*41d561cbSFan Zhang 62*41d561cbSFan Zhang #define GET_MBUF_DATA(data, len, m) \ 63*41d561cbSFan Zhang do { \ 64*41d561cbSFan Zhang len = rte_pktmbuf_pkt_len(m); \ 65*41d561cbSFan Zhang data = rte_pktmbuf_mtod(m, uint8_t *); \ 66*41d561cbSFan Zhang } while (0) 67*41d561cbSFan Zhang 68*41d561cbSFan Zhang 69*41d561cbSFan Zhang /* <-- SHA-x HMAC --> */ 70*41d561cbSFan Zhang static struct fips_dev_self_test_vector 71*41d561cbSFan Zhang SELF_TEST_SHA1_HMAC_test_vector = { 72*41d561cbSFan Zhang .name = "SELF_TEST_SHA1_HMAC_test_vector", 73*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 74*41d561cbSFan Zhang 75*41d561cbSFan Zhang .auth = { 76*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 77*41d561cbSFan Zhang }, 78*41d561cbSFan Zhang .input = { 79*41d561cbSFan Zhang .data = { 80*41d561cbSFan Zhang 0xed, 0xb2, 0xba, 0x09, 0x99, 0x61, 0xd3, 0x8f, 81*41d561cbSFan Zhang 0xd0, 0xa0, 0xa6, 0xa2, 0x35, 0xd6, 0x12, 0x71, 82*41d561cbSFan Zhang 0xcb, 0x4d, 0x49, 0x3b, 0x64, 0xd9, 0xde, 0x13, 83*41d561cbSFan Zhang 0x5c, 0xbb, 0x1f, 0xe0, 0x86, 0xc4, 0xa4, 0xa7, 84*41d561cbSFan Zhang 0x67, 0xbe, 0x28, 0x0d, 0xa2, 0x07, 0x98, 0x17, 85*41d561cbSFan Zhang 0xb4, 0x7f, 0x6a, 0x35, 0xe1, 0xa4, 0x30, 0x7f, 86*41d561cbSFan Zhang 0x6e, 0xfc, 0x6d, 0x3e, 0x11, 0xb4, 0xa7, 0xae, 87*41d561cbSFan Zhang 0xa6, 0x86, 0xbd, 0x02, 0x23, 0xe0, 0x7b, 0xa9, 88*41d561cbSFan Zhang 0xce, 0x42, 0x6c, 0xd0, 0xae, 0xe7, 0xef, 0x28, 89*41d561cbSFan Zhang 0x3f, 0xa9, 0x8d, 0xe9, 0x6a, 0x1f, 0x8a, 0x17, 90*41d561cbSFan Zhang 0xb3, 0x08, 0xba, 0x04, 0xb5, 0xec, 0x96, 0x16, 91*41d561cbSFan Zhang 0xcb, 0x00, 0x8f, 0xca, 0x11, 0x4b, 0xa3, 0xf9, 92*41d561cbSFan Zhang 0x8b, 0x07, 0x2d, 0x5a, 0xa3, 0x4a, 0x01, 0x49, 93*41d561cbSFan Zhang 0xd9, 0xe5, 0xb8, 0xc6, 0xb6, 0x8c, 0x49, 0xc1, 94*41d561cbSFan Zhang 0x01, 0x38, 0xda, 0x95, 0x36, 0xca, 0xd5, 0xd2, 95*41d561cbSFan Zhang 0x34, 0xf1, 0x3d, 0x3f, 0x36, 0x4d, 0x43, 0x1f 96*41d561cbSFan Zhang }, 97*41d561cbSFan Zhang .len = 128, 98*41d561cbSFan Zhang }, 99*41d561cbSFan Zhang .key = { 100*41d561cbSFan Zhang .data = { 101*41d561cbSFan Zhang 0x8d, 0x8d, 0x15, 0xd8, 0xa9, 0x57, 0x9a, 0xdb, 102*41d561cbSFan Zhang 0x2d, 0x62 103*41d561cbSFan Zhang }, 104*41d561cbSFan Zhang .len = 10, 105*41d561cbSFan Zhang }, 106*41d561cbSFan Zhang .digest = { 107*41d561cbSFan Zhang .data = { 108*41d561cbSFan Zhang 0x0c, 0x66, 0x2e, 0x47, 0x93, 0x93, 0x8c, 0xc3, 109*41d561cbSFan Zhang 0x7f, 0x3d, 0x51, 0xd2, 0xb4, 0x05, 0x48, 0xec, 110*41d561cbSFan Zhang 0x55, 0x91, 0x4f, 0x0d 111*41d561cbSFan Zhang }, 112*41d561cbSFan Zhang .len = 20, 113*41d561cbSFan Zhang }, 114*41d561cbSFan Zhang }; 115*41d561cbSFan Zhang 116*41d561cbSFan Zhang static struct fips_dev_self_test_vector 117*41d561cbSFan Zhang SELF_TEST_SHA224_HMAC_test_vector = { 118*41d561cbSFan Zhang .name = "SELF_TEST_SHA224_HMAC_test_vector", 119*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 120*41d561cbSFan Zhang .auth = { 121*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 122*41d561cbSFan Zhang }, 123*41d561cbSFan Zhang .input = { 124*41d561cbSFan Zhang .data = { 125*41d561cbSFan Zhang 0x41, 0x18, 0x43, 0xa2, 0x13, 0x87, 0x84, 0x6f, 126*41d561cbSFan Zhang 0x3b, 0x9e, 0xd5, 0xfc, 0x54, 0x5a, 0xca, 0xdf, 127*41d561cbSFan Zhang 0xa5, 0xb7, 0x03, 0x86, 0xf6, 0x2d, 0xa4, 0xd9, 128*41d561cbSFan Zhang 0xa2, 0x7b, 0x04, 0x1b, 0xee, 0xa3, 0xaa, 0x11, 129*41d561cbSFan Zhang 0x99, 0x36, 0x75, 0x67, 0xb4, 0xd1, 0x1a, 0x4f, 130*41d561cbSFan Zhang 0xb4, 0xe8, 0xd4, 0x6b, 0xc6, 0xc2, 0x56, 0xed, 131*41d561cbSFan Zhang 0x62, 0xc5, 0x05, 0xfd, 0x23, 0xf4, 0x64, 0x5b, 132*41d561cbSFan Zhang 0xd6, 0xb6, 0xcf, 0x45, 0xd1, 0xd9, 0x6d, 0x9b, 133*41d561cbSFan Zhang 0x86, 0xd6, 0x60, 0x41, 0x57, 0x57, 0x3e, 0xc5, 134*41d561cbSFan Zhang 0xac, 0xf6, 0xc5, 0x41, 0x43, 0x48, 0xca, 0x83, 135*41d561cbSFan Zhang 0xc8, 0x1a, 0x73, 0x6c, 0xa6, 0xfa, 0xa6, 0x96, 136*41d561cbSFan Zhang 0x1c, 0xfa, 0xc1, 0x39, 0x93, 0xb0, 0x8c, 0x50, 137*41d561cbSFan Zhang 0x2f, 0x81, 0x6c, 0xf7, 0xa4, 0x20, 0xd9, 0x18, 138*41d561cbSFan Zhang 0x4b, 0x51, 0x11, 0x46, 0x75, 0xf3, 0x0e, 0xe9, 139*41d561cbSFan Zhang 0xff, 0x3d, 0xb6, 0x9c, 0x26, 0x48, 0x53, 0xd3, 140*41d561cbSFan Zhang 0x9d, 0xcd, 0x42, 0xc1, 0xdd, 0x31, 0xef, 0x79 141*41d561cbSFan Zhang 142*41d561cbSFan Zhang }, 143*41d561cbSFan Zhang .len = 128, 144*41d561cbSFan Zhang }, 145*41d561cbSFan Zhang .key = { 146*41d561cbSFan Zhang .data = { 147*41d561cbSFan Zhang 0x37, 0x14, 0x70, 0x78, 0x39, 0xda, 0xf7, 0x91, 148*41d561cbSFan Zhang 0x22, 0xc7, 0x82, 0x41, 0x63, 0x51, 0x38, 0x5e, 149*41d561cbSFan Zhang 0x88, 0xa8, 0x1d, 0x31, 0xc9, 0xf6, 0x41, 0xd8, 150*41d561cbSFan Zhang 0xdc, 0xe5, 0x38, 0xe9, 0x0e, 0x63, 0xc9, 0x58, 151*41d561cbSFan Zhang 0x92, 0xa2, 0xea, 0x9b, 0x19, 0x62, 0xed, 0x0b, 152*41d561cbSFan Zhang 0xa3, 0x72, 0xf4, 0x8e, 0x94, 0x74, 0xaa, 0x73, 153*41d561cbSFan Zhang 0x0a, 0xe2 154*41d561cbSFan Zhang }, 155*41d561cbSFan Zhang .len = 50, 156*41d561cbSFan Zhang }, 157*41d561cbSFan Zhang .digest = { 158*41d561cbSFan Zhang .data = { 159*41d561cbSFan Zhang 0x33, 0xf1, 0x7a, 0xc8, 0xa5, 0xc6, 0xb5, 0x25, 160*41d561cbSFan Zhang 0xdb, 0x8b, 0x86, 0x44, 0xb6, 0xab 161*41d561cbSFan Zhang 162*41d561cbSFan Zhang }, 163*41d561cbSFan Zhang .len = 14, 164*41d561cbSFan Zhang }, 165*41d561cbSFan Zhang }; 166*41d561cbSFan Zhang 167*41d561cbSFan Zhang 168*41d561cbSFan Zhang static struct fips_dev_self_test_vector 169*41d561cbSFan Zhang SELF_TEST_SHA256_HMAC_test_vector = { 170*41d561cbSFan Zhang .name = "SELF_TEST_SHA256_HMAC_test_vector", 171*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 172*41d561cbSFan Zhang .auth = { 173*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 174*41d561cbSFan Zhang }, 175*41d561cbSFan Zhang .input = { 176*41d561cbSFan Zhang .data = { 177*41d561cbSFan Zhang 0x1c, 0x43, 0x96, 0xf7, 0xb7, 0xf9, 0x22, 0x8e, 178*41d561cbSFan Zhang 0x83, 0x2a, 0x13, 0x69, 0x20, 0x02, 0xba, 0x2a, 179*41d561cbSFan Zhang 0xff, 0x43, 0x9d, 0xcb, 0x7f, 0xdd, 0xbf, 0xd4, 180*41d561cbSFan Zhang 0x56, 0xc0, 0x22, 0xd1, 0x33, 0xee, 0x89, 0x03, 181*41d561cbSFan Zhang 0xa2, 0xd4, 0x82, 0x56, 0x2f, 0xda, 0xa4, 0x93, 182*41d561cbSFan Zhang 0xce, 0x39, 0x16, 0xd7, 0x7a, 0x0c, 0x51, 0x44, 183*41d561cbSFan Zhang 0x1d, 0xab, 0x26, 0xf6, 0xb0, 0x34, 0x02, 0x38, 184*41d561cbSFan Zhang 0xa3, 0x6a, 0x71, 0xf8, 0x7f, 0xc3, 0xe1, 0x79, 185*41d561cbSFan Zhang 0xca, 0xbc, 0xa9, 0x48, 0x2b, 0x70, 0x49, 0x71, 186*41d561cbSFan Zhang 0xce, 0x69, 0xf3, 0xf2, 0x0a, 0xb6, 0x4b, 0x70, 187*41d561cbSFan Zhang 0x41, 0x3d, 0x6c, 0x29, 0x08, 0x53, 0x2b, 0x2a, 188*41d561cbSFan Zhang 0x88, 0x8a, 0x9f, 0xc2, 0x24, 0xca, 0xe1, 0x36, 189*41d561cbSFan Zhang 0x5d, 0xa4, 0x10, 0xb6, 0xf2, 0xe2, 0x98, 0x90, 190*41d561cbSFan Zhang 0x4b, 0x63, 0xb4, 0xa4, 0x17, 0x26, 0x32, 0x18, 191*41d561cbSFan Zhang 0x35, 0xa4, 0x77, 0x4d, 0xd0, 0x63, 0xc2, 0x11, 192*41d561cbSFan Zhang 0xcf, 0xc8, 0xb5, 0x16, 0x6c, 0x2d, 0x11, 0xa2 193*41d561cbSFan Zhang }, 194*41d561cbSFan Zhang .len = 128, 195*41d561cbSFan Zhang }, 196*41d561cbSFan Zhang .key = { 197*41d561cbSFan Zhang .data = { 198*41d561cbSFan Zhang 0x54, 0x48, 0x99, 0x8f, 0x9d, 0x8f, 0x98, 0x53, 199*41d561cbSFan Zhang 0x4a, 0xdd, 0xf0, 0xc8, 0xba, 0x63, 0x1c, 0x49, 200*41d561cbSFan Zhang 0x6b, 0xf8, 0xa8, 0x00, 0x6c, 0xbb, 0x46, 0xad, 201*41d561cbSFan Zhang 0x15, 0xfa, 0x1f, 0xa2, 0xf5, 0x53, 0x67, 0x12, 202*41d561cbSFan Zhang 0x0c, 0x19, 0x34, 0x8c, 0x3a, 0xfa, 0x90, 0xc3 203*41d561cbSFan Zhang }, 204*41d561cbSFan Zhang .len = 40, 205*41d561cbSFan Zhang }, 206*41d561cbSFan Zhang .digest = { 207*41d561cbSFan Zhang .data = { 208*41d561cbSFan Zhang 0x7e, 0x8c, 0xba, 0x9d, 0xd9, 0xf0, 0x6e, 0xbd, 209*41d561cbSFan Zhang 0xd7, 0xf9, 0x2e, 0x0f, 0x1a, 0x67, 0xc7, 0xf4, 210*41d561cbSFan Zhang 0xdf, 0x52, 0x69, 0x3c, 0x21, 0x2b, 0xdd, 0x84, 211*41d561cbSFan Zhang 0xf6, 0x73, 0x70, 0xb3, 0x51, 0x53, 0x3c, 0x6c 212*41d561cbSFan Zhang }, 213*41d561cbSFan Zhang .len = 32, 214*41d561cbSFan Zhang }, 215*41d561cbSFan Zhang }; 216*41d561cbSFan Zhang 217*41d561cbSFan Zhang /* HMAC count=34 L=48 SHA384 GENERATE*/ 218*41d561cbSFan Zhang static struct fips_dev_self_test_vector 219*41d561cbSFan Zhang SELF_TEST_SHA384_HMAC_test_vector = { 220*41d561cbSFan Zhang .name = "SELF_TEST_SHA384_HMAC_test_vector", 221*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 222*41d561cbSFan Zhang .auth = { 223*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 224*41d561cbSFan Zhang }, 225*41d561cbSFan Zhang .input = { 226*41d561cbSFan Zhang .data = { 227*41d561cbSFan Zhang 0xf5, 0x10, 0x86, 0xfe, 0x78, 0x15, 0x0f, 0xe4, 228*41d561cbSFan Zhang 0x8b, 0xd1, 0x41, 0x5a, 0x47, 0x85, 0xac, 0xc0, 229*41d561cbSFan Zhang 0x5a, 0xb8, 0x0e, 0xf0, 0x0b, 0x29, 0x75, 0xce, 230*41d561cbSFan Zhang 0x78, 0x07, 0xa4, 0x21, 0x22, 0x64, 0xb8, 0xa1, 231*41d561cbSFan Zhang 0xac, 0xe8, 0x0b, 0x50, 0xe0, 0xc2, 0x59, 0x0e, 232*41d561cbSFan Zhang 0xf3, 0xe4, 0x21, 0x68, 0x0a, 0x70, 0x4e, 0xb2, 233*41d561cbSFan Zhang 0xfc, 0x6d, 0x17, 0x55, 0x5a, 0xbf, 0x24, 0x69, 234*41d561cbSFan Zhang 0xad, 0x56, 0xf2, 0x87, 0xfe, 0xa5, 0x78, 0xd8, 235*41d561cbSFan Zhang 0x9c, 0x56, 0x0b, 0x72, 0x19, 0x3c, 0x7f, 0xe5, 236*41d561cbSFan Zhang 0x96, 0x89, 0x8f, 0x10, 0x40, 0x41, 0x7e, 0x3a, 237*41d561cbSFan Zhang 0x1b, 0xee, 0xff, 0x5e, 0xff, 0x96, 0x53, 0xc5, 238*41d561cbSFan Zhang 0xe0, 0xea, 0xb1, 0xda, 0x52, 0xc0, 0xea, 0x3b, 239*41d561cbSFan Zhang 0x4b, 0xc3, 0x4d, 0x0c, 0x2b, 0x69, 0xc8, 0x90, 240*41d561cbSFan Zhang 0xfb, 0x26, 0x51, 0xfa, 0xf2, 0xe0, 0x84, 0x80, 241*41d561cbSFan Zhang 0x3e, 0xa2, 0x8e, 0xb2, 0x01, 0x94, 0x49, 0x0a, 242*41d561cbSFan Zhang 0x99, 0x2b, 0xa8, 0xc4, 0x24, 0x9d, 0x56, 0xef 243*41d561cbSFan Zhang }, 244*41d561cbSFan Zhang .len = 128, 245*41d561cbSFan Zhang }, 246*41d561cbSFan Zhang .key = { 247*41d561cbSFan Zhang .data = { 248*41d561cbSFan Zhang 0x91, 0x7a, 0x69, 0x8c, 0x82, 0xf4, 0x4f, 0x19, 249*41d561cbSFan Zhang 0x57, 0x3b, 0x64, 0x5c, 0x48, 0x79, 0xb8, 0x73, 250*41d561cbSFan Zhang 0x0b, 0x58, 0xdf, 0xf4, 0xed, 0xc6, 0xa0, 0xd3, 251*41d561cbSFan Zhang 0x21, 0xf5, 0xf1, 0x86, 0x58, 0xa5, 0x24, 0x66, 252*41d561cbSFan Zhang 0x92, 0xa5, 0x5b, 0x59, 0x33, 0x97, 0x41, 0xae, 253*41d561cbSFan Zhang 0x59, 0xf5, 0xfc, 0x48, 0x6d, 0x51, 0x5d, 0xff, 254*41d561cbSFan Zhang 0xf8, 0xe1 255*41d561cbSFan Zhang }, 256*41d561cbSFan Zhang .len = 50, 257*41d561cbSFan Zhang }, 258*41d561cbSFan Zhang .digest = { 259*41d561cbSFan Zhang .data = { 260*41d561cbSFan Zhang 0x77, 0xbf, 0x56, 0x15, 0xec, 0x52, 0xf7, 0x06, 261*41d561cbSFan Zhang 0xca, 0x74, 0x64, 0x01, 0xe9, 0xfd, 0xe4, 0x3f, 262*41d561cbSFan Zhang 0x15, 0x60, 0x52, 0x37, 0xe5, 0x50, 0xb9, 0x3a, 263*41d561cbSFan Zhang 0x84, 0x72, 0xfd, 0x14, 0x4f, 0xc3, 0x9e, 0x5e, 264*41d561cbSFan Zhang 0xca, 0x0f, 0xe8, 0x90, 0x83, 0x88, 0x28, 0xa0 265*41d561cbSFan Zhang }, 266*41d561cbSFan Zhang .len = 40, 267*41d561cbSFan Zhang }, 268*41d561cbSFan Zhang }; 269*41d561cbSFan Zhang 270*41d561cbSFan Zhang /* HMAC count=28 L=64 SHA512 GENERATE*/ 271*41d561cbSFan Zhang static struct fips_dev_self_test_vector 272*41d561cbSFan Zhang SELF_TEST_SHA512_HMAC_test_vector = { 273*41d561cbSFan Zhang .name = "SELF_TEST_SHA512_HMAC_test_vector", 274*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 275*41d561cbSFan Zhang .auth = { 276*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 277*41d561cbSFan Zhang }, 278*41d561cbSFan Zhang .input = { 279*41d561cbSFan Zhang .data = { 280*41d561cbSFan Zhang 0x0a, 0x33, 0x1c, 0xe2, 0x00, 0x89, 0xb2, 0x9e, 281*41d561cbSFan Zhang 0x94, 0xb2, 0xc5, 0xf5, 0x18, 0xc8, 0xdb, 0xea, 282*41d561cbSFan Zhang 0xd4, 0x04, 0x17, 0xa2, 0xa8, 0xd5, 0x00, 0x18, 283*41d561cbSFan Zhang 0xf3, 0x2f, 0x85, 0x12, 0xb3, 0x26, 0x3d, 0x54, 284*41d561cbSFan Zhang 0xed, 0xbb, 0xf3, 0x13, 0x4f, 0xf6, 0x61, 0xac, 285*41d561cbSFan Zhang 0x14, 0x35, 0x3c, 0x96, 0x28, 0xc3, 0x71, 0x95, 286*41d561cbSFan Zhang 0x8c, 0xac, 0xaf, 0x31, 0xfd, 0xd0, 0x25, 0x67, 287*41d561cbSFan Zhang 0xd0, 0x37, 0x8d, 0x9e, 0x21, 0xa4, 0x69, 0xdd, 288*41d561cbSFan Zhang 0x2c, 0x6d, 0x8c, 0x3a, 0xfb, 0x89, 0xdd, 0x96, 289*41d561cbSFan Zhang 0x42, 0xeb, 0x58, 0x87, 0x87, 0x0e, 0x55, 0x96, 290*41d561cbSFan Zhang 0x85, 0xd2, 0x0d, 0xab, 0xd3, 0x86, 0x5a, 0xc5, 291*41d561cbSFan Zhang 0xc1, 0x46, 0xbe, 0xee, 0x83, 0x87, 0xa7, 0x6f, 292*41d561cbSFan Zhang 0x91, 0xf0, 0xf1, 0x40, 0x4d, 0x6c, 0xad, 0xc2, 293*41d561cbSFan Zhang 0xe6, 0x7d, 0x21, 0xb0, 0x7d, 0xd3, 0x0f, 0x53, 294*41d561cbSFan Zhang 0x87, 0x1d, 0x3b, 0xf6, 0x73, 0x1f, 0x27, 0x9a, 295*41d561cbSFan Zhang 0x8c, 0x04, 0x21, 0xeb, 0x20, 0xf6, 0x7f, 0x72 296*41d561cbSFan Zhang }, 297*41d561cbSFan Zhang .len = 128, 298*41d561cbSFan Zhang }, 299*41d561cbSFan Zhang .key = { 300*41d561cbSFan Zhang .data = { 301*41d561cbSFan Zhang 0x39, 0xb8, 0x77, 0xb8, 0xe8, 0x2e, 0xcb, 0xd9, 302*41d561cbSFan Zhang 0x74, 0x03, 0x25, 0x82, 0x8f, 0xaf, 0x67, 0x21, 303*41d561cbSFan Zhang 0xc1, 0x29, 0x04, 0x6e, 0xb0, 0x13, 0x61, 0x44, 304*41d561cbSFan Zhang 0xa0, 0x31, 0x82, 0xb1, 0x36, 0x20, 0xe2, 0x49, 305*41d561cbSFan Zhang 0x81, 0x45, 0xa2, 0xbf, 0x3b, 0x03, 0xe6, 0xb6, 306*41d561cbSFan Zhang 0x4b, 0x31, 0x7d, 0xd4, 0x8f, 0xcb, 0xc0, 0x18, 307*41d561cbSFan Zhang 0xd9, 0xe7, 0xbc, 0x6e, 0x37, 0xeb, 0x93, 0x81, 308*41d561cbSFan Zhang 0x78, 0xfe, 0x1f, 0xd1, 0xeb, 0xbc, 0xd9, 0x05, 309*41d561cbSFan Zhang 0x6a, 0x2e, 0xf9, 0x82, 0x97, 0xf9, 0xdf, 0x3c, 310*41d561cbSFan Zhang 0x66, 0xd5, 0xb2, 0xcc, 0xdc, 0x41, 0x47, 0xc4, 311*41d561cbSFan Zhang 0x16, 0x76, 0x44, 0x3f, 0x8c, 0x99, 0x85, 0xbc, 312*41d561cbSFan Zhang 0x97, 0x34, 0xbe, 0x2c, 0x31, 0xe7, 0x62, 0x49, 313*41d561cbSFan Zhang 0xfc, 0x5b, 0xc4, 0x2a 314*41d561cbSFan Zhang }, 315*41d561cbSFan Zhang .len = 100, 316*41d561cbSFan Zhang }, 317*41d561cbSFan Zhang .digest = { 318*41d561cbSFan Zhang .data = { 319*41d561cbSFan Zhang 0x97, 0x16, 0x8f, 0x55, 0x13, 0xc2, 0xe9, 0xbc, 320*41d561cbSFan Zhang 0x4b, 0xc5, 0x25, 0xce, 0x27, 0x03, 0x74, 0x0b, 321*41d561cbSFan Zhang 0xce, 0x1a, 0x06, 0xec, 0xfe, 0x99, 0xa5, 0x70, 322*41d561cbSFan Zhang 0xac, 0x66, 0xc8, 0x3e, 0xde, 0x96, 0x67, 0xcc, 323*41d561cbSFan Zhang 0x07, 0xed, 0xf6, 0x64, 0x61, 0x7c, 0xe5, 0x3c 324*41d561cbSFan Zhang }, 325*41d561cbSFan Zhang .len = 40, 326*41d561cbSFan Zhang }, 327*41d561cbSFan Zhang }; 328*41d561cbSFan Zhang 329*41d561cbSFan Zhang /* <-- AES CMAC --> */ 330*41d561cbSFan Zhang static struct fips_dev_self_test_vector 331*41d561cbSFan Zhang SELF_TEST_AES_CMAC_test_vector = { 332*41d561cbSFan Zhang .name = "SELF_TEST_AES_CMAC_test_vector", 333*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH, 334*41d561cbSFan Zhang .auth = { 335*41d561cbSFan Zhang .algo = RTE_CRYPTO_AUTH_AES_CMAC, 336*41d561cbSFan Zhang }, 337*41d561cbSFan Zhang .input = { 338*41d561cbSFan Zhang .data = { 339*41d561cbSFan Zhang 0x57, 0x88, 0xf6, 0x1e, 0x02, 0x30, 0x47, 0x91, 340*41d561cbSFan Zhang 0xb5, 0x2f, 0x40, 0x05, 0x7a, 0xbb, 0x4e, 0x04, 341*41d561cbSFan Zhang 0x46, 0x40, 0x3e, 0xf3, 0x74, 0x02, 0x53, 0xdf, 342*41d561cbSFan Zhang 0x72, 0x05, 0x96, 0x79, 0xbb, 0x2a, 0x6e, 0x5e, 343*41d561cbSFan Zhang 0x05, 0x9a, 0x70, 0x9c, 0xbb 344*41d561cbSFan Zhang }, 345*41d561cbSFan Zhang .len = 37, 346*41d561cbSFan Zhang }, 347*41d561cbSFan Zhang .key = { 348*41d561cbSFan Zhang .data = { 349*41d561cbSFan Zhang 0x18, 0x42, 0x15, 0x14, 0x5d, 0xa4, 0x9d, 0xb4, 350*41d561cbSFan Zhang 0x17, 0xe8, 0xbd, 0xd5, 0x73, 0xd6, 0x28, 0x2d 351*41d561cbSFan Zhang }, 352*41d561cbSFan Zhang .len = 16, 353*41d561cbSFan Zhang }, 354*41d561cbSFan Zhang .digest = { 355*41d561cbSFan Zhang .data = { 356*41d561cbSFan Zhang 0x8d, 0xa8, 0xcc, 0xa9, 0xb3, 0x6f, 0x68, 0x57, 357*41d561cbSFan Zhang 0x1c, 0x6c, 0x0e, 0x40, 0xa3, 0xf4, 0x10 358*41d561cbSFan Zhang }, 359*41d561cbSFan Zhang .len = 15, 360*41d561cbSFan Zhang }, 361*41d561cbSFan Zhang }; 362*41d561cbSFan Zhang 363*41d561cbSFan Zhang /* <-- AES CCM --> */ 364*41d561cbSFan Zhang static struct fips_dev_self_test_vector 365*41d561cbSFan Zhang SELF_TEST_AES128_CCM_test_vector = { 366*41d561cbSFan Zhang .name = "SELF_TEST_AES128_CCM_test_vector", 367*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 368*41d561cbSFan Zhang .iv = { 369*41d561cbSFan Zhang .data = { 370*41d561cbSFan Zhang 0x00, 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xB5, 371*41d561cbSFan Zhang 0x03, 0x97, 0x76, 0xE7, 0x0C 372*41d561cbSFan Zhang }, 373*41d561cbSFan Zhang .len = 13, 374*41d561cbSFan Zhang }, 375*41d561cbSFan Zhang .aead = { 376*41d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_CCM, 377*41d561cbSFan Zhang .aad = { 378*41d561cbSFan Zhang .data = { 379*41d561cbSFan Zhang /* 18 bytes padding for AAD */ 380*41d561cbSFan Zhang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 381*41d561cbSFan Zhang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 382*41d561cbSFan Zhang 0x00, 0x00, 383*41d561cbSFan Zhang 0x08, 0x40, 0x0F, 0xD2, 0xE1, 0x28, 0xA5, 0x7C, 384*41d561cbSFan Zhang 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xAB, 0xAE, 385*41d561cbSFan Zhang 0xA5, 0xB8, 0xFC, 0xBA, 0x00, 0x00 386*41d561cbSFan Zhang }, 387*41d561cbSFan Zhang .len = 22, 388*41d561cbSFan Zhang }, 389*41d561cbSFan Zhang }, 390*41d561cbSFan Zhang .input = { 391*41d561cbSFan Zhang .data = { 392*41d561cbSFan Zhang 0xF8, 0xBA, 0x1A, 0x55, 0xD0, 0x2F, 0x85, 0xAE, 393*41d561cbSFan Zhang 0x96, 0x7B, 0xB6, 0x2F, 0xB6, 0xCD, 0xA8, 0xEB, 394*41d561cbSFan Zhang 0x7E, 0x78, 0xA0, 0x50 395*41d561cbSFan Zhang }, 396*41d561cbSFan Zhang .len = 20, 397*41d561cbSFan Zhang }, 398*41d561cbSFan Zhang .key = { 399*41d561cbSFan Zhang .data = { 400*41d561cbSFan Zhang 0xC9, 0x7C, 0x1F, 0x67, 0xCE, 0x37, 0x11, 0x85, 401*41d561cbSFan Zhang 0x51, 0x4A, 0x8A, 0x19, 0xF2, 0xBD, 0xD5, 0x2F 402*41d561cbSFan Zhang }, 403*41d561cbSFan Zhang .len = 16, 404*41d561cbSFan Zhang }, 405*41d561cbSFan Zhang .output = { 406*41d561cbSFan Zhang .data = { 407*41d561cbSFan Zhang 0xF3, 0xD0, 0xA2, 0xFE, 0x9A, 0x3D, 0xBF, 0x23, 408*41d561cbSFan Zhang 0x42, 0xA6, 0x43, 0xE4, 0x32, 0x46, 0xE8, 0x0C, 409*41d561cbSFan Zhang 0x3C, 0x04, 0xD0, 0x19 410*41d561cbSFan Zhang }, 411*41d561cbSFan Zhang .len = 20, 412*41d561cbSFan Zhang }, 413*41d561cbSFan Zhang .digest = { 414*41d561cbSFan Zhang .data = { 415*41d561cbSFan Zhang 0x78, 0x45, 0xCE, 0x0B, 0x16, 0xF9, 0x76, 0x23 416*41d561cbSFan Zhang }, 417*41d561cbSFan Zhang .len = 8, 418*41d561cbSFan Zhang }, 419*41d561cbSFan Zhang }; 420*41d561cbSFan Zhang 421*41d561cbSFan Zhang /* <-- AES CBC --> */ 422*41d561cbSFan Zhang static struct fips_dev_self_test_vector 423*41d561cbSFan Zhang SELF_TEST_AES128_CBC_test_vector = { 424*41d561cbSFan Zhang .name = "SELF_TEST_AES128_CBC_test_vector", 425*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 426*41d561cbSFan Zhang 427*41d561cbSFan Zhang .iv = { 428*41d561cbSFan Zhang .data = { 429*41d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 430*41d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 431*41d561cbSFan Zhang }, 432*41d561cbSFan Zhang .len = 16, 433*41d561cbSFan Zhang }, 434*41d561cbSFan Zhang .cipher = { 435*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 436*41d561cbSFan Zhang }, 437*41d561cbSFan Zhang .input = { 438*41d561cbSFan Zhang .data = { 439*41d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 440*41d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 441*41d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 442*41d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 443*41d561cbSFan Zhang }, 444*41d561cbSFan Zhang .len = 32, 445*41d561cbSFan Zhang }, 446*41d561cbSFan Zhang .key = { 447*41d561cbSFan Zhang .data = { 448*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 449*41d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A 450*41d561cbSFan Zhang }, 451*41d561cbSFan Zhang .len = 16, 452*41d561cbSFan Zhang }, 453*41d561cbSFan Zhang .output = { 454*41d561cbSFan Zhang .data = { 455*41d561cbSFan Zhang 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31, 456*41d561cbSFan Zhang 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76, 457*41d561cbSFan Zhang 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E, 458*41d561cbSFan Zhang 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A, 459*41d561cbSFan Zhang }, 460*41d561cbSFan Zhang .len = 32, 461*41d561cbSFan Zhang }, 462*41d561cbSFan Zhang }; 463*41d561cbSFan Zhang 464*41d561cbSFan Zhang static struct fips_dev_self_test_vector 465*41d561cbSFan Zhang SELF_TEST_AES192_CBC_test_vector = { 466*41d561cbSFan Zhang .name = "SELF_TEST_AES192_CBC_test_vector", 467*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 468*41d561cbSFan Zhang 469*41d561cbSFan Zhang .iv = { 470*41d561cbSFan Zhang .data = { 471*41d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 472*41d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 473*41d561cbSFan Zhang }, 474*41d561cbSFan Zhang .len = 16, 475*41d561cbSFan Zhang }, 476*41d561cbSFan Zhang .cipher = { 477*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 478*41d561cbSFan Zhang }, 479*41d561cbSFan Zhang .input = { 480*41d561cbSFan Zhang .data = { 481*41d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 482*41d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 483*41d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 484*41d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 485*41d561cbSFan Zhang }, 486*41d561cbSFan Zhang .len = 32, 487*41d561cbSFan Zhang }, 488*41d561cbSFan Zhang .key = { 489*41d561cbSFan Zhang .data = { 490*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 491*41d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 492*41d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0 493*41d561cbSFan Zhang }, 494*41d561cbSFan Zhang .len = 24, 495*41d561cbSFan Zhang }, 496*41d561cbSFan Zhang .output = { 497*41d561cbSFan Zhang .data = { 498*41d561cbSFan Zhang 0x45, 0xEE, 0x9A, 0xEA, 0x3C, 0x03, 0xFC, 0x4C, 499*41d561cbSFan Zhang 0x84, 0x36, 0xB0, 0xDA, 0xB0, 0xDC, 0xF3, 0x5B, 500*41d561cbSFan Zhang 0x75, 0xA7, 0xBE, 0x0E, 0xC0, 0x8D, 0x6C, 0xF8, 501*41d561cbSFan Zhang 0xC1, 0x0F, 0xD0, 0x35, 0x1D, 0x82, 0xAE, 0x7C, 502*41d561cbSFan Zhang }, 503*41d561cbSFan Zhang .len = 32, 504*41d561cbSFan Zhang }, 505*41d561cbSFan Zhang }; 506*41d561cbSFan Zhang 507*41d561cbSFan Zhang /* AES-256 CBC ENCRYPT*/ 508*41d561cbSFan Zhang static struct fips_dev_self_test_vector 509*41d561cbSFan Zhang SELF_TEST_AES256_CBC_test_vector = { 510*41d561cbSFan Zhang .name = "SELF_TEST_AES256_CBC_test_vector", 511*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 512*41d561cbSFan Zhang 513*41d561cbSFan Zhang .iv = { 514*41d561cbSFan Zhang .data = { 515*41d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 516*41d561cbSFan Zhang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 517*41d561cbSFan Zhang }, 518*41d561cbSFan Zhang .len = 16, 519*41d561cbSFan Zhang }, 520*41d561cbSFan Zhang .cipher = { 521*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CBC, 522*41d561cbSFan Zhang }, 523*41d561cbSFan Zhang .input = { 524*41d561cbSFan Zhang .data = { 525*41d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 526*41d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 527*41d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 528*41d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 529*41d561cbSFan Zhang }, 530*41d561cbSFan Zhang .len = 32, 531*41d561cbSFan Zhang }, 532*41d561cbSFan Zhang .key = { 533*41d561cbSFan Zhang .data = { 534*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 535*41d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 536*41d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0, 537*41d561cbSFan Zhang 0x37, 0x07, 0xB8, 0x23, 0xA2, 0xA3, 0xB5, 0x8D 538*41d561cbSFan Zhang }, 539*41d561cbSFan Zhang .len = 32, 540*41d561cbSFan Zhang }, 541*41d561cbSFan Zhang .output = { 542*41d561cbSFan Zhang .data = { 543*41d561cbSFan Zhang 0xF3, 0xDD, 0xF0, 0x0B, 0xFF, 0xA2, 0x6A, 0x04, 544*41d561cbSFan Zhang 0xBE, 0xDA, 0x52, 0xA6, 0xFE, 0x6B, 0xA6, 0xA7, 545*41d561cbSFan Zhang 0x48, 0x1D, 0x7D, 0x98, 0x65, 0xDB, 0xEF, 0x06, 546*41d561cbSFan Zhang 0x26, 0xB5, 0x8E, 0xEB, 0x05, 0x0E, 0x77, 0x98, 547*41d561cbSFan Zhang }, 548*41d561cbSFan Zhang .len = 32, 549*41d561cbSFan Zhang }, 550*41d561cbSFan Zhang }; 551*41d561cbSFan Zhang 552*41d561cbSFan Zhang /* DES-128 CBC ENCRYPT*/ 553*41d561cbSFan Zhang static struct fips_dev_self_test_vector 554*41d561cbSFan Zhang SELF_TEST_3DES_2KEY_CBC_test_vector = { 555*41d561cbSFan Zhang .name = "SELF_TEST_3DES_2KEY_CBC_test_vector", 556*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 557*41d561cbSFan Zhang .iv = { 558*41d561cbSFan Zhang .data = { 559*41d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 560*41d561cbSFan Zhang }, 561*41d561cbSFan Zhang .len = 8, 562*41d561cbSFan Zhang }, 563*41d561cbSFan Zhang .cipher = { 564*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 565*41d561cbSFan Zhang }, 566*41d561cbSFan Zhang .input = { 567*41d561cbSFan Zhang .data = { 568*41d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 569*41d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 570*41d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 571*41d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 572*41d561cbSFan Zhang }, 573*41d561cbSFan Zhang .len = 32, 574*41d561cbSFan Zhang }, 575*41d561cbSFan Zhang .key = { 576*41d561cbSFan Zhang .data = { 577*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 578*41d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 579*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2 580*41d561cbSFan Zhang }, 581*41d561cbSFan Zhang .len = 24, 582*41d561cbSFan Zhang }, 583*41d561cbSFan Zhang .output = { 584*41d561cbSFan Zhang .data = { 585*41d561cbSFan Zhang 0x28, 0x2a, 0xff, 0x15, 0x5c, 0xdf, 0xd9, 0x6b, 586*41d561cbSFan Zhang 0x54, 0xbc, 0x7b, 0xfb, 0xc5, 0x64, 0x4d, 0xdd, 587*41d561cbSFan Zhang 0x3e, 0xf2, 0x9e, 0xb7, 0x53, 0x65, 0x37, 0x05, 588*41d561cbSFan Zhang 0xe0, 0xdf, 0xae, 0xf7, 0xc9, 0x27, 0xe4, 0xec, 589*41d561cbSFan Zhang }, 590*41d561cbSFan Zhang .len = 32, 591*41d561cbSFan Zhang }, 592*41d561cbSFan Zhang }; 593*41d561cbSFan Zhang 594*41d561cbSFan Zhang static struct fips_dev_self_test_vector 595*41d561cbSFan Zhang SELF_TEST_3DES_3KEY_CBC_test_vector = { 596*41d561cbSFan Zhang .name = "SELF_TEST_3DES_3KEY_CBC_test_vector", 597*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 598*41d561cbSFan Zhang 599*41d561cbSFan Zhang .iv = { 600*41d561cbSFan Zhang .data = { 601*41d561cbSFan Zhang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 602*41d561cbSFan Zhang }, 603*41d561cbSFan Zhang .len = 8, 604*41d561cbSFan Zhang }, 605*41d561cbSFan Zhang .cipher = { 606*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 607*41d561cbSFan Zhang }, 608*41d561cbSFan Zhang .input = { 609*41d561cbSFan Zhang .data = { 610*41d561cbSFan Zhang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, 611*41d561cbSFan Zhang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, 612*41d561cbSFan Zhang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77, 613*41d561cbSFan Zhang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 614*41d561cbSFan Zhang }, 615*41d561cbSFan Zhang .len = 32, 616*41d561cbSFan Zhang }, 617*41d561cbSFan Zhang .key = { 618*41d561cbSFan Zhang .data = { 619*41d561cbSFan Zhang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 620*41d561cbSFan Zhang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 621*41d561cbSFan Zhang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0 622*41d561cbSFan Zhang }, 623*41d561cbSFan Zhang .len = 24, 624*41d561cbSFan Zhang }, 625*41d561cbSFan Zhang .output = { 626*41d561cbSFan Zhang .data = { 627*41d561cbSFan Zhang 0xd0, 0xc9, 0xdc, 0x51, 0x29, 0x97, 0x03, 0x64, 628*41d561cbSFan Zhang 0xcd, 0x22, 0xba, 0x3d, 0x2b, 0xbc, 0x21, 0x37, 629*41d561cbSFan Zhang 0x7b, 0x1e, 0x29, 0x23, 0xeb, 0x51, 0x6e, 0xac, 630*41d561cbSFan Zhang 0xbe, 0x5b, 0xd3, 0x67, 0xe0, 0x3f, 0xc3, 0xb5, 631*41d561cbSFan Zhang }, 632*41d561cbSFan Zhang .len = 32, 633*41d561cbSFan Zhang }, 634*41d561cbSFan Zhang }; 635*41d561cbSFan Zhang 636*41d561cbSFan Zhang /* <-- AES GCM --> */ 637*41d561cbSFan Zhang static struct fips_dev_self_test_vector 638*41d561cbSFan Zhang SELF_TEST_AES128_GCM_encrypt_test_vector = { 639*41d561cbSFan Zhang .name = "SELF_TEST_AES128_GCM_encrypt_test_vector", 640*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 641*41d561cbSFan Zhang 642*41d561cbSFan Zhang .iv = { 643*41d561cbSFan Zhang .data = { 644*41d561cbSFan Zhang 0x5a, 0xdb, 0x96, 0x09, 0xdb, 0xae, 0xb5, 0x8c, 645*41d561cbSFan Zhang 0xbd, 0x6e, 0x72, 0x75 646*41d561cbSFan Zhang }, 647*41d561cbSFan Zhang .len = 12, 648*41d561cbSFan Zhang }, 649*41d561cbSFan Zhang .aead = { 650*41d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 651*41d561cbSFan Zhang .aad = { 652*41d561cbSFan Zhang .data = { 653*41d561cbSFan Zhang 0x88, 0x31, 0x9d, 0x6e, 0x1d, 0x3f, 0xfa, 0x5f, 654*41d561cbSFan Zhang 0x98, 0x71, 0x99, 0x16, 0x6c, 0x8a, 0x9b, 0x56, 655*41d561cbSFan Zhang 0xc2, 0xae, 0xba, 0x5a 656*41d561cbSFan Zhang }, 657*41d561cbSFan Zhang .len = 20, 658*41d561cbSFan Zhang }, 659*41d561cbSFan Zhang }, 660*41d561cbSFan Zhang .input = { 661*41d561cbSFan Zhang .data = { 662*41d561cbSFan Zhang 0x7c, 0x0e, 0x88, 0xc8, 0x88, 0x99, 0xa7, 0x79, 663*41d561cbSFan Zhang 0x22, 0x84, 0x65, 0x07, 0x47, 0x97, 0xcd, 0x4c, 664*41d561cbSFan Zhang 0x2e, 0x14, 0x98, 0xd2, 0x59, 0xb5, 0x43, 0x90, 665*41d561cbSFan Zhang 0xb8, 0x5e, 0x3e, 0xef, 0x1c, 0x02, 0xdf, 0x60, 666*41d561cbSFan Zhang 0xe7, 0x43, 0xf1, 0xb8, 0x40, 0x38, 0x2c, 0x4b, 667*41d561cbSFan Zhang 0xcc, 0xaf, 0x3b, 0xaf, 0xb4, 0xca, 0x84, 0x29, 668*41d561cbSFan Zhang 0xbe, 0xa0, 0x63 669*41d561cbSFan Zhang }, 670*41d561cbSFan Zhang .len = 51, 671*41d561cbSFan Zhang }, 672*41d561cbSFan Zhang .key = { 673*41d561cbSFan Zhang .data = { 674*41d561cbSFan Zhang 0xfe, 0x47, 0xfc, 0xce, 0x5f, 0xc3, 0x26, 0x65, 675*41d561cbSFan Zhang 0xd2, 0xae, 0x39, 0x9e, 0x4e, 0xec, 0x72, 0xba 676*41d561cbSFan Zhang }, 677*41d561cbSFan Zhang .len = 16, 678*41d561cbSFan Zhang }, 679*41d561cbSFan Zhang .output = { 680*41d561cbSFan Zhang .data = { 681*41d561cbSFan Zhang 0x98, 0xf4, 0x82, 0x6f, 0x05, 0xa2, 0x65, 0xe6, 682*41d561cbSFan Zhang 0xdd, 0x2b, 0xe8, 0x2d, 0xb2, 0x41, 0xc0, 0xfb, 683*41d561cbSFan Zhang 0xbb, 0xf9, 0xff, 0xb1, 0xc1, 0x73, 0xaa, 0x83, 684*41d561cbSFan Zhang 0x96, 0x4b, 0x7c, 0xf5, 0x39, 0x30, 0x43, 0x73, 685*41d561cbSFan Zhang 0x63, 0x65, 0x25, 0x3d, 0xdb, 0xc5, 0xdb, 0x87, 686*41d561cbSFan Zhang 0x78, 0x37, 0x14, 0x95, 0xda, 0x76, 0xd2, 0x69, 687*41d561cbSFan Zhang 0xe5, 0xdb, 0x3e 688*41d561cbSFan Zhang }, 689*41d561cbSFan Zhang .len = 51, 690*41d561cbSFan Zhang }, 691*41d561cbSFan Zhang .digest = { 692*41d561cbSFan Zhang .data = { 693*41d561cbSFan Zhang 0x29, 0x1e, 0xf1, 0x98, 0x2e, 0x4d, 0xef, 0xed, 694*41d561cbSFan Zhang 0xaa, 0x22, 0x49, 0xf8, 0x98, 0x55, 0x6b, 0x47 695*41d561cbSFan Zhang }, 696*41d561cbSFan Zhang .len = 16, 697*41d561cbSFan Zhang }, 698*41d561cbSFan Zhang }; 699*41d561cbSFan Zhang 700*41d561cbSFan Zhang static struct fips_dev_self_test_vector 701*41d561cbSFan Zhang SELF_TEST_AES192_GCM_encrypt_test_vector = { 702*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 703*41d561cbSFan Zhang .name = "SELF_TEST_AES192_GCM_encrypt_test_vector", 704*41d561cbSFan Zhang .iv = { 705*41d561cbSFan Zhang .data = { 706*41d561cbSFan Zhang 0x0b, 0xd4, 0x4f, 0xf4, 0xd2, 0x0c, 0x15, 0xd0, 707*41d561cbSFan Zhang 0x4f, 0xc6, 0x1e, 0xe7 708*41d561cbSFan Zhang }, 709*41d561cbSFan Zhang .len = 12, 710*41d561cbSFan Zhang }, 711*41d561cbSFan Zhang .aead = { 712*41d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 713*41d561cbSFan Zhang .aad = { 714*41d561cbSFan Zhang .data = { 715*41d561cbSFan Zhang 0x9e, 0xa4, 0x2c, 0x50, 0xa7, 0xfd, 0xb8, 0x5e, 716*41d561cbSFan Zhang 0x14, 0x1a, 0xa0, 0x84, 0xb4, 0x6b, 0xde, 0x12 717*41d561cbSFan Zhang }, 718*41d561cbSFan Zhang .len = 16, 719*41d561cbSFan Zhang }, 720*41d561cbSFan Zhang }, 721*41d561cbSFan Zhang .input = { 722*41d561cbSFan Zhang .data = { 723*41d561cbSFan Zhang 0x56, 0x7c, 0xcb, 0x3f, 0xa0, 0xdb, 0x89, 0x70, 724*41d561cbSFan Zhang 0x8a, 0xf3, 0xff, 0x2b, 0xb0, 0x29, 0xdd, 0xec, 725*41d561cbSFan Zhang 0x52, 0xc6, 0x69, 0x47, 0x58, 0x5d, 0x29, 0x1a, 726*41d561cbSFan Zhang 0x28, 0x56, 0x4b, 0xf5, 0x6d, 0xb7, 0x06, 0xf7 727*41d561cbSFan Zhang }, 728*41d561cbSFan Zhang .len = 32, 729*41d561cbSFan Zhang }, 730*41d561cbSFan Zhang .key = { 731*41d561cbSFan Zhang .data = { 732*41d561cbSFan Zhang 0x0d, 0x4a, 0x90, 0x0d, 0x1b, 0x0b, 0xb5, 0xb7, 733*41d561cbSFan Zhang 0xbe, 0x24, 0x38, 0xc2, 0xba, 0x48, 0xfc, 0x45, 734*41d561cbSFan Zhang 0x13, 0x4c, 0xc1, 0x98, 0x10, 0x8c, 0xf8, 0x85 735*41d561cbSFan Zhang }, 736*41d561cbSFan Zhang .len = 24, 737*41d561cbSFan Zhang }, 738*41d561cbSFan Zhang .output = { 739*41d561cbSFan Zhang .data = { 740*41d561cbSFan Zhang 0x2f, 0x8a, 0x42, 0xcd, 0x18, 0x3b, 0x03, 0x14, 741*41d561cbSFan Zhang 0xfd, 0x20, 0xa3, 0xd9, 0x7d, 0x9e, 0x0c, 0x52, 742*41d561cbSFan Zhang 0x17, 0xb0, 0xf0, 0x88, 0xd2, 0xca, 0x87, 0xa8, 743*41d561cbSFan Zhang 0x29, 0x0d, 0x4b, 0xae, 0x69, 0xad, 0x83, 0xf5 744*41d561cbSFan Zhang }, 745*41d561cbSFan Zhang .len = 32, 746*41d561cbSFan Zhang }, 747*41d561cbSFan Zhang .digest = { 748*41d561cbSFan Zhang .data = { 749*41d561cbSFan Zhang 0xde, 0x41, 0x45, 0x92, 0xd7, 0x7f, 0x2f, 0x0b, 750*41d561cbSFan Zhang 0x50, 0xdf, 0x4a, 0xec, 0x71, 0x4f, 0xad, 0x43 751*41d561cbSFan Zhang }, 752*41d561cbSFan Zhang .len = 16, 753*41d561cbSFan Zhang }, 754*41d561cbSFan Zhang }; 755*41d561cbSFan Zhang 756*41d561cbSFan Zhang static struct fips_dev_self_test_vector 757*41d561cbSFan Zhang SELF_TEST_AES256_GCM_encrypt_test_vector = { 758*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD, 759*41d561cbSFan Zhang .name = "SELF_TEST_AES256_GCM_encrypt_test_vector", 760*41d561cbSFan Zhang .iv = { 761*41d561cbSFan Zhang .data = { 762*41d561cbSFan Zhang 0x5c, 0x1b, 0x21, 0xc8, 0x99, 0x8e, 0xd6, 0x29, 763*41d561cbSFan Zhang 0x90, 0x06, 0xd3, 0xf9 764*41d561cbSFan Zhang }, 765*41d561cbSFan Zhang .len = 12, 766*41d561cbSFan Zhang }, 767*41d561cbSFan Zhang .aead = { 768*41d561cbSFan Zhang .algo = RTE_CRYPTO_AEAD_AES_GCM, 769*41d561cbSFan Zhang .aad = { 770*41d561cbSFan Zhang .data = { 771*41d561cbSFan Zhang 0x22, 0xed, 0x23, 0x59, 0x46, 0x23, 0x5a, 0x85, 772*41d561cbSFan Zhang 0xa4, 0x5b, 0xc5, 0xfa, 0xd7, 0x14, 0x0b, 0xfa 773*41d561cbSFan Zhang }, 774*41d561cbSFan Zhang .len = 16, 775*41d561cbSFan Zhang }, 776*41d561cbSFan Zhang }, 777*41d561cbSFan Zhang .input = { 778*41d561cbSFan Zhang .data = { 779*41d561cbSFan Zhang 0xad, 0x42, 0x60, 0xe3, 0xcd, 0xc7, 0x6b, 0xcc, 780*41d561cbSFan Zhang 0x10, 0xc7, 0xb2, 0xc0, 0x6b, 0x80, 0xb3, 0xbe, 781*41d561cbSFan Zhang 0x94, 0x82, 0x58, 0xe5, 0xef, 0x20, 0xc5, 0x08, 782*41d561cbSFan Zhang 0xa8, 0x1f, 0x51, 0xe9, 0x6a, 0x51, 0x83, 0x88 783*41d561cbSFan Zhang }, 784*41d561cbSFan Zhang .len = 32, 785*41d561cbSFan Zhang }, 786*41d561cbSFan Zhang .key = { 787*41d561cbSFan Zhang .data = { 788*41d561cbSFan Zhang 0x37, 0xcc, 0xdb, 0xa1, 0xd9, 0x29, 0xd6, 0x43, 789*41d561cbSFan Zhang 0x6c, 0x16, 0xbb, 0xa5, 0xb5, 0xff, 0x34, 0xde, 790*41d561cbSFan Zhang 0xec, 0x88, 0xed, 0x7d, 0xf3, 0xd1, 0x5d, 0x0f, 791*41d561cbSFan Zhang 0x4d, 0xdf, 0x80, 0xc0, 0xc7, 0x31, 0xee, 0x1f 792*41d561cbSFan Zhang }, 793*41d561cbSFan Zhang .len = 32, 794*41d561cbSFan Zhang }, 795*41d561cbSFan Zhang .output = { 796*41d561cbSFan Zhang .data = { 797*41d561cbSFan Zhang 0x3b, 0x33, 0x5f, 0x8b, 0x08, 0xd3, 0x3c, 0xcd, 798*41d561cbSFan Zhang 0xca, 0xd2, 0x28, 0xa7, 0x47, 0x00, 0xf1, 0x00, 799*41d561cbSFan Zhang 0x75, 0x42, 0xa4, 0xd1, 0xe7, 0xfc, 0x1e, 0xbe, 800*41d561cbSFan Zhang 0x3f, 0x44, 0x7f, 0xe7, 0x1a, 0xf2, 0x98, 0x16 801*41d561cbSFan Zhang }, 802*41d561cbSFan Zhang .len = 32, 803*41d561cbSFan Zhang }, 804*41d561cbSFan Zhang .digest = { 805*41d561cbSFan Zhang .data = { 806*41d561cbSFan Zhang 0x1f, 0xbf, 0x49, 0xcc, 0x46, 0xf4, 0x58, 0xbf, 807*41d561cbSFan Zhang 0x6e, 0x88, 0xf6, 0x37, 0x09, 0x75, 0xe6, 0xd4 808*41d561cbSFan Zhang }, 809*41d561cbSFan Zhang .len = 16, 810*41d561cbSFan Zhang }, 811*41d561cbSFan Zhang }; 812*41d561cbSFan Zhang 813*41d561cbSFan Zhang 814*41d561cbSFan Zhang /* <-- AES CTR --> */ 815*41d561cbSFan Zhang static struct fips_dev_self_test_vector 816*41d561cbSFan Zhang SELF_TEST_AES128_CTR_test_vector = { 817*41d561cbSFan Zhang .name = "SELF_TEST_AES128_CTR_test_vector", 818*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 819*41d561cbSFan Zhang 820*41d561cbSFan Zhang .iv = { 821*41d561cbSFan Zhang .data = { 822*41d561cbSFan Zhang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 823*41d561cbSFan Zhang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF 824*41d561cbSFan Zhang }, 825*41d561cbSFan Zhang .len = 16, 826*41d561cbSFan Zhang }, 827*41d561cbSFan Zhang .cipher = { 828*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 829*41d561cbSFan Zhang }, 830*41d561cbSFan Zhang .input = { 831*41d561cbSFan Zhang .data = { 832*41d561cbSFan Zhang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 833*41d561cbSFan Zhang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 834*41d561cbSFan Zhang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, 835*41d561cbSFan Zhang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, 836*41d561cbSFan Zhang }, 837*41d561cbSFan Zhang .len = 32, 838*41d561cbSFan Zhang }, 839*41d561cbSFan Zhang .key = { 840*41d561cbSFan Zhang .data = { 841*41d561cbSFan Zhang 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 842*41d561cbSFan Zhang 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C 843*41d561cbSFan Zhang }, 844*41d561cbSFan Zhang .len = 16, 845*41d561cbSFan Zhang }, 846*41d561cbSFan Zhang .output = { 847*41d561cbSFan Zhang .data = { 848*41d561cbSFan Zhang 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26, 849*41d561cbSFan Zhang 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE, 850*41d561cbSFan Zhang 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF, 851*41d561cbSFan Zhang 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF, 852*41d561cbSFan Zhang }, 853*41d561cbSFan Zhang .len = 32, 854*41d561cbSFan Zhang }, 855*41d561cbSFan Zhang }; 856*41d561cbSFan Zhang 857*41d561cbSFan Zhang static struct fips_dev_self_test_vector 858*41d561cbSFan Zhang SELF_TEST_AES192_CTR_test_vector = { 859*41d561cbSFan Zhang .name = "SELF_TEST_AES192_CTR_test_vector", 860*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 861*41d561cbSFan Zhang 862*41d561cbSFan Zhang .iv = { 863*41d561cbSFan Zhang .data = { 864*41d561cbSFan Zhang 0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40, 865*41d561cbSFan Zhang 0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57 866*41d561cbSFan Zhang }, 867*41d561cbSFan Zhang .len = 16, 868*41d561cbSFan Zhang }, 869*41d561cbSFan Zhang .cipher = { 870*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 871*41d561cbSFan Zhang }, 872*41d561cbSFan Zhang .input = { 873*41d561cbSFan Zhang .data = { 874*41d561cbSFan Zhang 0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8, 875*41d561cbSFan Zhang 0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B, 876*41d561cbSFan Zhang 0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55, 877*41d561cbSFan Zhang 0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC, 878*41d561cbSFan Zhang }, 879*41d561cbSFan Zhang .len = 32, 880*41d561cbSFan Zhang }, 881*41d561cbSFan Zhang .key = { 882*41d561cbSFan Zhang .data = { 883*41d561cbSFan Zhang 0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C, 884*41d561cbSFan Zhang 0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F, 885*41d561cbSFan Zhang 0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4 886*41d561cbSFan Zhang }, 887*41d561cbSFan Zhang .len = 24, 888*41d561cbSFan Zhang }, 889*41d561cbSFan Zhang .output = { 890*41d561cbSFan Zhang .data = { 891*41d561cbSFan Zhang 0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84, 892*41d561cbSFan Zhang 0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2, 893*41d561cbSFan Zhang 0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37, 894*41d561cbSFan Zhang 0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E, 895*41d561cbSFan Zhang }, 896*41d561cbSFan Zhang .len = 32, 897*41d561cbSFan Zhang }, 898*41d561cbSFan Zhang }; 899*41d561cbSFan Zhang 900*41d561cbSFan Zhang static struct fips_dev_self_test_vector 901*41d561cbSFan Zhang SELF_TEST_AES256_CTR_test_vector = { 902*41d561cbSFan Zhang .name = "SELF_TEST_AES256_CTR_test_vector", 903*41d561cbSFan Zhang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 904*41d561cbSFan Zhang 905*41d561cbSFan Zhang .iv = { 906*41d561cbSFan Zhang .data = { 907*41d561cbSFan Zhang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 908*41d561cbSFan Zhang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF 909*41d561cbSFan Zhang }, 910*41d561cbSFan Zhang .len = 16, 911*41d561cbSFan Zhang }, 912*41d561cbSFan Zhang .cipher = { 913*41d561cbSFan Zhang .algo = RTE_CRYPTO_CIPHER_AES_CTR, 914*41d561cbSFan Zhang }, 915*41d561cbSFan Zhang .input = { 916*41d561cbSFan Zhang .data = { 917*41d561cbSFan Zhang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 918*41d561cbSFan Zhang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 919*41d561cbSFan Zhang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, 920*41d561cbSFan Zhang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, 921*41d561cbSFan Zhang }, 922*41d561cbSFan Zhang .len = 32, 923*41d561cbSFan Zhang }, 924*41d561cbSFan Zhang .key = { 925*41d561cbSFan Zhang .data = { 926*41d561cbSFan Zhang 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, 927*41d561cbSFan Zhang 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, 928*41d561cbSFan Zhang 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, 929*41d561cbSFan Zhang 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 930*41d561cbSFan Zhang }, 931*41d561cbSFan Zhang .len = 32, 932*41d561cbSFan Zhang }, 933*41d561cbSFan Zhang .output = { 934*41d561cbSFan Zhang .data = { 935*41d561cbSFan Zhang 0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5, 936*41d561cbSFan Zhang 0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28, 937*41d561cbSFan Zhang 0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A, 938*41d561cbSFan Zhang 0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5, 939*41d561cbSFan Zhang }, 940*41d561cbSFan Zhang .len = 32, 941*41d561cbSFan Zhang }, 942*41d561cbSFan Zhang }; 943*41d561cbSFan Zhang 944*41d561cbSFan Zhang 945*41d561cbSFan Zhang struct fips_dev_self_test_vector 946*41d561cbSFan Zhang *self_test_vectors[] = { 947*41d561cbSFan Zhang &SELF_TEST_AES128_CBC_test_vector, 948*41d561cbSFan Zhang &SELF_TEST_AES192_CBC_test_vector, 949*41d561cbSFan Zhang &SELF_TEST_AES256_CBC_test_vector, 950*41d561cbSFan Zhang &SELF_TEST_3DES_2KEY_CBC_test_vector, 951*41d561cbSFan Zhang &SELF_TEST_3DES_3KEY_CBC_test_vector, 952*41d561cbSFan Zhang &SELF_TEST_AES128_CCM_test_vector, 953*41d561cbSFan Zhang &SELF_TEST_SHA1_HMAC_test_vector, 954*41d561cbSFan Zhang &SELF_TEST_SHA224_HMAC_test_vector, 955*41d561cbSFan Zhang &SELF_TEST_SHA256_HMAC_test_vector, 956*41d561cbSFan Zhang &SELF_TEST_SHA384_HMAC_test_vector, 957*41d561cbSFan Zhang &SELF_TEST_SHA512_HMAC_test_vector, 958*41d561cbSFan Zhang &SELF_TEST_AES_CMAC_test_vector, 959*41d561cbSFan Zhang &SELF_TEST_AES128_GCM_encrypt_test_vector, 960*41d561cbSFan Zhang &SELF_TEST_AES192_GCM_encrypt_test_vector, 961*41d561cbSFan Zhang &SELF_TEST_AES256_GCM_encrypt_test_vector, 962*41d561cbSFan Zhang &SELF_TEST_AES128_CTR_test_vector, 963*41d561cbSFan Zhang &SELF_TEST_AES192_CTR_test_vector, 964*41d561cbSFan Zhang &SELF_TEST_AES256_CTR_test_vector, 965*41d561cbSFan Zhang }; 966*41d561cbSFan Zhang 967*41d561cbSFan Zhang struct fips_dev_auto_test_env { 968*41d561cbSFan Zhang struct rte_mempool *mpool; 969*41d561cbSFan Zhang struct rte_mempool *op_pool; 970*41d561cbSFan Zhang struct rte_mempool *sess_pool; 971*41d561cbSFan Zhang struct rte_mempool *sess_priv_pool; 972*41d561cbSFan Zhang struct rte_mbuf *mbuf; 973*41d561cbSFan Zhang struct rte_crypto_op *op; 974*41d561cbSFan Zhang }; 975*41d561cbSFan Zhang 976*41d561cbSFan Zhang typedef int (*fips_dev_self_test_prepare_xform_t)(uint8_t, 977*41d561cbSFan Zhang struct rte_crypto_sym_xform *, 978*41d561cbSFan Zhang struct fips_dev_self_test_vector *, 979*41d561cbSFan Zhang uint32_t, uint8_t *, 980*41d561cbSFan Zhang uint32_t); 981*41d561cbSFan Zhang 982*41d561cbSFan Zhang typedef int (*fips_dev_self_test_prepare_op_t)(struct rte_crypto_op *, 983*41d561cbSFan Zhang struct rte_mbuf *, struct rte_cryptodev_sym_session *, 984*41d561cbSFan Zhang uint32_t, struct fips_dev_self_test_vector *); 985*41d561cbSFan Zhang 986*41d561cbSFan Zhang typedef int (*fips_dev_self_test_check_result_t)(struct rte_crypto_op *, 987*41d561cbSFan Zhang struct fips_dev_self_test_vector *, uint32_t); 988*41d561cbSFan Zhang 989*41d561cbSFan Zhang struct fips_dev_self_test_ops { 990*41d561cbSFan Zhang enum rte_crypto_sym_xform_type last_operation_type; 991*41d561cbSFan Zhang fips_dev_self_test_prepare_xform_t prepare_xform; 992*41d561cbSFan Zhang fips_dev_self_test_prepare_op_t prepare_op; 993*41d561cbSFan Zhang fips_dev_self_test_check_result_t check_result; 994*41d561cbSFan Zhang }; 995*41d561cbSFan Zhang 996*41d561cbSFan Zhang static int 997*41d561cbSFan Zhang prepare_cipher_xform(uint8_t dev_id, 998*41d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 999*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1000*41d561cbSFan Zhang uint32_t dir, 1001*41d561cbSFan Zhang uint8_t *key, 1002*41d561cbSFan Zhang uint32_t neg_test) 1003*41d561cbSFan Zhang { 1004*41d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 1005*41d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 1006*41d561cbSFan Zhang struct rte_crypto_cipher_xform *cipher_xform = &xform->cipher; 1007*41d561cbSFan Zhang 1008*41d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 1009*41d561cbSFan Zhang 1010*41d561cbSFan Zhang /** negative test, key is xored */ 1011*41d561cbSFan Zhang if (neg_test) { 1012*41d561cbSFan Zhang uint32_t i; 1013*41d561cbSFan Zhang 1014*41d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 1015*41d561cbSFan Zhang key[i] ^= vec->key.data[i]; 1016*41d561cbSFan Zhang } else 1017*41d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 1018*41d561cbSFan Zhang 1019*41d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1020*41d561cbSFan Zhang 1021*41d561cbSFan Zhang cipher_xform->algo = vec->cipher.algo; 1022*41d561cbSFan Zhang cipher_xform->op = (dir == self_test_dir_enc_auth_gen) ? 1023*41d561cbSFan Zhang RTE_CRYPTO_CIPHER_OP_ENCRYPT : 1024*41d561cbSFan Zhang RTE_CRYPTO_CIPHER_OP_DECRYPT; 1025*41d561cbSFan Zhang cipher_xform->key.data = key; 1026*41d561cbSFan Zhang cipher_xform->key.length = vec->key.len; 1027*41d561cbSFan Zhang cipher_xform->iv.length = vec->iv.len; 1028*41d561cbSFan Zhang cipher_xform->iv.offset = IV_OFF; 1029*41d561cbSFan Zhang 1030*41d561cbSFan Zhang cap_idx.algo.cipher = cipher_xform->algo; 1031*41d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; 1032*41d561cbSFan Zhang 1033*41d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 1034*41d561cbSFan Zhang if (!cap) { 1035*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 1036*41d561cbSFan Zhang dev_id); 1037*41d561cbSFan Zhang return -EACCES; 1038*41d561cbSFan Zhang } 1039*41d561cbSFan Zhang 1040*41d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_cipher(cap, 1041*41d561cbSFan Zhang cipher_xform->key.length, 1042*41d561cbSFan Zhang cipher_xform->iv.length) != 0) { 1043*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %s key length %u IV length %u\n", 1044*41d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 1045*41d561cbSFan Zhang cipher_xform->key.length, 1046*41d561cbSFan Zhang cipher_xform->iv.length); 1047*41d561cbSFan Zhang return -EACCES; 1048*41d561cbSFan Zhang } 1049*41d561cbSFan Zhang 1050*41d561cbSFan Zhang return 0; 1051*41d561cbSFan Zhang } 1052*41d561cbSFan Zhang 1053*41d561cbSFan Zhang static int 1054*41d561cbSFan Zhang prepare_auth_xform(uint8_t dev_id, 1055*41d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 1056*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1057*41d561cbSFan Zhang uint32_t dir, 1058*41d561cbSFan Zhang uint8_t *key, 1059*41d561cbSFan Zhang uint32_t neg_test) 1060*41d561cbSFan Zhang { 1061*41d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 1062*41d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 1063*41d561cbSFan Zhang struct rte_crypto_auth_xform *auth_xform = &xform->auth; 1064*41d561cbSFan Zhang 1065*41d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 1066*41d561cbSFan Zhang 1067*41d561cbSFan Zhang /** negative test, key is xored */ 1068*41d561cbSFan Zhang if (neg_test) { 1069*41d561cbSFan Zhang uint32_t i; 1070*41d561cbSFan Zhang 1071*41d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 1072*41d561cbSFan Zhang key[i] ^= vec->key.data[i]; 1073*41d561cbSFan Zhang } else 1074*41d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 1075*41d561cbSFan Zhang 1076*41d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_AUTH; 1077*41d561cbSFan Zhang 1078*41d561cbSFan Zhang auth_xform->algo = vec->auth.algo; 1079*41d561cbSFan Zhang auth_xform->op = (dir == self_test_dir_enc_auth_gen) ? 1080*41d561cbSFan Zhang RTE_CRYPTO_AUTH_OP_GENERATE : 1081*41d561cbSFan Zhang RTE_CRYPTO_AUTH_OP_VERIFY; 1082*41d561cbSFan Zhang auth_xform->digest_length = vec->digest.len; 1083*41d561cbSFan Zhang auth_xform->key.data = key; 1084*41d561cbSFan Zhang auth_xform->key.length = vec->key.len; 1085*41d561cbSFan Zhang 1086*41d561cbSFan Zhang cap_idx.algo.auth = auth_xform->algo; 1087*41d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; 1088*41d561cbSFan Zhang 1089*41d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 1090*41d561cbSFan Zhang if (!cap) { 1091*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 1092*41d561cbSFan Zhang dev_id); 1093*41d561cbSFan Zhang return -EACCES; 1094*41d561cbSFan Zhang } 1095*41d561cbSFan Zhang 1096*41d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_auth(cap, 1097*41d561cbSFan Zhang auth_xform->key.length, 1098*41d561cbSFan Zhang auth_xform->digest_length, 0) != 0) { 1099*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %s key length %u Digest length %u\n", 1100*41d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 1101*41d561cbSFan Zhang auth_xform->key.length, 1102*41d561cbSFan Zhang auth_xform->digest_length); 1103*41d561cbSFan Zhang return -EACCES; 1104*41d561cbSFan Zhang } 1105*41d561cbSFan Zhang 1106*41d561cbSFan Zhang return 0; 1107*41d561cbSFan Zhang } 1108*41d561cbSFan Zhang 1109*41d561cbSFan Zhang static int 1110*41d561cbSFan Zhang prepare_aead_xform(uint8_t dev_id, 1111*41d561cbSFan Zhang struct rte_crypto_sym_xform *xform, 1112*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1113*41d561cbSFan Zhang uint32_t dir, 1114*41d561cbSFan Zhang uint8_t *key, 1115*41d561cbSFan Zhang uint32_t neg_test) 1116*41d561cbSFan Zhang { 1117*41d561cbSFan Zhang const struct rte_cryptodev_symmetric_capability *cap; 1118*41d561cbSFan Zhang struct rte_cryptodev_sym_capability_idx cap_idx; 1119*41d561cbSFan Zhang struct rte_crypto_aead_xform *aead_xform = &xform->aead; 1120*41d561cbSFan Zhang 1121*41d561cbSFan Zhang memset(xform, 0, sizeof(*xform)); 1122*41d561cbSFan Zhang 1123*41d561cbSFan Zhang /** negative test, key is xored */ 1124*41d561cbSFan Zhang if (neg_test) { 1125*41d561cbSFan Zhang uint32_t i; 1126*41d561cbSFan Zhang 1127*41d561cbSFan Zhang for (i = 0; i < vec->key.len; i++) 1128*41d561cbSFan Zhang key[i] ^= vec->key.data[i]; 1129*41d561cbSFan Zhang } else 1130*41d561cbSFan Zhang memcpy(key, vec->key.data, vec->key.len); 1131*41d561cbSFan Zhang 1132*41d561cbSFan Zhang xform->type = RTE_CRYPTO_SYM_XFORM_AEAD; 1133*41d561cbSFan Zhang 1134*41d561cbSFan Zhang aead_xform->algo = vec->aead.algo; 1135*41d561cbSFan Zhang aead_xform->op = (dir == self_test_dir_enc_auth_gen) ? 1136*41d561cbSFan Zhang RTE_CRYPTO_AEAD_OP_ENCRYPT : 1137*41d561cbSFan Zhang RTE_CRYPTO_AEAD_OP_DECRYPT; 1138*41d561cbSFan Zhang aead_xform->aad_length = vec->aead.aad.len; 1139*41d561cbSFan Zhang aead_xform->digest_length = vec->digest.len; 1140*41d561cbSFan Zhang aead_xform->iv.offset = IV_OFF; 1141*41d561cbSFan Zhang aead_xform->iv.length = vec->iv.len; 1142*41d561cbSFan Zhang aead_xform->key.data = key; 1143*41d561cbSFan Zhang aead_xform->key.length = vec->key.len; 1144*41d561cbSFan Zhang 1145*41d561cbSFan Zhang cap_idx.algo.aead = aead_xform->algo; 1146*41d561cbSFan Zhang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD; 1147*41d561cbSFan Zhang 1148*41d561cbSFan Zhang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx); 1149*41d561cbSFan Zhang if (!cap) { 1150*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n", 1151*41d561cbSFan Zhang dev_id); 1152*41d561cbSFan Zhang return -EACCES; 1153*41d561cbSFan Zhang } 1154*41d561cbSFan Zhang 1155*41d561cbSFan Zhang if (rte_cryptodev_sym_capability_check_aead(cap, 1156*41d561cbSFan Zhang aead_xform->key.length, 1157*41d561cbSFan Zhang aead_xform->digest_length, aead_xform->aad_length, 1158*41d561cbSFan Zhang aead_xform->iv.length) != 0) { 1159*41d561cbSFan Zhang RTE_LOG(ERR, PMD, 1160*41d561cbSFan Zhang "PMD %s key_len %u tag_len %u aad_len %u iv_len %u\n", 1161*41d561cbSFan Zhang rte_cryptodev_name_get(dev_id), 1162*41d561cbSFan Zhang aead_xform->key.length, 1163*41d561cbSFan Zhang aead_xform->digest_length, 1164*41d561cbSFan Zhang aead_xform->aad_length, 1165*41d561cbSFan Zhang aead_xform->iv.length); 1166*41d561cbSFan Zhang return -EACCES; 1167*41d561cbSFan Zhang } 1168*41d561cbSFan Zhang 1169*41d561cbSFan Zhang return 0; 1170*41d561cbSFan Zhang } 1171*41d561cbSFan Zhang 1172*41d561cbSFan Zhang static int 1173*41d561cbSFan Zhang prepare_cipher_op(struct rte_crypto_op *op, 1174*41d561cbSFan Zhang struct rte_mbuf *mbuf, 1175*41d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 1176*41d561cbSFan Zhang uint32_t dir, 1177*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 1178*41d561cbSFan Zhang { 1179*41d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 1180*41d561cbSFan Zhang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF); 1181*41d561cbSFan Zhang uint8_t *dst; 1182*41d561cbSFan Zhang const uint8_t *src; 1183*41d561cbSFan Zhang uint32_t len; 1184*41d561cbSFan Zhang 1185*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1186*41d561cbSFan Zhang src = vec->input.data; 1187*41d561cbSFan Zhang len = vec->input.len; 1188*41d561cbSFan Zhang } else { 1189*41d561cbSFan Zhang src = vec->output.data; 1190*41d561cbSFan Zhang len = vec->output.len; 1191*41d561cbSFan Zhang } 1192*41d561cbSFan Zhang 1193*41d561cbSFan Zhang sym->cipher.data.offset = 0; 1194*41d561cbSFan Zhang memcpy(iv, vec->iv.data, vec->iv.len); 1195*41d561cbSFan Zhang 1196*41d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, len); 1197*41d561cbSFan Zhang if (!dst) { 1198*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 1199*41d561cbSFan Zhang return -ENOMEM; 1200*41d561cbSFan Zhang } 1201*41d561cbSFan Zhang 1202*41d561cbSFan Zhang memcpy(dst, src, len); 1203*41d561cbSFan Zhang 1204*41d561cbSFan Zhang sym->cipher.data.length = len; 1205*41d561cbSFan Zhang 1206*41d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 1207*41d561cbSFan Zhang 1208*41d561cbSFan Zhang return 0; 1209*41d561cbSFan Zhang } 1210*41d561cbSFan Zhang 1211*41d561cbSFan Zhang static int 1212*41d561cbSFan Zhang prepare_auth_op(struct rte_crypto_op *op, 1213*41d561cbSFan Zhang struct rte_mbuf *mbuf, 1214*41d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 1215*41d561cbSFan Zhang uint32_t dir, 1216*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 1217*41d561cbSFan Zhang { 1218*41d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 1219*41d561cbSFan Zhang uint8_t *dst; 1220*41d561cbSFan Zhang 1221*41d561cbSFan Zhang if (vec->input.len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) { 1222*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n", 1223*41d561cbSFan Zhang -ENOMEM, vec->input.len + vec->digest.len); 1224*41d561cbSFan Zhang return -ENOMEM; 1225*41d561cbSFan Zhang } 1226*41d561cbSFan Zhang 1227*41d561cbSFan Zhang sym->auth.data.offset = 0; 1228*41d561cbSFan Zhang 1229*41d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, vec->input.len + 1230*41d561cbSFan Zhang vec->digest.len); 1231*41d561cbSFan Zhang if (!dst) { 1232*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 1233*41d561cbSFan Zhang return -ENOMEM; 1234*41d561cbSFan Zhang } 1235*41d561cbSFan Zhang 1236*41d561cbSFan Zhang memcpy(dst, vec->input.data, vec->input.len); 1237*41d561cbSFan Zhang sym->auth.data.length = vec->input.len; 1238*41d561cbSFan Zhang sym->auth.digest.data = dst + vec->input.len; 1239*41d561cbSFan Zhang 1240*41d561cbSFan Zhang if (dir == self_test_dir_dec_auth_verify) 1241*41d561cbSFan Zhang memcpy(dst + vec->input.len, vec->digest.data, vec->digest.len); 1242*41d561cbSFan Zhang 1243*41d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 1244*41d561cbSFan Zhang 1245*41d561cbSFan Zhang return 0; 1246*41d561cbSFan Zhang } 1247*41d561cbSFan Zhang 1248*41d561cbSFan Zhang static int 1249*41d561cbSFan Zhang prepare_aead_op(struct rte_crypto_op *op, 1250*41d561cbSFan Zhang struct rte_mbuf *mbuf, 1251*41d561cbSFan Zhang struct rte_cryptodev_sym_session *session, 1252*41d561cbSFan Zhang uint32_t dir, 1253*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 1254*41d561cbSFan Zhang { 1255*41d561cbSFan Zhang struct rte_crypto_sym_op *sym = op->sym; 1256*41d561cbSFan Zhang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF); 1257*41d561cbSFan Zhang uint8_t *dst; 1258*41d561cbSFan Zhang const uint8_t *src; 1259*41d561cbSFan Zhang uint32_t len; 1260*41d561cbSFan Zhang 1261*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1262*41d561cbSFan Zhang len = vec->input.len; 1263*41d561cbSFan Zhang src = vec->input.data; 1264*41d561cbSFan Zhang } else { 1265*41d561cbSFan Zhang len = vec->output.len; 1266*41d561cbSFan Zhang src = vec->output.data; 1267*41d561cbSFan Zhang } 1268*41d561cbSFan Zhang 1269*41d561cbSFan Zhang if (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM) 1270*41d561cbSFan Zhang memcpy(iv + 1, vec->iv.data, vec->iv.len); 1271*41d561cbSFan Zhang else 1272*41d561cbSFan Zhang memcpy(iv, vec->iv.data, vec->iv.len); 1273*41d561cbSFan Zhang 1274*41d561cbSFan Zhang if (len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) { 1275*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n", 1276*41d561cbSFan Zhang -ENOMEM, len + vec->digest.len); 1277*41d561cbSFan Zhang return -ENOMEM; 1278*41d561cbSFan Zhang } 1279*41d561cbSFan Zhang 1280*41d561cbSFan Zhang dst = (uint8_t *)rte_pktmbuf_append(mbuf, len + vec->digest.len); 1281*41d561cbSFan Zhang if (!dst) { 1282*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); 1283*41d561cbSFan Zhang return -ENOMEM; 1284*41d561cbSFan Zhang } 1285*41d561cbSFan Zhang 1286*41d561cbSFan Zhang sym->m_src = mbuf; 1287*41d561cbSFan Zhang sym->aead.data.length = len; 1288*41d561cbSFan Zhang sym->aead.data.offset = 0; 1289*41d561cbSFan Zhang sym->aead.aad.data = vec->aead.aad.data; 1290*41d561cbSFan Zhang sym->aead.digest.data = dst + vec->input.len; 1291*41d561cbSFan Zhang memcpy(dst, src, len); 1292*41d561cbSFan Zhang 1293*41d561cbSFan Zhang if (dir == self_test_dir_dec_auth_verify) 1294*41d561cbSFan Zhang memcpy(sym->aead.digest.data, vec->digest.data, vec->digest.len); 1295*41d561cbSFan Zhang 1296*41d561cbSFan Zhang rte_crypto_op_attach_sym_session(op, session); 1297*41d561cbSFan Zhang 1298*41d561cbSFan Zhang return 0; 1299*41d561cbSFan Zhang } 1300*41d561cbSFan Zhang 1301*41d561cbSFan Zhang static int 1302*41d561cbSFan Zhang check_cipher_result(struct rte_crypto_op *op, 1303*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1304*41d561cbSFan Zhang uint32_t dir) 1305*41d561cbSFan Zhang { 1306*41d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 1307*41d561cbSFan Zhang uint8_t *data; 1308*41d561cbSFan Zhang const uint8_t *src; 1309*41d561cbSFan Zhang uint32_t len, src_len; 1310*41d561cbSFan Zhang int ret; 1311*41d561cbSFan Zhang 1312*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1313*41d561cbSFan Zhang src = vec->output.data; 1314*41d561cbSFan Zhang src_len = vec->output.len; 1315*41d561cbSFan Zhang } else { 1316*41d561cbSFan Zhang src = vec->input.data; 1317*41d561cbSFan Zhang src_len = vec->input.len; 1318*41d561cbSFan Zhang } 1319*41d561cbSFan Zhang 1320*41d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 1321*41d561cbSFan Zhang if (len != src_len) 1322*41d561cbSFan Zhang return -1; 1323*41d561cbSFan Zhang 1324*41d561cbSFan Zhang ret = memcmp(data, src, src_len); 1325*41d561cbSFan Zhang if (ret != 0) 1326*41d561cbSFan Zhang return -1; 1327*41d561cbSFan Zhang 1328*41d561cbSFan Zhang return 0; 1329*41d561cbSFan Zhang } 1330*41d561cbSFan Zhang 1331*41d561cbSFan Zhang static int 1332*41d561cbSFan Zhang check_auth_result(struct rte_crypto_op *op, 1333*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1334*41d561cbSFan Zhang uint32_t dir) 1335*41d561cbSFan Zhang { 1336*41d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 1337*41d561cbSFan Zhang uint8_t *data; 1338*41d561cbSFan Zhang uint32_t len; 1339*41d561cbSFan Zhang int ret; 1340*41d561cbSFan Zhang 1341*41d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 1342*41d561cbSFan Zhang if (len != vec->input.len + vec->digest.len) 1343*41d561cbSFan Zhang return -1; 1344*41d561cbSFan Zhang 1345*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1346*41d561cbSFan Zhang data += vec->input.len; 1347*41d561cbSFan Zhang ret = memcmp(data, vec->digest.data, vec->digest.len); 1348*41d561cbSFan Zhang if (ret != 0) 1349*41d561cbSFan Zhang return -1; 1350*41d561cbSFan Zhang } 1351*41d561cbSFan Zhang 1352*41d561cbSFan Zhang return 0; 1353*41d561cbSFan Zhang } 1354*41d561cbSFan Zhang 1355*41d561cbSFan Zhang static int 1356*41d561cbSFan Zhang check_aead_result(struct rte_crypto_op *op, 1357*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1358*41d561cbSFan Zhang uint32_t dir) 1359*41d561cbSFan Zhang { 1360*41d561cbSFan Zhang struct rte_mbuf *mbuf = op->sym->m_src; 1361*41d561cbSFan Zhang uint8_t *data; 1362*41d561cbSFan Zhang const uint8_t *src; 1363*41d561cbSFan Zhang uint32_t len, src_len; 1364*41d561cbSFan Zhang int ret; 1365*41d561cbSFan Zhang 1366*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1367*41d561cbSFan Zhang src = vec->output.data; 1368*41d561cbSFan Zhang src_len = vec->output.len; 1369*41d561cbSFan Zhang } else { 1370*41d561cbSFan Zhang src = vec->input.data; 1371*41d561cbSFan Zhang src_len = vec->input.len; 1372*41d561cbSFan Zhang } 1373*41d561cbSFan Zhang 1374*41d561cbSFan Zhang GET_MBUF_DATA(data, len, mbuf); 1375*41d561cbSFan Zhang if (len != src_len + vec->digest.len) 1376*41d561cbSFan Zhang return -1; 1377*41d561cbSFan Zhang 1378*41d561cbSFan Zhang ret = memcmp(data, src, src_len); 1379*41d561cbSFan Zhang if (ret != 0) 1380*41d561cbSFan Zhang return -1; 1381*41d561cbSFan Zhang 1382*41d561cbSFan Zhang if (dir == self_test_dir_enc_auth_gen) { 1383*41d561cbSFan Zhang data += src_len; 1384*41d561cbSFan Zhang ret = memcmp(data, vec->digest.data, vec->digest.len); 1385*41d561cbSFan Zhang if (ret != 0) 1386*41d561cbSFan Zhang return -1; 1387*41d561cbSFan Zhang } 1388*41d561cbSFan Zhang 1389*41d561cbSFan Zhang return 0; 1390*41d561cbSFan Zhang } 1391*41d561cbSFan Zhang 1392*41d561cbSFan Zhang static void 1393*41d561cbSFan Zhang init_test_op(struct fips_dev_self_test_ops *test_ops, 1394*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec) 1395*41d561cbSFan Zhang { 1396*41d561cbSFan Zhang if (test_ops->last_operation_type == vec->operation_type) 1397*41d561cbSFan Zhang return; 1398*41d561cbSFan Zhang 1399*41d561cbSFan Zhang switch (vec->operation_type) { 1400*41d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_CIPHER: 1401*41d561cbSFan Zhang test_ops->prepare_xform = prepare_cipher_xform; 1402*41d561cbSFan Zhang test_ops->prepare_op = prepare_cipher_op; 1403*41d561cbSFan Zhang test_ops->check_result = check_cipher_result; 1404*41d561cbSFan Zhang break; 1405*41d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_AUTH: 1406*41d561cbSFan Zhang test_ops->prepare_xform = prepare_auth_xform; 1407*41d561cbSFan Zhang test_ops->prepare_op = prepare_auth_op; 1408*41d561cbSFan Zhang test_ops->check_result = check_auth_result; 1409*41d561cbSFan Zhang break; 1410*41d561cbSFan Zhang case RTE_CRYPTO_SYM_XFORM_AEAD: 1411*41d561cbSFan Zhang test_ops->prepare_xform = prepare_aead_xform; 1412*41d561cbSFan Zhang test_ops->prepare_op = prepare_aead_op; 1413*41d561cbSFan Zhang test_ops->check_result = check_aead_result; 1414*41d561cbSFan Zhang break; 1415*41d561cbSFan Zhang default: 1416*41d561cbSFan Zhang break; 1417*41d561cbSFan Zhang } 1418*41d561cbSFan Zhang 1419*41d561cbSFan Zhang test_ops->last_operation_type = vec->operation_type; 1420*41d561cbSFan Zhang } 1421*41d561cbSFan Zhang 1422*41d561cbSFan Zhang static int 1423*41d561cbSFan Zhang run_single_test(uint8_t dev_id, 1424*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec, 1425*41d561cbSFan Zhang const struct fips_dev_self_test_ops *test_ops, 1426*41d561cbSFan Zhang struct fips_dev_auto_test_env *env, 1427*41d561cbSFan Zhang uint32_t dir, 1428*41d561cbSFan Zhang uint32_t negative_test) 1429*41d561cbSFan Zhang { 1430*41d561cbSFan Zhang struct rte_crypto_sym_xform xform; 1431*41d561cbSFan Zhang struct rte_cryptodev_sym_session *sess; 1432*41d561cbSFan Zhang uint16_t n_deqd; 1433*41d561cbSFan Zhang uint8_t key[256]; 1434*41d561cbSFan Zhang int ret; 1435*41d561cbSFan Zhang 1436*41d561cbSFan Zhang __rte_crypto_op_reset(env->op, RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1437*41d561cbSFan Zhang rte_pktmbuf_reset(env->mbuf); 1438*41d561cbSFan Zhang env->op->sym->m_src = env->mbuf; 1439*41d561cbSFan Zhang 1440*41d561cbSFan Zhang ret = test_ops->prepare_xform(dev_id, &xform, vec, dir, key, 1441*41d561cbSFan Zhang negative_test); 1442*41d561cbSFan Zhang if (ret < 0) { 1443*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Prepare Xform\n", ret); 1444*41d561cbSFan Zhang return ret; 1445*41d561cbSFan Zhang } 1446*41d561cbSFan Zhang 1447*41d561cbSFan Zhang sess = rte_cryptodev_sym_session_create(env->sess_pool); 1448*41d561cbSFan Zhang if (!sess) 1449*41d561cbSFan Zhang return -ENOMEM; 1450*41d561cbSFan Zhang 1451*41d561cbSFan Zhang ret = rte_cryptodev_sym_session_init(dev_id, 1452*41d561cbSFan Zhang sess, &xform, env->sess_pool); 1453*41d561cbSFan Zhang if (ret < 0) { 1454*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Init session\n", ret); 1455*41d561cbSFan Zhang return ret; 1456*41d561cbSFan Zhang } 1457*41d561cbSFan Zhang 1458*41d561cbSFan Zhang ret = test_ops->prepare_op(env->op, env->mbuf, sess, dir, vec); 1459*41d561cbSFan Zhang if (ret < 0) { 1460*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error %i: Prepare op\n", ret); 1461*41d561cbSFan Zhang return ret; 1462*41d561cbSFan Zhang } 1463*41d561cbSFan Zhang 1464*41d561cbSFan Zhang if (rte_cryptodev_enqueue_burst(dev_id, 0, &env->op, 1) < 1) { 1465*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Error: Failed enqueue\n"); 1466*41d561cbSFan Zhang return ret; 1467*41d561cbSFan Zhang } 1468*41d561cbSFan Zhang 1469*41d561cbSFan Zhang do { 1470*41d561cbSFan Zhang struct rte_crypto_op *deqd_op; 1471*41d561cbSFan Zhang 1472*41d561cbSFan Zhang n_deqd = rte_cryptodev_dequeue_burst(dev_id, 0, &deqd_op, 1473*41d561cbSFan Zhang 1); 1474*41d561cbSFan Zhang } while (n_deqd == 0); 1475*41d561cbSFan Zhang 1476*41d561cbSFan Zhang rte_cryptodev_sym_session_clear(dev_id, sess); 1477*41d561cbSFan Zhang rte_cryptodev_sym_session_free(sess); 1478*41d561cbSFan Zhang 1479*41d561cbSFan Zhang if (env->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) 1480*41d561cbSFan Zhang return -1; 1481*41d561cbSFan Zhang 1482*41d561cbSFan Zhang return test_ops->check_result(env->op, vec, dir); 1483*41d561cbSFan Zhang } 1484*41d561cbSFan Zhang 1485*41d561cbSFan Zhang 1486*41d561cbSFan Zhang static void 1487*41d561cbSFan Zhang fips_dev_auto_test_uninit(uint8_t dev_id, 1488*41d561cbSFan Zhang struct fips_dev_auto_test_env *env) 1489*41d561cbSFan Zhang { 1490*41d561cbSFan Zhang struct rte_cryptodev *dev = rte_cryptodev_pmd_get_dev(dev_id); 1491*41d561cbSFan Zhang uint32_t i; 1492*41d561cbSFan Zhang 1493*41d561cbSFan Zhang if (!dev) 1494*41d561cbSFan Zhang return; 1495*41d561cbSFan Zhang 1496*41d561cbSFan Zhang if (env->mbuf) 1497*41d561cbSFan Zhang rte_pktmbuf_free(env->mbuf); 1498*41d561cbSFan Zhang if (env->op) 1499*41d561cbSFan Zhang rte_crypto_op_free(env->op); 1500*41d561cbSFan Zhang if (env->mpool) 1501*41d561cbSFan Zhang rte_mempool_free(env->mpool); 1502*41d561cbSFan Zhang if (env->op_pool) 1503*41d561cbSFan Zhang rte_mempool_free(env->op_pool); 1504*41d561cbSFan Zhang if (env->sess_pool) 1505*41d561cbSFan Zhang rte_mempool_free(env->sess_pool); 1506*41d561cbSFan Zhang if (env->sess_priv_pool) 1507*41d561cbSFan Zhang rte_mempool_free(env->sess_priv_pool); 1508*41d561cbSFan Zhang 1509*41d561cbSFan Zhang if (dev->data->dev_started) 1510*41d561cbSFan Zhang rte_cryptodev_stop(dev_id); 1511*41d561cbSFan Zhang 1512*41d561cbSFan Zhang if (dev->data->nb_queue_pairs) { 1513*41d561cbSFan Zhang for (i = 0; i < dev->data->nb_queue_pairs; i++) 1514*41d561cbSFan Zhang (*dev->dev_ops->queue_pair_release)(dev, i); 1515*41d561cbSFan Zhang dev->data->nb_queue_pairs = 0; 1516*41d561cbSFan Zhang rte_free(dev->data->queue_pairs); 1517*41d561cbSFan Zhang dev->data->queue_pairs = NULL; 1518*41d561cbSFan Zhang } 1519*41d561cbSFan Zhang } 1520*41d561cbSFan Zhang 1521*41d561cbSFan Zhang static int 1522*41d561cbSFan Zhang fips_dev_auto_test_init(uint8_t dev_id, struct fips_dev_auto_test_env *env) 1523*41d561cbSFan Zhang { 1524*41d561cbSFan Zhang struct rte_cryptodev_config conf = {rte_cryptodev_socket_id(dev_id), 1}; 1525*41d561cbSFan Zhang struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL}; 1526*41d561cbSFan Zhang uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id); 1527*41d561cbSFan Zhang char name[128]; 1528*41d561cbSFan Zhang int ret; 1529*41d561cbSFan Zhang 1530*41d561cbSFan Zhang ret = rte_cryptodev_configure(dev_id, &conf); 1531*41d561cbSFan Zhang if (ret < 0) 1532*41d561cbSFan Zhang return ret; 1533*41d561cbSFan Zhang 1534*41d561cbSFan Zhang memset(name, 0, 128); 1535*41d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_MEMPOOL", dev_id); 1536*41d561cbSFan Zhang 1537*41d561cbSFan Zhang memset(env, 0, sizeof(*env)); 1538*41d561cbSFan Zhang 1539*41d561cbSFan Zhang env->mpool = rte_pktmbuf_pool_create(name, 128, 0, 0, 1540*41d561cbSFan Zhang UINT16_MAX, rte_cryptodev_socket_id(dev_id)); 1541*41d561cbSFan Zhang if (!env->mpool) { 1542*41d561cbSFan Zhang ret = -ENOMEM; 1543*41d561cbSFan Zhang goto error_exit; 1544*41d561cbSFan Zhang } 1545*41d561cbSFan Zhang 1546*41d561cbSFan Zhang memset(name, 0, 128); 1547*41d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_OP_POOL", dev_id); 1548*41d561cbSFan Zhang 1549*41d561cbSFan Zhang env->op_pool = rte_crypto_op_pool_create( 1550*41d561cbSFan Zhang name, 1551*41d561cbSFan Zhang RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1552*41d561cbSFan Zhang 16, 0, 1553*41d561cbSFan Zhang 16, 1554*41d561cbSFan Zhang rte_socket_id()); 1555*41d561cbSFan Zhang if (!env->op_pool) { 1556*41d561cbSFan Zhang ret = -ENOMEM; 1557*41d561cbSFan Zhang goto error_exit; 1558*41d561cbSFan Zhang } 1559*41d561cbSFan Zhang 1560*41d561cbSFan Zhang memset(name, 0, 128); 1561*41d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_POOL", dev_id); 1562*41d561cbSFan Zhang 1563*41d561cbSFan Zhang env->sess_pool = rte_cryptodev_sym_session_pool_create(name, 1564*41d561cbSFan Zhang 128, 0, 0, 0, rte_cryptodev_socket_id(dev_id)); 1565*41d561cbSFan Zhang if (!env->sess_pool) { 1566*41d561cbSFan Zhang ret = -ENOMEM; 1567*41d561cbSFan Zhang goto error_exit; 1568*41d561cbSFan Zhang } 1569*41d561cbSFan Zhang 1570*41d561cbSFan Zhang memset(name, 0, 128); 1571*41d561cbSFan Zhang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_PRIV_POOL", dev_id); 1572*41d561cbSFan Zhang 1573*41d561cbSFan Zhang env->sess_priv_pool = rte_mempool_create(name, 1574*41d561cbSFan Zhang 128, sess_sz, 0, 0, NULL, NULL, NULL, 1575*41d561cbSFan Zhang NULL, rte_cryptodev_socket_id(dev_id), 0); 1576*41d561cbSFan Zhang if (!env->sess_priv_pool) { 1577*41d561cbSFan Zhang ret = -ENOMEM; 1578*41d561cbSFan Zhang goto error_exit; 1579*41d561cbSFan Zhang } 1580*41d561cbSFan Zhang 1581*41d561cbSFan Zhang qp_conf.mp_session = env->sess_pool; 1582*41d561cbSFan Zhang qp_conf.mp_session_private = env->sess_priv_pool; 1583*41d561cbSFan Zhang 1584*41d561cbSFan Zhang ret = rte_cryptodev_queue_pair_setup(dev_id, 0, &qp_conf, 1585*41d561cbSFan Zhang rte_cryptodev_socket_id(dev_id)); 1586*41d561cbSFan Zhang if (ret < 0) 1587*41d561cbSFan Zhang goto error_exit; 1588*41d561cbSFan Zhang 1589*41d561cbSFan Zhang env->mbuf = rte_pktmbuf_alloc(env->mpool); 1590*41d561cbSFan Zhang if (!env->mbuf) { 1591*41d561cbSFan Zhang ret = -ENOMEM; 1592*41d561cbSFan Zhang goto error_exit; 1593*41d561cbSFan Zhang } 1594*41d561cbSFan Zhang 1595*41d561cbSFan Zhang env->op = rte_crypto_op_alloc(env->op_pool, 1596*41d561cbSFan Zhang RTE_CRYPTO_OP_TYPE_SYMMETRIC); 1597*41d561cbSFan Zhang if (!env->op) { 1598*41d561cbSFan Zhang ret = -ENOMEM; 1599*41d561cbSFan Zhang goto error_exit; 1600*41d561cbSFan Zhang } 1601*41d561cbSFan Zhang 1602*41d561cbSFan Zhang ret = rte_cryptodev_start(dev_id); 1603*41d561cbSFan Zhang if (ret < 0) 1604*41d561cbSFan Zhang goto error_exit; 1605*41d561cbSFan Zhang 1606*41d561cbSFan Zhang 1607*41d561cbSFan Zhang return 0; 1608*41d561cbSFan Zhang 1609*41d561cbSFan Zhang error_exit: 1610*41d561cbSFan Zhang 1611*41d561cbSFan Zhang fips_dev_auto_test_uninit(dev_id, env); 1612*41d561cbSFan Zhang 1613*41d561cbSFan Zhang return ret; 1614*41d561cbSFan Zhang } 1615*41d561cbSFan Zhang 1616*41d561cbSFan Zhang int 1617*41d561cbSFan Zhang fips_dev_self_test(uint8_t dev_id, 1618*41d561cbSFan Zhang struct fips_dev_broken_test_config *config) 1619*41d561cbSFan Zhang { 1620*41d561cbSFan Zhang struct fips_dev_self_test_ops test_ops = {0}; 1621*41d561cbSFan Zhang struct fips_dev_auto_test_env env; 1622*41d561cbSFan Zhang uint32_t i, j, negative_test; 1623*41d561cbSFan Zhang int ret; 1624*41d561cbSFan Zhang 1625*41d561cbSFan Zhang ret = fips_dev_auto_test_init(dev_id, &env); 1626*41d561cbSFan Zhang if (ret < 0) { 1627*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Failed to init self-test for PMD %u\n", 1628*41d561cbSFan Zhang dev_id); 1629*41d561cbSFan Zhang return ret; 1630*41d561cbSFan Zhang } 1631*41d561cbSFan Zhang 1632*41d561cbSFan Zhang for (i = 0; i < RTE_DIM(self_test_vectors); i++) { 1633*41d561cbSFan Zhang struct fips_dev_self_test_vector *vec = 1634*41d561cbSFan Zhang self_test_vectors[i]; 1635*41d561cbSFan Zhang 1636*41d561cbSFan Zhang init_test_op(&test_ops, vec); 1637*41d561cbSFan Zhang 1638*41d561cbSFan Zhang for (j = 0; j < self_test_dir_max; j++) { 1639*41d561cbSFan Zhang if (!config) 1640*41d561cbSFan Zhang negative_test = 0; 1641*41d561cbSFan Zhang else { 1642*41d561cbSFan Zhang if ((config->expect_fail_test_idx == i) && 1643*41d561cbSFan Zhang (config->expect_fail_dir == j)) 1644*41d561cbSFan Zhang negative_test = 1; 1645*41d561cbSFan Zhang else 1646*41d561cbSFan Zhang negative_test = 0; 1647*41d561cbSFan Zhang } 1648*41d561cbSFan Zhang 1649*41d561cbSFan Zhang RTE_LOG(INFO, PMD, "Testing (ID %u) %s %s%s...\n", 1650*41d561cbSFan Zhang i, 1651*41d561cbSFan Zhang vec->name, 1652*41d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 1653*41d561cbSFan Zhang "Encrypt" : "Decrypt", 1654*41d561cbSFan Zhang negative_test ? " (Expect Fail)" : ""); 1655*41d561cbSFan Zhang 1656*41d561cbSFan Zhang ret = run_single_test(dev_id, vec, &test_ops, 1657*41d561cbSFan Zhang &env, j, negative_test); 1658*41d561cbSFan Zhang switch (ret) { 1659*41d561cbSFan Zhang case 0: 1660*41d561cbSFan Zhang if (!negative_test) 1661*41d561cbSFan Zhang break; 1662*41d561cbSFan Zhang ret = -1; 1663*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n", 1664*41d561cbSFan Zhang dev_id, vec->name, 1665*41d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 1666*41d561cbSFan Zhang "Encrypt" : "Decrypt"); 1667*41d561cbSFan Zhang goto error_exit; 1668*41d561cbSFan Zhang case -EACCES: 1669*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "Not supported by %s. Skip\n", 1670*41d561cbSFan Zhang rte_cryptodev_name_get(dev_id)); 1671*41d561cbSFan Zhang ret = 0; 1672*41d561cbSFan Zhang break; 1673*41d561cbSFan Zhang default: 1674*41d561cbSFan Zhang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n", 1675*41d561cbSFan Zhang dev_id, vec->name, 1676*41d561cbSFan Zhang j == self_test_dir_enc_auth_gen ? 1677*41d561cbSFan Zhang "Encrypt" : "Decrypt"); 1678*41d561cbSFan Zhang goto error_exit; 1679*41d561cbSFan Zhang } 1680*41d561cbSFan Zhang } 1681*41d561cbSFan Zhang } 1682*41d561cbSFan Zhang 1683*41d561cbSFan Zhang error_exit: 1684*41d561cbSFan Zhang fips_dev_auto_test_uninit(dev_id, &env); 1685*41d561cbSFan Zhang 1686*41d561cbSFan Zhang if (ret == 0) { 1687*41d561cbSFan Zhang RTE_LOG(INFO, PMD, "PMD %u finished self-test successfully\n", 1688*41d561cbSFan Zhang dev_id); 1689*41d561cbSFan Zhang } 1690*41d561cbSFan Zhang 1691*41d561cbSFan Zhang return ret; 1692*41d561cbSFan Zhang } 1693