From 346af6f3de4735b2c7c8b6abf824bd0258c4be6c Mon Sep 17 00:00:00 2001 From: Jan Hutter Date: Tue, 29 Nov 2005 12:23:40 +0000 Subject: - fixed bug in diffie hellman exchange (no public value was written) --- .../encoding/payloads/proposal_substructure.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'Source/charon/encoding/payloads/proposal_substructure.c') diff --git a/Source/charon/encoding/payloads/proposal_substructure.c b/Source/charon/encoding/payloads/proposal_substructure.c index c80880d77..354eedb9e 100644 --- a/Source/charon/encoding/payloads/proposal_substructure.c +++ b/Source/charon/encoding/payloads/proposal_substructure.c @@ -141,6 +141,9 @@ encoding_rule_t proposal_substructure_encodings[] = { */ static status_t verify(private_proposal_substructure_t *this) { + status_t status = SUCCESS; + iterator_t *iterator; + if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != PROPOSAL_SUBSTRUCTURE)) { /* must be 0 or 2 */ @@ -157,9 +160,26 @@ static status_t verify(private_proposal_substructure_t *this) /* reserved are not supported */ return FAILED; } + + iterator = this->transforms->create_iterator(this->transforms,TRUE); + + while(iterator->has_next(iterator)) + { + payload_t *current_transform; + iterator->current(iterator,(void **)¤t_transform); + + status = current_transform->verify(current_transform); + if (status != SUCCESS) + { + break; + } + } + + iterator->destroy(iterator); + /* proposal number is checked in SA payload */ - return SUCCESS; + return status; } /** -- cgit v1.2.3