dpdk-cryptodev: add support chacha20-poly1305
Originally cryptodev doesn't support chacha20-poly1305 with aad length 0. This patch add support in cryptodev for chacha20-poly1305 with aad length 0. This length is using in Wireguard. Type: improvement Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com> Change-Id: I0608920bb557d7d071e7f9f37c80cf50bad81dcc
This commit is contained in:
@ -51,12 +51,19 @@ prepare_aead_xform (struct rte_crypto_sym_xform *xform,
|
||||
xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
|
||||
xform->next = 0;
|
||||
|
||||
if (key->alg != VNET_CRYPTO_ALG_AES_128_GCM &&
|
||||
key->alg != VNET_CRYPTO_ALG_AES_192_GCM &&
|
||||
key->alg != VNET_CRYPTO_ALG_AES_256_GCM)
|
||||
if (key->alg == VNET_CRYPTO_ALG_AES_128_GCM ||
|
||||
key->alg == VNET_CRYPTO_ALG_AES_192_GCM ||
|
||||
key->alg == VNET_CRYPTO_ALG_AES_256_GCM)
|
||||
{
|
||||
aead_xform->algo = RTE_CRYPTO_AEAD_AES_GCM;
|
||||
}
|
||||
else if (key->alg == VNET_CRYPTO_ALG_CHACHA20_POLY1305)
|
||||
{
|
||||
aead_xform->algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
|
||||
aead_xform->algo = RTE_CRYPTO_AEAD_AES_GCM;
|
||||
aead_xform->op = (op_type == CRYPTODEV_OP_TYPE_ENCRYPT) ?
|
||||
RTE_CRYPTO_AEAD_OP_ENCRYPT : RTE_CRYPTO_AEAD_OP_DECRYPT;
|
||||
aead_xform->aad_length = aad_len;
|
||||
|
@ -43,7 +43,10 @@
|
||||
_ (AES_192_GCM, AEAD, AES_GCM, 12, 16, 8, 24) \
|
||||
_ (AES_192_GCM, AEAD, AES_GCM, 12, 16, 12, 24) \
|
||||
_ (AES_256_GCM, AEAD, AES_GCM, 12, 16, 8, 32) \
|
||||
_ (AES_256_GCM, AEAD, AES_GCM, 12, 16, 12, 32)
|
||||
_ (AES_256_GCM, AEAD, AES_GCM, 12, 16, 12, 32) \
|
||||
_ (CHACHA20_POLY1305, AEAD, CHACHA20_POLY1305, 12, 16, 0, 32) \
|
||||
_ (CHACHA20_POLY1305, AEAD, CHACHA20_POLY1305, 12, 16, 8, 32) \
|
||||
_ (CHACHA20_POLY1305, AEAD, CHACHA20_POLY1305, 12, 16, 12, 32)
|
||||
|
||||
/**
|
||||
* crypto (alg, cryptodev_alg, key_size), hash (alg, digest-size)
|
||||
|
@ -458,6 +458,13 @@ cryptodev_frame_dequeue (vlib_main_t *vm, u32 *nb_elts_processed,
|
||||
return frame;
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_enqueue_aead_aad_0_enc (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
{
|
||||
return cryptodev_frame_aead_enqueue (vm, frame, CRYPTODEV_OP_TYPE_ENCRYPT,
|
||||
0);
|
||||
}
|
||||
static_always_inline int
|
||||
cryptodev_enqueue_aead_aad_8_enc (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
@ -473,6 +480,13 @@ cryptodev_enqueue_aead_aad_12_enc (vlib_main_t *vm,
|
||||
12);
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_enqueue_aead_aad_0_dec (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
{
|
||||
return cryptodev_frame_aead_enqueue (vm, frame, CRYPTODEV_OP_TYPE_DECRYPT,
|
||||
0);
|
||||
}
|
||||
static_always_inline int
|
||||
cryptodev_enqueue_aead_aad_8_dec (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
|
@ -349,7 +349,7 @@ cryptodev_raw_aead_enqueue (vlib_main_t *vm, vnet_crypto_async_frame_t *frame,
|
||||
|
||||
if (aad_len == 8)
|
||||
*(u64 *) (cet->aad_buf + aad_offset) = *(u64 *) fe->aad;
|
||||
else
|
||||
else if (aad_len != 0)
|
||||
{
|
||||
/* aad_len == 12 */
|
||||
*(u64 *) (cet->aad_buf + aad_offset) = *(u64 *) fe->aad;
|
||||
@ -591,6 +591,13 @@ end_deq:
|
||||
return frame_ret;
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_raw_enq_aead_aad_0_enc (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
{
|
||||
return cryptodev_raw_aead_enqueue (vm, frame, CRYPTODEV_OP_TYPE_ENCRYPT, 0);
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_raw_enq_aead_aad_8_enc (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
@ -604,6 +611,13 @@ cryptodev_raw_enq_aead_aad_12_enc (vlib_main_t *vm,
|
||||
return cryptodev_raw_aead_enqueue (vm, frame, CRYPTODEV_OP_TYPE_ENCRYPT, 12);
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_raw_enq_aead_aad_0_dec (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
{
|
||||
return cryptodev_raw_aead_enqueue (vm, frame, CRYPTODEV_OP_TYPE_DECRYPT, 0);
|
||||
}
|
||||
|
||||
static_always_inline int
|
||||
cryptodev_raw_enq_aead_aad_8_dec (vlib_main_t *vm,
|
||||
vnet_crypto_async_frame_t *frame)
|
||||
|
Reference in New Issue
Block a user