From f5c5fd6f74b8b9bd65948e4b73ab916a141d7e83 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Sat, 12 Oct 2013 01:09:53 +0200 Subject: [PATCH] libipsec: Properly calculate padding length especially for AES-GCM --- src/libipsec/esp_packet.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libipsec/esp_packet.c b/src/libipsec/esp_packet.c index db5ef3685..7de765ecd 100644 --- a/src/libipsec/esp_packet.c +++ b/src/libipsec/esp_packet.c @@ -309,7 +309,9 @@ METHOD(esp_packet_t, encrypt, status_t, payload = this->payload ? this->payload->get_encoding(this->payload) : chunk_empty; plainlen = payload.len + 2; - padding.len = blocksize - (plainlen % blocksize); + padding.len = pad_len(plainlen, blocksize); + /* ICV must be on a 4-byte boundary */ + padding.len += pad_len(iv.len + plainlen + padding.len, 4); plainlen += padding.len; /* len = spi, seq, IV, plaintext, ICV */