summaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2019-04-11 08:18:34 +0000
committerDamjan Marion <dmarion@me.com>2019-04-11 15:12:58 +0000
commit21ada3bd7e9bc5cca7c2c8399adcbaa044bf8103 (patch)
tree845b74dfee811bfe27f3feef6a608d349e99436d /src/vnet
parent5e282e93ad9f961d332cac9a033be33542979848 (diff)
IPSEC-MB: Use random & non-repeating IV (VPP-1642)
hard code IV and key lengths based on cipher. Init IV from random data, use AES instruction to rotate. Change-Id: I13a6507d12267b823c528660a903787baeba47a0 Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r--src/vnet/crypto/crypto.c7
-rw-r--r--src/vnet/ipsec/esp_decrypt.c4
-rw-r--r--src/vnet/ipsec/esp_encrypt.c2
3 files changed, 6 insertions, 7 deletions
diff --git a/src/vnet/crypto/crypto.c b/src/vnet/crypto/crypto.c
index 58b13638924..dbdb58b16f6 100644
--- a/src/vnet/crypto/crypto.c
+++ b/src/vnet/crypto/crypto.c
@@ -119,8 +119,11 @@ vnet_crypto_set_handler (char *alg_name, char *engine)
if (id == 0)
continue;
od = vec_elt_at_index (cm->opt_data, id);
- od->active_engine_index = p[0];
- cm->ops_handlers[id] = ce->ops_handlers[id];
+ if (ce->ops_handlers[id])
+ {
+ od->active_engine_index = p[0];
+ cm->ops_handlers[id] = ce->ops_handlers[id];
+ }
}
return 0;
diff --git a/src/vnet/ipsec/esp_decrypt.c b/src/vnet/ipsec/esp_decrypt.c
index de951d1dc85..fc4a99a873d 100644
--- a/src/vnet/ipsec/esp_decrypt.c
+++ b/src/vnet/ipsec/esp_decrypt.c
@@ -232,9 +232,7 @@ esp_decrypt_inline (vlib_main_t * vm,
vec_add2_aligned (ptd->crypto_ops, op, 1, CLIB_CACHE_LINE_BYTES);
vnet_crypto_op_init (op, sa0->crypto_dec_op_id);
op->key = sa0->crypto_key.data;
- op->key_len = sa0->crypto_key.len;
op->iv = payload;
- op->iv_len = cpd.iv_sz;
op->src = op->dst = payload += cpd.iv_sz;
op->len = len;
op->user_data = b - bufs;
@@ -287,7 +285,7 @@ esp_decrypt_inline (vlib_main_t * vm,
bi = op->user_data;
if (op->status == VNET_CRYPTO_OP_STATUS_FAIL_BAD_HMAC)
- err = ESP_DECRYPT_ERROR_INTEG_ERROR;
+ err = ESP_DECRYPT_ERROR_DECRYPTION_FAILED;
else
err = ESP_DECRYPT_ERROR_CRYPTO_ENGINE_ERROR;
diff --git a/src/vnet/ipsec/esp_encrypt.c b/src/vnet/ipsec/esp_encrypt.c
index c8018594bd1..bb1effda68b 100644
--- a/src/vnet/ipsec/esp_encrypt.c
+++ b/src/vnet/ipsec/esp_encrypt.c
@@ -431,10 +431,8 @@ esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
vec_add2_aligned (ptd->crypto_ops, op, 1, CLIB_CACHE_LINE_BYTES);
vnet_crypto_op_init (op, sa0->crypto_enc_op_id);
op->iv = payload - iv_sz;
- op->iv_len = iv_sz;
op->src = op->dst = payload;
op->key = sa0->crypto_key.data;
- op->key_len = sa0->crypto_key.len;
op->len = payload_len - icv_sz;
op->flags = VNET_CRYPTO_OP_FLAG_INIT_IV;
op->user_data = b - bufs;