Extended nonce payload for IKEv1 support

This commit is contained in:
Martin Willi 2011-11-17 10:53:35 +01:00
parent 717333da98
commit bcfb0f4096
5 changed files with 16 additions and 10 deletions

View File

@ -57,6 +57,11 @@ struct private_nonce_payload_t {
* The contained nonce value.
*/
chunk_t nonce;
/**
* Payload type, NONCE or NONCE_V1
*/
payload_type_t type;
};
/**
@ -115,7 +120,7 @@ METHOD(payload_t, get_encoding_rules, void,
METHOD(payload_t, get_type, payload_type_t,
private_nonce_payload_t *this)
{
return NONCE;
return this->type;
}
METHOD(payload_t, get_next_type, payload_type_t,
@ -159,7 +164,7 @@ METHOD2(payload_t, nonce_payload_t, destroy, void,
/*
* Described in header
*/
nonce_payload_t *nonce_payload_create()
nonce_payload_t *nonce_payload_create(payload_type_t type)
{
private_nonce_payload_t *this;
@ -180,6 +185,7 @@ nonce_payload_t *nonce_payload_create()
},
.next_payload = NO_PAYLOAD,
.payload_length = NONCE_PAYLOAD_HEADER_LENGTH,
.type = type,
);
return &this->public;
}

View File

@ -38,9 +38,7 @@ typedef struct nonce_payload_t nonce_payload_t;
#define NONCE_PAYLOAD_HEADER_LENGTH 4
/**
* Object representing an IKEv2 Nonce payload.
*
* The Nonce payload format is described in RFC section 3.3.
* Object representing an IKEv1/IKEv2 Nonce payload.
*/
struct nonce_payload_t {
/**
@ -71,8 +69,9 @@ struct nonce_payload_t {
/**
* Creates an empty nonce_payload_t object
*
* @return nonce_payload_t object
* @param type NONCE or NONCE_V1
* @return nonce_payload_t object
*/
nonce_payload_t *nonce_payload_create(void);
nonce_payload_t *nonce_payload_create(payload_type_t type);
#endif /** NONCE_PAYLOAD_H_ @}*/

View File

@ -180,7 +180,8 @@ payload_t *payload_create(payload_type_t type)
case TRANSFORM_ATTRIBUTE_V1:
return (payload_t*)transform_attribute_create(type);
case NONCE:
return (payload_t*)nonce_payload_create();
case NONCE_V1:
return (payload_t*)nonce_payload_create(type);
case ID_INITIATOR:
case ID_RESPONDER:
#ifdef ME

View File

@ -539,7 +539,7 @@ static void build_payloads(private_child_create_t *this, message_t *message)
/* add nonce payload if not in IKE_AUTH */
if (message->get_exchange_type(message) == CREATE_CHILD_SA)
{
nonce_payload = nonce_payload_create();
nonce_payload = nonce_payload_create(NONCE);
nonce_payload->set_nonce(nonce_payload, this->my_nonce);
message->add_payload(message, (payload_t*)nonce_payload);
}

View File

@ -148,7 +148,7 @@ static void build_payloads(private_ike_init_t *this, message_t *message)
}
message->add_payload(message, (payload_t*)sa_payload);
nonce_payload = nonce_payload_create();
nonce_payload = nonce_payload_create(NONCE);
nonce_payload->set_nonce(nonce_payload, this->my_nonce);
ke_payload = ke_payload_create_from_diffie_hellman(this->dh);