crypto/aesni_mb: do not append digest
[dpdk.git] / drivers / crypto / aesni_mb / rte_aesni_mb_pmd_private.h
index 304c85c..fe3bd73 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2015 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
  *   modification, are permitted provided that the following conditions
 
 #include "aesni_mb_ops.h"
 
+#define CRYPTODEV_NAME_AESNI_MB_PMD    crypto_aesni_mb
+/**< AES-NI Multi buffer PMD device name */
+
 #define MB_LOG_ERR(fmt, args...) \
        RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n",  \
-                       CRYPTODEV_NAME_AESNI_MB_PMD, \
+                       RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), \
                        __func__, __LINE__, ## args)
 
 #ifdef RTE_LIBRTE_AESNI_MB_DEBUG
@@ -58,6 +61,8 @@
 #define HMAC_IPAD_VALUE                        (0x36)
 #define HMAC_OPAD_VALUE                        (0x5C)
 
+/* Maximum length for digest (SHA-512 truncated needs 32 bytes) */
+#define DIGEST_LENGTH_MAX 32
 static const unsigned auth_blocksize[] = {
                [MD5]           = 64,
                [SHA1]          = 64,
@@ -88,6 +93,7 @@ static const unsigned auth_truncated_digest_byte_lengths[] = {
                [SHA_384]       = 24,
                [SHA_512]       = 32,
                [AES_XCBC]      = 12,
+               [NULL_HASH]     = 0
 };
 
 /**
@@ -111,6 +117,7 @@ static const unsigned auth_digest_byte_lengths[] = {
                [SHA_384]       = 48,
                [SHA_512]       = 64,
                [AES_XCBC]      = 16,
+               [NULL_HASH]     = 0
 };
 
 /**
@@ -125,6 +132,13 @@ get_digest_byte_length(JOB_HASH_ALG algo)
        return auth_digest_byte_lengths[algo];
 }
 
+enum aesni_mb_operation {
+       AESNI_MB_OP_HASH_CIPHER,
+       AESNI_MB_OP_CIPHER_HASH,
+       AESNI_MB_OP_HASH_ONLY,
+       AESNI_MB_OP_CIPHER_ONLY,
+       AESNI_MB_OP_NOT_SUPPORTED
+};
 
 /** private data structure for each virtual AESNI device */
 struct aesni_mb_private {
@@ -142,22 +156,35 @@ struct aesni_mb_qp {
        /**< Queue Pair Identifier */
        char name[RTE_CRYPTODEV_NAME_LEN];
        /**< Unique Queue Pair Name */
-       const struct aesni_mb_ops *ops;
+       const struct aesni_mb_op_fns *op_fns;
        /**< Vector mode dependent pointer table of the multi-buffer APIs */
        MB_MGR mb_mgr;
        /**< Multi-buffer instance */
-       struct rte_ring *processed_pkts;
-       /**< Ring for placing process packets */
+       struct rte_ring *ingress_queue;
+       /**< Ring for placing operations ready for processing */
        struct rte_mempool *sess_mp;
        /**< Session Mempool */
        struct rte_cryptodev_stats stats;
        /**< Queue pair statistics */
+       uint8_t digest_idx;
+       /**< Index of the next slot to be used in temp_digests,
+        * to store the digest for a given operation
+        */
+       uint8_t temp_digests[MAX_JOBS][DIGEST_LENGTH_MAX];
+       /**< Buffers used to store the digest generated
+        * by the driver when verifying a digest provided
+        * by the user (using authentication verify operation)
+        */
 } __rte_cache_aligned;
 
-
 /** AES-NI multi-buffer private session structure */
 struct aesni_mb_session {
        JOB_CHAIN_ORDER chain_order;
+       struct {
+               uint16_t length;
+               uint16_t offset;
+       } iv;
+       /**< IV parameters */
 
        /** Cipher Parameters */
        struct {
@@ -185,6 +212,8 @@ struct aesni_mb_session {
        /** Authentication Parameters */
        struct {
                JOB_HASH_ALG algo; /**< Authentication Algorithm */
+               enum rte_crypto_auth_operation operation;
+               /**< auth operation generate or verify */
                union {
                        struct {
                                uint8_t inner[128] __rte_aligned(16);
@@ -216,9 +245,9 @@ struct aesni_mb_session {
  *
  */
 extern int
-aesni_mb_set_session_parameters(const struct aesni_mb_ops *mb_ops,
+aesni_mb_set_session_parameters(const struct aesni_mb_op_fns *mb_ops,
                struct aesni_mb_session *sess,
-               const struct rte_crypto_xform *xform);
+               const struct rte_crypto_sym_xform *xform);
 
 
 /** device specific operations function pointer structure */