diff options
author | Martin Willi <martin@revosec.ch> | 2013-06-20 16:10:55 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-10-11 10:15:21 +0200 |
commit | f0c59e1cf8abc1ca6cde344b558b85cbeac21271 (patch) | |
tree | 73d95ed0fe8b8d0434f37075589fcc83fd8c07aa /src/libcharon | |
parent | 057641298924c0122fd68c49b21d29e9b520e283 (diff) | |
download | strongswan-f0c59e1cf8abc1ca6cde344b558b85cbeac21271.tar.bz2 strongswan-f0c59e1cf8abc1ca6cde344b558b85cbeac21271.tar.xz |
proposal: Strip redundant integrity algos for ESP proposals only
Diffstat (limited to 'src/libcharon')
-rw-r--r-- | src/libcharon/config/proposal.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/libcharon/config/proposal.c b/src/libcharon/config/proposal.c index 0b702e014..0acc425d6 100644 --- a/src/libcharon/config/proposal.c +++ b/src/libcharon/config/proposal.c @@ -429,30 +429,33 @@ static void check_proposal(private_proposal_t *this) e->destroy(e); } - e = create_enumerator(this, ENCRYPTION_ALGORITHM); - while (e->enumerate(e, &alg, &ks)) + if (this->protocol == PROTO_ESP) { - if (!encryption_algorithm_is_aead(alg)) + e = create_enumerator(this, ENCRYPTION_ALGORITHM); + while (e->enumerate(e, &alg, &ks)) { - all_aead = FALSE; - break; + if (!encryption_algorithm_is_aead(alg)) + { + all_aead = FALSE; + break; + } } - } - e->destroy(e); + e->destroy(e); - if (all_aead) - { - /* if all encryption algorithms in the proposal are AEADs, - * we MUST NOT propose any integrity algorithms */ - e = array_create_enumerator(this->transforms); - while (e->enumerate(e, &entry)) + if (all_aead) { - if (entry->type == INTEGRITY_ALGORITHM) + /* if all encryption algorithms in the proposal are AEADs, + * we MUST NOT propose any integrity algorithms */ + e = array_create_enumerator(this->transforms); + while (e->enumerate(e, &entry)) { - array_remove_at(this->transforms, e); + if (entry->type == INTEGRITY_ALGORITHM) + { + array_remove_at(this->transforms, e); + } } + e->destroy(e); } - e->destroy(e); } if (this->protocol == PROTO_AH || this->protocol == PROTO_ESP) |