crypto/aesni_gcm: move pre-counter block to driver
authorArek Kusztal <arkadiuszx.kusztal@intel.com>
Thu, 22 Sep 2016 10:45:53 +0000 (11:45 +0100)
committerPablo de Lara <pablo.de.lara.guarch@intel.com>
Tue, 4 Oct 2016 18:41:09 +0000 (20:41 +0200)
This patch moves computing of pre-counter block into the AESNI-GCM
driver so it can be moved from test files.

Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
Acked-by: Deepak Kumar Jain <deepak.k.jain@intel.com>
app/test/test_cryptodev.c
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c

index 024a9e0..3733315 100644 (file)
@@ -3259,14 +3259,10 @@ create_gcm_operation(enum rte_crypto_cipher_operation op,
 
        memset(sym_op->cipher.iv.data, 0, iv_pad_len);
        sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
-       sym_op->cipher.iv.length = iv_pad_len;
+       sym_op->cipher.iv.length = iv_len;
 
        rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
 
-       /* CalcY0 */
-       if (iv_len != 16)
-               sym_op->cipher.iv.data[15] = 1;
-
        /*
         * Always allocate the aad up to the block size.
         * The cryptodev API calls out -
index 317c556..76dce9c 100644 (file)
@@ -230,11 +230,20 @@ process_gcm_crypto_op(struct aesni_gcm_qp *qp, struct rte_crypto_sym_op *op,
                                        op->cipher.data.offset);
 
        /* sanity checks */
-       if (op->cipher.iv.length != 16 && op->cipher.iv.length != 0) {
+       if (op->cipher.iv.length != 16 && op->cipher.iv.length != 12 &&
+                       op->cipher.iv.length != 0) {
                GCM_LOG_ERR("iv");
                return -1;
        }
 
+       /*
+        * GCM working in 12B IV mode => 16B pre-counter block we need
+        * to set BE LSB to 1, driver expects that 16B is allocated
+        */
+       if (op->cipher.iv.length == 12) {
+               op->cipher.iv.data[15] = 1;
+       }
+
        if (op->auth.aad.length != 12 && op->auth.aad.length != 8 &&
                        op->auth.aad.length != 0) {
                GCM_LOG_ERR("iv");