iv_gen: Provide external sequence number (IKE, ESP)
This prevents duplicate sequential IVs in case of a HA failover.
This commit is contained in:
@@ -309,7 +309,7 @@ static chunk_t append_header(private_encryption_payload_t *this, chunk_t assoc)
|
||||
}
|
||||
|
||||
METHOD(encryption_payload_t, encrypt, status_t,
|
||||
private_encryption_payload_t *this, chunk_t assoc)
|
||||
private_encryption_payload_t *this, u_int64_t mid, chunk_t assoc)
|
||||
{
|
||||
chunk_t iv, plain, padding, icv, crypt;
|
||||
generator_t *generator;
|
||||
@@ -364,7 +364,7 @@ METHOD(encryption_payload_t, encrypt, status_t,
|
||||
crypt = chunk_create(plain.ptr, plain.len + padding.len);
|
||||
generator->destroy(generator);
|
||||
|
||||
if (!iv_gen->get_iv(iv_gen, iv.len, iv.ptr) ||
|
||||
if (!iv_gen->get_iv(iv_gen, mid, iv.len, iv.ptr) ||
|
||||
!rng->get_bytes(rng, padding.len - 1, padding.ptr))
|
||||
{
|
||||
DBG1(DBG_ENC, "encrypting encryption payload failed, no IV or padding");
|
||||
@@ -396,7 +396,7 @@ METHOD(encryption_payload_t, encrypt, status_t,
|
||||
}
|
||||
|
||||
METHOD(encryption_payload_t, encrypt_v1, status_t,
|
||||
private_encryption_payload_t *this, chunk_t iv)
|
||||
private_encryption_payload_t *this, u_int64_t mid, chunk_t iv)
|
||||
{
|
||||
generator_t *generator;
|
||||
chunk_t plain, padding;
|
||||
|
||||
@@ -71,13 +71,15 @@ struct encryption_payload_t {
|
||||
/**
|
||||
* Generate, encrypt and sign contained payloads.
|
||||
*
|
||||
* @param mid message ID
|
||||
* @param assoc associated data
|
||||
* @return
|
||||
* - SUCCESS if encryption successful
|
||||
* - FAILED if encryption failed
|
||||
* - INVALID_STATE if aead not supplied, but needed
|
||||
*/
|
||||
status_t (*encrypt) (encryption_payload_t *this, chunk_t assoc);
|
||||
status_t (*encrypt) (encryption_payload_t *this, u_int64_t mid,
|
||||
chunk_t assoc);
|
||||
|
||||
/**
|
||||
* Decrypt, verify and parse contained payloads.
|
||||
|
||||
Reference in New Issue
Block a user