examples/fips_validation: fix auth verify
[dpdk.git] / examples / fips_validation / main.c
index c83763b..9a2c8da 100644 (file)
@@ -512,6 +512,7 @@ static int
 prepare_auth_op(void)
 {
        struct rte_crypto_sym_op *sym = env.op->sym;
+       uint8_t *pt;
 
        __rte_crypto_op_reset(env.op, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
        rte_pktmbuf_reset(env.mbuf);
@@ -519,52 +520,25 @@ prepare_auth_op(void)
        sym->m_src = env.mbuf;
        sym->auth.data.offset = 0;
 
-       if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
-               uint8_t *pt;
-
-               if (vec.pt.len > RTE_MBUF_MAX_NB_SEGS) {
-                       RTE_LOG(ERR, USER1, "PT len %u\n", vec.pt.len);
-                       return -EPERM;
-               }
-
-               pt = (uint8_t *)rte_pktmbuf_append(env.mbuf, vec.pt.len +
-                               vec.cipher_auth.digest.len);
-
-               if (!pt) {
-                       RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
-                                       -ENOMEM);
-                       return -ENOMEM;
-               }
-
-               memcpy(pt, vec.pt.val, vec.pt.len);
-               sym->auth.data.length = vec.pt.len;
-               sym->auth.digest.data = pt + vec.pt.len;
-               sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
-                               env.mbuf, vec.pt.len);
-
-       } else {
-               uint8_t *ct;
+       pt = (uint8_t *)rte_pktmbuf_append(env.mbuf, vec.pt.len +
+                       vec.cipher_auth.digest.len);
 
-               if (vec.ct.len > RTE_MBUF_MAX_NB_SEGS) {
-                       RTE_LOG(ERR, USER1, "CT len %u\n", vec.ct.len);
-                       return -EPERM;
-               }
+       if (!pt) {
+               RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
+                               -ENOMEM);
+               return -ENOMEM;
+       }
 
-               ct = (uint8_t *)rte_pktmbuf_append(env.mbuf,
-                               vec.ct.len + vec.cipher_auth.digest.len);
+       sym->auth.data.length = vec.pt.len;
+       sym->auth.digest.data = pt + vec.pt.len;
+       sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+                       env.mbuf, vec.pt.len);
 
-               if (!ct) {
-                       RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
-                                       -ENOMEM);
-                       return -ENOMEM;
-               }
+       memcpy(pt, vec.pt.val, vec.pt.len);
 
-               memcpy(ct, vec.ct.val, vec.ct.len);
-               sym->auth.data.length = vec.ct.len;
-               sym->auth.digest.data = vec.cipher_auth.digest.val;
-               sym->auth.digest.phys_addr = rte_malloc_virt2iova(
-                               sym->auth.digest.data);
-       }
+       if (info.op == FIPS_TEST_DEC_AUTH_VERIF)
+               memcpy(pt + vec.pt.len, vec.cipher_auth.digest.val,
+                               vec.cipher_auth.digest.len);
 
        rte_crypto_op_attach_sym_session(env.op, env.sess);
 
@@ -1053,6 +1027,7 @@ fips_mct_tdes_test(void)
        uint8_t prev_in[TDES_BLOCK_SIZE] = {0};
        uint32_t i, j, k;
        int ret;
+       int test_mode = info.interim_info.tdes_data.test_mode;
 
        for (i = 0; i < TDES_EXTERN_ITER; i++) {
                if (i != 0)
@@ -1079,25 +1054,50 @@ fips_mct_tdes_test(void)
                                memcpy(prev_out, val.val, TDES_BLOCK_SIZE);
 
                                if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
-                                       memcpy(vec.pt.val, vec.iv.val,
-                                                       TDES_BLOCK_SIZE);
-                                       memcpy(vec.iv.val, val.val,
-                                                       TDES_BLOCK_SIZE);
+                                       if (test_mode == TDES_MODE_ECB) {
+                                               memcpy(vec.pt.val, val.val,
+                                                          TDES_BLOCK_SIZE);
+                                       } else {
+                                               memcpy(vec.pt.val, vec.iv.val,
+                                                          TDES_BLOCK_SIZE);
+                                               memcpy(vec.iv.val, val.val,
+                                                          TDES_BLOCK_SIZE);
+                                       }
+
                                } else {
-                                       memcpy(vec.iv.val, vec.ct.val,
-                                                       TDES_BLOCK_SIZE);
-                                       memcpy(vec.ct.val, val.val,
-                                                       TDES_BLOCK_SIZE);
+                                       if (test_mode == TDES_MODE_ECB) {
+                                               memcpy(vec.ct.val, val.val,
+                                                          TDES_BLOCK_SIZE);
+                                       } else {
+                                               memcpy(vec.iv.val, vec.ct.val,
+                                                          TDES_BLOCK_SIZE);
+                                               memcpy(vec.ct.val, val.val,
+                                                          TDES_BLOCK_SIZE);
+                                       }
                                }
                                continue;
                        }
 
                        if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
-                               memcpy(vec.iv.val, val.val, TDES_BLOCK_SIZE);
-                               memcpy(vec.pt.val, prev_out, TDES_BLOCK_SIZE);
+                               if (test_mode == TDES_MODE_ECB) {
+                                       memcpy(vec.pt.val, val.val,
+                                                  TDES_BLOCK_SIZE);
+                               } else {
+                                       memcpy(vec.iv.val, val.val,
+                                                  TDES_BLOCK_SIZE);
+                                       memcpy(vec.pt.val, prev_out,
+                                                  TDES_BLOCK_SIZE);
+                               }
                        } else {
-                               memcpy(vec.iv.val, vec.ct.val, TDES_BLOCK_SIZE);
-                               memcpy(vec.ct.val, val.val, TDES_BLOCK_SIZE);
+                               if (test_mode == TDES_MODE_ECB) {
+                                       memcpy(vec.ct.val, val.val,
+                                                  TDES_BLOCK_SIZE);
+                               } else {
+                                       memcpy(vec.iv.val, vec.ct.val,
+                                                  TDES_BLOCK_SIZE);
+                                       memcpy(vec.ct.val, val.val,
+                                                  TDES_BLOCK_SIZE);
+                               }
                        }
 
                        if (j == TDES_INTERN_ITER - 1)
@@ -1156,11 +1156,19 @@ fips_mct_tdes_test(void)
                                        val_key.val[k] : (val_key.val[k] ^ 0x1);
 
                if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
-                       memcpy(vec.iv.val, val.val, TDES_BLOCK_SIZE);
-                       memcpy(vec.pt.val, prev_out, TDES_BLOCK_SIZE);
+                       if (test_mode == TDES_MODE_ECB) {
+                               memcpy(vec.pt.val, val.val, TDES_BLOCK_SIZE);
+                       } else {
+                               memcpy(vec.iv.val, val.val, TDES_BLOCK_SIZE);
+                               memcpy(vec.pt.val, prev_out, TDES_BLOCK_SIZE);
+                       }
                } else {
-                       memcpy(vec.iv.val, prev_out, TDES_BLOCK_SIZE);
-                       memcpy(vec.ct.val, val.val, TDES_BLOCK_SIZE);
+                       if (test_mode == TDES_MODE_ECB) {
+                               memcpy(vec.ct.val, val.val, TDES_BLOCK_SIZE);
+                       } else {
+                               memcpy(vec.iv.val, prev_out, TDES_BLOCK_SIZE);
+                               memcpy(vec.ct.val, val.val, TDES_BLOCK_SIZE);
+                       }
                }
        }