aboutsummaryrefslogtreecommitdiffstats
path: root/src/libipsec/esp_context.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2015-09-21 11:02:45 +0200
committerTobias Brunner <tobias@strongswan.org>2015-10-30 10:54:45 +0100
commit0e80127691cfe7fea9ce3a2f67d8b527db34faf4 (patch)
tree798f927813edf16b3b8465fbb59ca0364970ba13 /src/libipsec/esp_context.c
parent72cc029e24308bea636c782f5aee50b6ed38c854 (diff)
downloadstrongswan-0e80127691cfe7fea9ce3a2f67d8b527db34faf4.tar.bz2
strongswan-0e80127691cfe7fea9ce3a2f67d8b527db34faf4.tar.xz
libipsec: Fix crypter lookup for AES-CTR
Due to the nonce, the ESP key material is four bytes longer than needed for the actual AES key. The crypto plugins, however, register their AES-CTR implementations with the AES key length, so the lookup here failed. For IKEv2 the key material is allocated after creating a crypter instance with the negotiated AES key size. The length of the actual key material is retrieved via get_key_size(), which adds the four bytes to the AES key length. Fixes #1124.
Diffstat (limited to 'src/libipsec/esp_context.c')
-rw-r--r--src/libipsec/esp_context.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/libipsec/esp_context.c b/src/libipsec/esp_context.c
index b742d1576..a9e0e5b4d 100644
--- a/src/libipsec/esp_context.c
+++ b/src/libipsec/esp_context.c
@@ -247,7 +247,18 @@ static bool create_traditional(private_esp_context_t *this, int enc_alg,
signer_t *signer = NULL;
iv_gen_t *ivg;
- crypter = lib->crypto->create_crypter(lib->crypto, enc_alg, enc_key.len);
+ switch (enc_alg)
+ {
+ case ENCR_AES_CTR:
+ /* the key includes a 4 byte salt */
+ crypter = lib->crypto->create_crypter(lib->crypto, enc_alg,
+ enc_key.len - 4);
+ break;
+ default:
+ crypter = lib->crypto->create_crypter(lib->crypto, enc_alg,
+ enc_key.len);
+ break;
+ }
if (!crypter)
{
DBG1(DBG_ESP, "failed to create ESP context: unsupported encryption "