Add a return value to mac_t.get_bytes()
This commit is contained in:
@@ -44,8 +44,10 @@ struct mac_t {
|
|||||||
*
|
*
|
||||||
* @param data chunk of data to authenticate
|
* @param data chunk of data to authenticate
|
||||||
* @param out pointer where the generated bytes will be written
|
* @param out pointer where the generated bytes will be written
|
||||||
|
* @return TRUE if mac generated successfully
|
||||||
*/
|
*/
|
||||||
void (*get_mac)(mac_t *this, chunk_t data, u_int8_t *out);
|
__attribute__((warn_unused_result))
|
||||||
|
bool (*get_mac)(mac_t *this, chunk_t data, u_int8_t *out);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the size of the resulting MAC.
|
* Get the size of the resulting MAC.
|
||||||
|
|||||||
@@ -38,23 +38,18 @@ struct private_prf_t {
|
|||||||
METHOD(prf_t, get_bytes, bool,
|
METHOD(prf_t, get_bytes, bool,
|
||||||
private_prf_t *this, chunk_t seed, u_int8_t *buffer)
|
private_prf_t *this, chunk_t seed, u_int8_t *buffer)
|
||||||
{
|
{
|
||||||
this->mac->get_mac(this->mac, seed, buffer);
|
return this->mac->get_mac(this->mac, seed, buffer);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(prf_t, allocate_bytes, bool,
|
METHOD(prf_t, allocate_bytes, bool,
|
||||||
private_prf_t *this, chunk_t seed, chunk_t *chunk)
|
private_prf_t *this, chunk_t seed, chunk_t *chunk)
|
||||||
{
|
{
|
||||||
if (!chunk)
|
if (chunk)
|
||||||
{
|
|
||||||
this->mac->get_mac(this->mac, seed, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
*chunk = chunk_alloc(this->mac->get_mac_size(this->mac));
|
*chunk = chunk_alloc(this->mac->get_mac_size(this->mac));
|
||||||
this->mac->get_mac(this->mac, seed, chunk->ptr);
|
return this->mac->get_mac(this->mac, seed, chunk->ptr);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return this->mac->get_mac(this->mac, seed, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(prf_t, get_block_size, size_t,
|
METHOD(prf_t, get_block_size, size_t,
|
||||||
|
|||||||
@@ -43,37 +43,36 @@ struct private_signer_t {
|
|||||||
METHOD(signer_t, get_signature, bool,
|
METHOD(signer_t, get_signature, bool,
|
||||||
private_signer_t *this, chunk_t data, u_int8_t *buffer)
|
private_signer_t *this, chunk_t data, u_int8_t *buffer)
|
||||||
{
|
{
|
||||||
if (buffer == NULL)
|
if (buffer)
|
||||||
{
|
|
||||||
this->mac->get_mac(this->mac, data, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
u_int8_t mac[this->mac->get_mac_size(this->mac)];
|
u_int8_t mac[this->mac->get_mac_size(this->mac)];
|
||||||
|
|
||||||
this->mac->get_mac(this->mac, data, mac);
|
if (!this->mac->get_mac(this->mac, data, mac))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
memcpy(buffer, mac, this->truncation);
|
memcpy(buffer, mac, this->truncation);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return this->mac->get_mac(this->mac, data, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(signer_t, allocate_signature, bool,
|
METHOD(signer_t, allocate_signature, bool,
|
||||||
private_signer_t *this, chunk_t data, chunk_t *chunk)
|
private_signer_t *this, chunk_t data, chunk_t *chunk)
|
||||||
{
|
{
|
||||||
if (chunk == NULL)
|
if (chunk)
|
||||||
{
|
|
||||||
this->mac->get_mac(this->mac, data, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
u_int8_t mac[this->mac->get_mac_size(this->mac)];
|
u_int8_t mac[this->mac->get_mac_size(this->mac)];
|
||||||
|
|
||||||
this->mac->get_mac(this->mac, data, mac);
|
if (!this->mac->get_mac(this->mac, data, mac))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
*chunk = chunk_alloc(this->truncation);
|
*chunk = chunk_alloc(this->truncation);
|
||||||
memcpy(chunk->ptr, mac, this->truncation);
|
memcpy(chunk->ptr, mac, this->truncation);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return this->mac->get_mac(this->mac, data, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(signer_t, verify_signature, bool,
|
METHOD(signer_t, verify_signature, bool,
|
||||||
@@ -85,8 +84,8 @@ METHOD(signer_t, verify_signature, bool,
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
this->mac->get_mac(this->mac, data, mac);
|
return this->mac->get_mac(this->mac, data, mac) &&
|
||||||
return memeq(signature.ptr, mac, this->truncation);
|
memeq(signature.ptr, mac, this->truncation);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(signer_t, get_key_size, size_t,
|
METHOD(signer_t, get_key_size, size_t,
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ static void final(private_mac_t *this, u_int8_t *out)
|
|||||||
this->remaining_bytes = 0;
|
this->remaining_bytes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac, void,
|
METHOD(mac_t, get_mac, bool,
|
||||||
private_mac_t *this, chunk_t data, u_int8_t *out)
|
private_mac_t *this, chunk_t data, u_int8_t *out)
|
||||||
{
|
{
|
||||||
/* update T, do not process last block */
|
/* update T, do not process last block */
|
||||||
@@ -175,6 +175,7 @@ METHOD(mac_t, get_mac, void,
|
|||||||
{ /* if not in append mode, process last block and output result */
|
{ /* if not in append mode, process last block and output result */
|
||||||
final(this, out);
|
final(this, out);
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac_size, size_t,
|
METHOD(mac_t, get_mac_size, size_t,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ struct private_mac_t {
|
|||||||
chunk_t ipaded_key;
|
chunk_t ipaded_key;
|
||||||
};
|
};
|
||||||
|
|
||||||
METHOD(mac_t, get_mac, void,
|
METHOD(mac_t, get_mac, bool,
|
||||||
private_mac_t *this, chunk_t data, u_int8_t *out)
|
private_mac_t *this, chunk_t data, u_int8_t *out)
|
||||||
{
|
{
|
||||||
/* H(K XOR opad, H(K XOR ipad, text))
|
/* H(K XOR opad, H(K XOR ipad, text))
|
||||||
@@ -90,6 +90,7 @@ METHOD(mac_t, get_mac, void,
|
|||||||
/* reinit for next call */
|
/* reinit for next call */
|
||||||
this->h->get_hash(this->h, this->ipaded_key, NULL);
|
this->h->get_hash(this->h, this->ipaded_key, NULL);
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac_size, size_t,
|
METHOD(mac_t, get_mac_size, size_t,
|
||||||
|
|||||||
@@ -75,24 +75,22 @@ struct private_mac_t {
|
|||||||
/**
|
/**
|
||||||
* Resets HMAC context
|
* Resets HMAC context
|
||||||
*/
|
*/
|
||||||
static void reset(private_mac_t *this)
|
static bool reset(private_mac_t *this)
|
||||||
{
|
{
|
||||||
HMAC_Init_ex(&this->hmac, this->key.ptr, this->key.len, this->hasher, NULL);
|
return HMAC_Init_ex(&this->hmac, this->key.ptr, this->key.len,
|
||||||
|
this->hasher, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac, void,
|
METHOD(mac_t, get_mac, bool,
|
||||||
private_mac_t *this, chunk_t data, u_int8_t *out)
|
private_mac_t *this, chunk_t data, u_int8_t *out)
|
||||||
{
|
{
|
||||||
if (out == NULL)
|
if (out == NULL)
|
||||||
{
|
{
|
||||||
HMAC_Update(&this->hmac, data.ptr, data.len);
|
return HMAC_Update(&this->hmac, data.ptr, data.len);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HMAC_Update(&this->hmac, data.ptr, data.len);
|
|
||||||
HMAC_Final(&this->hmac, out, NULL);
|
|
||||||
reset(this);
|
|
||||||
}
|
}
|
||||||
|
return HMAC_Update(&this->hmac, data.ptr, data.len) &&
|
||||||
|
HMAC_Final(&this->hmac, out, NULL) &&
|
||||||
|
reset(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac_size, size_t,
|
METHOD(mac_t, get_mac_size, size_t,
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ static void final(private_mac_t *this, u_int8_t *out)
|
|||||||
this->zero = TRUE;
|
this->zero = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac, void,
|
METHOD(mac_t, get_mac, bool,
|
||||||
private_mac_t *this, chunk_t data, u_int8_t *out)
|
private_mac_t *this, chunk_t data, u_int8_t *out)
|
||||||
{
|
{
|
||||||
/* update E, do not process last block */
|
/* update E, do not process last block */
|
||||||
@@ -189,6 +189,7 @@ METHOD(mac_t, get_mac, void,
|
|||||||
{ /* if not in append mode, process last block and output result */
|
{ /* if not in append mode, process last block and output result */
|
||||||
final(this, out);
|
final(this, out);
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(mac_t, get_mac_size, size_t,
|
METHOD(mac_t, get_mac_size, size_t,
|
||||||
@@ -350,4 +351,4 @@ signer_t *xcbc_signer_create(integrity_algorithm_t algo)
|
|||||||
return mac_signer_create(xcbc, trunc);
|
return mac_signer_create(xcbc, trunc);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user