; Ignore fields inserted in cacheline boundary of rte_cryptodev
[suppress_type]
name = rte_cryptodev
- has_data_member_inserted_between = {offset_after(attached), end}
\ No newline at end of file
+ has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore fields inserted in union boundary of rte_cryptodev_symmetric_capability
+[suppress_type]
+ name = rte_cryptodev_symmetric_capability
+ has_data_member_inserted_between = {offset_after(cipher.iv_size), end}
+
+; Ignore fields inserted in middle padding of rte_crypto_cipher_xform
+[suppress_type]
+ name = rte_crypto_cipher_xform
+ has_data_member_inserted_between = {offset_after(key), offset_of(iv)}
Symmetric sessionless =
Non-Byte aligned data =
Sym raw data path API =
+Cipher multiple data units =
;
; Supported crypto algorithms of a default crypto driver.
- "Digest encrypted" feature flag means PMD support hash-cipher cases,
where generated digest is appended to and encrypted with the data.
+ - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support operations
+ on multiple data-units message.
+
Supported Cipher Algorithms
---------------------------
* Added support for preferred busy polling.
+* **Added support of multiple data-units in cryptodev API.**
+
+ The cryptodev library has been enhanced to allow operations on multiple
+ data-units for AES-XTS algorithm, the data-unit length should be set in the
+ transformation. A capability for it was added too.
+
* **Updated the OCTEON TX crypto PMD.**
* Added support for DIGEST_ENCRYPTED mode in OCTEON TX crypto PMD.
enum rte_crypto_cipher_algorithm algo;
/**< Cipher algorithm */
+ RTE_STD_C11
+ union { /* temporary anonymous union for ABI compatibility */
+
struct {
const uint8_t *data; /**< pointer to key data */
uint16_t length; /**< key length in bytes */
* - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
* - Both keys must have the same size.
**/
+
+ RTE_STD_C11
+ struct { /* temporary anonymous struct for ABI compatibility */
+ const uint8_t *_key_data; /* reserved for key.data union */
+ uint16_t _key_length; /* reserved for key.length union */
+ /* next field can fill the padding hole */
+
+ uint16_t dataunit_len;
+ /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is enabled,
+ * this is the data-unit length of the algorithm,
+ * otherwise or when the value is 0, use the operation length.
+ * The value should be in the range defined by the dataunit_set field
+ * in the cipher capability.
+ *
+ * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
+ * For-each data-unit in the operation, the tweak (IV) value is
+ * assigned consecutively starting from the operation assigned IV.
+ */
+
+ }; }; /* temporary struct nested in union for ABI compatibility */
+
struct {
uint16_t offset;
/**< Starting point for Initialisation Vector or Counter,
/**< The message length, in bytes, of the
* source buffer on which the cryptographic
* operation will be computed.
+ * This is also the same as the result length.
* This must be a multiple of the block size
- * if a block cipher is being used. This is
- * also the same as the result length.
+ * or a multiple of data-unit length
+ * as described in xform.
*
* @note
* For SNOW 3G @ RTE_CRYPTO_AUTH_SNOW3G_UEA2,
return "SYM_SESSIONLESS";
case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
return "NON_BYTE_ALIGNED_DATA";
+ case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS:
+ return "CIPHER_MULTIPLE_DATA_UNITS";
default:
return NULL;
}
*/
};
+/**
+ * Data-unit supported lengths of cipher algorithms.
+ * A bit can represent any set of data-unit sizes
+ * (single size, multiple size, range, etc).
+ */
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES RTE_BIT32(0)
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES RTE_BIT32(1)
+
/**
* Symmetric Crypto Capability
*/
/**< cipher key size range */
struct rte_crypto_param_range iv_size;
/**< Initialisation vector data size range */
+ uint32_t dataunit_set;
+ /**<
+ * Supported data-unit lengths:
+ * RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_* bits
+ * or 0 for lengths defined in the algorithm standard.
+ */
} cipher;
/**< Symmetric Cipher transform capabilities */
struct {
/**< Support operations on data which is not byte aligned */
#define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24)
/**< Support accelerator specific symmetric raw data-path APIs */
+#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25)
+/**< Support operations on multiple data-units message */
/**
* Get the name of a crypto device feature flag