nonce is now copied when setting or getting

This commit is contained in:
Jan Hutter
2005-11-22 11:54:14 +00:00
parent fa147f1bd7
commit b2c259bac5
+31 -13
View File
@@ -131,17 +131,6 @@ static status_t verify(private_nonce_payload_t *this)
return SUCCESS; return SUCCESS;
} }
/**
* Implements payload_t's and nonce_payload_t's destroy function.
* See #payload_s.destroy or nonce_payload_s.destroy for description.
*/
static status_t destroy(private_nonce_payload_t *this)
{
allocator_free(this);
return SUCCESS;
}
/** /**
* Implements nonce_payload_t's set_nonce function. * Implements nonce_payload_t's set_nonce function.
* See #nonce_payload_t.set_nonce for description. * See #nonce_payload_t.set_nonce for description.
@@ -150,8 +139,13 @@ static status_t set_nonce(private_nonce_payload_t *this, chunk_t nonce)
{ {
if (nonce.len >= 16 && nonce.len <= 256) if (nonce.len >= 16 && nonce.len <= 256)
{ {
this->nonce.ptr = allocator_clone_bytes(nonce.ptr, nonce.len);
if (this->nonce.ptr == NULL)
{
return OUT_OF_RES;
}
this->nonce.len = nonce.len; this->nonce.len = nonce.len;
this->nonce.ptr = nonce.ptr;
this->payload_length = NONCE_PAYLOAD_HEADER_LENGTH + nonce.len; this->payload_length = NONCE_PAYLOAD_HEADER_LENGTH + nonce.len;
return SUCCESS; return SUCCESS;
} }
@@ -164,11 +158,16 @@ static status_t set_nonce(private_nonce_payload_t *this, chunk_t nonce)
*/ */
static status_t get_nonce(private_nonce_payload_t *this, chunk_t *nonce) static status_t get_nonce(private_nonce_payload_t *this, chunk_t *nonce)
{ {
nonce->ptr = this->nonce.ptr; nonce->ptr = allocator_clone_bytes(this->nonce.ptr,this->nonce.len);
if (nonce->ptr == NULL)
{
return OUT_OF_RES;
}
nonce->len = this->nonce.len; nonce->len = this->nonce.len;
return SUCCESS; return SUCCESS;
} }
/** /**
* Implements payload_t's get_encoding_rules function. * Implements payload_t's get_encoding_rules function.
* See #payload_s.get_encoding_rules for description. * See #payload_s.get_encoding_rules for description.
@@ -219,6 +218,21 @@ static size_t get_length(private_nonce_payload_t *this)
return this->payload_length; return this->payload_length;
} }
/**
* Implements payload_t's and nonce_payload_t's destroy function.
* See #payload_s.destroy or nonce_payload_s.destroy for description.
*/
static status_t destroy(private_nonce_payload_t *this)
{
if (this->nonce.ptr != NULL)
{
allocator_free(this->nonce.ptr);
}
allocator_free(this);
return SUCCESS;
}
/* /*
* Described in header * Described in header
*/ */
@@ -230,6 +244,7 @@ nonce_payload_t *nonce_payload_create()
return NULL; return NULL;
} }
/* interface functions */
this->public.payload_interface.verify = (status_t (*) (payload_t *))verify; this->public.payload_interface.verify = (status_t (*) (payload_t *))verify;
this->public.payload_interface.get_encoding_rules = (status_t (*) (payload_t *, encoding_rule_t **, size_t *) ) get_encoding_rules; this->public.payload_interface.get_encoding_rules = (status_t (*) (payload_t *, encoding_rule_t **, size_t *) ) get_encoding_rules;
this->public.payload_interface.get_length = (size_t (*) (payload_t *)) get_length; this->public.payload_interface.get_length = (size_t (*) (payload_t *)) get_length;
@@ -237,10 +252,13 @@ nonce_payload_t *nonce_payload_create()
this->public.payload_interface.set_next_type = (status_t (*) (payload_t *,payload_type_t)) set_next_type; this->public.payload_interface.set_next_type = (status_t (*) (payload_t *,payload_type_t)) set_next_type;
this->public.payload_interface.get_type = (payload_type_t (*) (payload_t *)) get_type; this->public.payload_interface.get_type = (payload_type_t (*) (payload_t *)) get_type;
this->public.payload_interface.destroy = (status_t (*) (payload_t *))destroy; this->public.payload_interface.destroy = (status_t (*) (payload_t *))destroy;
/* public functions */
this->public.destroy = (status_t (*) (nonce_payload_t *)) destroy; this->public.destroy = (status_t (*) (nonce_payload_t *)) destroy;
this->public.set_nonce = (status_t (*) (nonce_payload_t *,chunk_t)) set_nonce; this->public.set_nonce = (status_t (*) (nonce_payload_t *,chunk_t)) set_nonce;
this->public.get_nonce = (status_t (*) (nonce_payload_t *,chunk_t*)) get_nonce; this->public.get_nonce = (status_t (*) (nonce_payload_t *,chunk_t*)) get_nonce;
/* private variables */
this->critical = FALSE; this->critical = FALSE;
this->next_payload = NO_PAYLOAD; this->next_payload = NO_PAYLOAD;
this->payload_length = NONCE_PAYLOAD_HEADER_LENGTH; this->payload_length = NONCE_PAYLOAD_HEADER_LENGTH;