Extended nonce payload for IKEv1 support

This commit is contained in:
Martin Willi
2012-03-20 17:30:42 +01:00
parent 717333da98
commit bcfb0f4096
5 changed files with 16 additions and 10 deletions
@@ -57,6 +57,11 @@ struct private_nonce_payload_t {
* The contained nonce value. * The contained nonce value.
*/ */
chunk_t nonce; 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, METHOD(payload_t, get_type, payload_type_t,
private_nonce_payload_t *this) private_nonce_payload_t *this)
{ {
return NONCE; return this->type;
} }
METHOD(payload_t, get_next_type, payload_type_t, METHOD(payload_t, get_next_type, payload_type_t,
@@ -159,7 +164,7 @@ METHOD2(payload_t, nonce_payload_t, destroy, void,
/* /*
* Described in header * Described in header
*/ */
nonce_payload_t *nonce_payload_create() nonce_payload_t *nonce_payload_create(payload_type_t type)
{ {
private_nonce_payload_t *this; private_nonce_payload_t *this;
@@ -180,6 +185,7 @@ nonce_payload_t *nonce_payload_create()
}, },
.next_payload = NO_PAYLOAD, .next_payload = NO_PAYLOAD,
.payload_length = NONCE_PAYLOAD_HEADER_LENGTH, .payload_length = NONCE_PAYLOAD_HEADER_LENGTH,
.type = type,
); );
return &this->public; return &this->public;
} }
@@ -38,9 +38,7 @@ typedef struct nonce_payload_t nonce_payload_t;
#define NONCE_PAYLOAD_HEADER_LENGTH 4 #define NONCE_PAYLOAD_HEADER_LENGTH 4
/** /**
* Object representing an IKEv2 Nonce payload. * Object representing an IKEv1/IKEv2 Nonce payload.
*
* The Nonce payload format is described in RFC section 3.3.
*/ */
struct nonce_payload_t { struct nonce_payload_t {
/** /**
@@ -71,8 +69,9 @@ struct nonce_payload_t {
/** /**
* Creates an empty nonce_payload_t object * 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_ @}*/ #endif /** NONCE_PAYLOAD_H_ @}*/
+2 -1
View File
@@ -180,7 +180,8 @@ payload_t *payload_create(payload_type_t type)
case TRANSFORM_ATTRIBUTE_V1: case TRANSFORM_ATTRIBUTE_V1:
return (payload_t*)transform_attribute_create(type); return (payload_t*)transform_attribute_create(type);
case NONCE: case NONCE:
return (payload_t*)nonce_payload_create(); case NONCE_V1:
return (payload_t*)nonce_payload_create(type);
case ID_INITIATOR: case ID_INITIATOR:
case ID_RESPONDER: case ID_RESPONDER:
#ifdef ME #ifdef ME
+1 -1
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 */ /* add nonce payload if not in IKE_AUTH */
if (message->get_exchange_type(message) == CREATE_CHILD_SA) 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); nonce_payload->set_nonce(nonce_payload, this->my_nonce);
message->add_payload(message, (payload_t*)nonce_payload); message->add_payload(message, (payload_t*)nonce_payload);
} }
+1 -1
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); 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); nonce_payload->set_nonce(nonce_payload, this->my_nonce);
ke_payload = ke_payload_create_from_diffie_hellman(this->dh); ke_payload = ke_payload_create_from_diffie_hellman(this->dh);