Verify IKEv1 nonce size, send 32 byte nonces
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "nonce_payload.h"
|
#include "nonce_payload.h"
|
||||||
|
|
||||||
|
#include <daemon.h>
|
||||||
#include <encoding/payloads/encodings.h>
|
#include <encoding/payloads/encodings.h>
|
||||||
|
|
||||||
typedef struct private_nonce_payload_t private_nonce_payload_t;
|
typedef struct private_nonce_payload_t private_nonce_payload_t;
|
||||||
@@ -103,8 +104,26 @@ static encoding_rule_t encodings[] = {
|
|||||||
METHOD(payload_t, verify, status_t,
|
METHOD(payload_t, verify, status_t,
|
||||||
private_nonce_payload_t *this)
|
private_nonce_payload_t *this)
|
||||||
{
|
{
|
||||||
if (this->nonce.len < 16 || this->nonce.len > 256)
|
bool bad_length = FALSE;
|
||||||
|
|
||||||
|
if (this->nonce.len > 256)
|
||||||
{
|
{
|
||||||
|
bad_length = TRUE;
|
||||||
|
}
|
||||||
|
if (this->type == NONCE &&
|
||||||
|
this->nonce.len < 16)
|
||||||
|
{
|
||||||
|
bad_length = TRUE;
|
||||||
|
}
|
||||||
|
if (this->type == NONCE_V1 &&
|
||||||
|
this->nonce.len < 8)
|
||||||
|
{
|
||||||
|
bad_length = TRUE;
|
||||||
|
}
|
||||||
|
if (bad_length)
|
||||||
|
{
|
||||||
|
DBG1(DBG_ENC, "%N payload has invalid length (%d bytes)",
|
||||||
|
payload_type_names, this->type, this->nonce.len);
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@@ -171,8 +171,7 @@ METHOD(task_t, build_i, status_t,
|
|||||||
DBG1(DBG_IKE, "no RNG found to create nonce");
|
DBG1(DBG_IKE, "no RNG found to create nonce");
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
/* TODO-IKEv1: nonce size? */
|
rng->allocate_bytes(rng, NONCE_SIZE, &this->nonce_i);
|
||||||
rng->allocate_bytes(rng, 20, &this->nonce_i);
|
|
||||||
rng->destroy(rng);
|
rng->destroy(rng);
|
||||||
|
|
||||||
nonce_payload = nonce_payload_create(NONCE_V1);
|
nonce_payload = nonce_payload_create(NONCE_V1);
|
||||||
@@ -297,7 +296,6 @@ METHOD(task_t, process_r, status_t,
|
|||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
this->nonce_i = nonce_payload->get_nonce(nonce_payload);
|
this->nonce_i = nonce_payload->get_nonce(nonce_payload);
|
||||||
/* TODO-IKEv1: verify nonce length */
|
|
||||||
|
|
||||||
this->state = MM_KE;
|
this->state = MM_KE;
|
||||||
return NEED_MORE;
|
return NEED_MORE;
|
||||||
@@ -386,8 +384,7 @@ METHOD(task_t, build_r, status_t,
|
|||||||
DBG1(DBG_IKE, "no RNG found to create nonce");
|
DBG1(DBG_IKE, "no RNG found to create nonce");
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
/* TODO-IKEv1: nonce size? */
|
rng->allocate_bytes(rng, NONCE_SIZE, &this->nonce_r);
|
||||||
rng->allocate_bytes(rng, 20, &this->nonce_r);
|
|
||||||
rng->destroy(rng);
|
rng->destroy(rng);
|
||||||
|
|
||||||
nonce_payload = nonce_payload_create(NONCE_V1);
|
nonce_payload = nonce_payload_create(NONCE_V1);
|
||||||
@@ -483,7 +480,6 @@ METHOD(task_t, process_i, status_t,
|
|||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
this->nonce_r = nonce_payload->get_nonce(nonce_payload);
|
this->nonce_r = nonce_payload->get_nonce(nonce_payload);
|
||||||
/* TODO-IKEv1: verify nonce length */
|
|
||||||
|
|
||||||
return NEED_MORE;
|
return NEED_MORE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user