/* derive master secret */
seed = chunk_cata("cc", client_random, server_random);
- this->prf->set_key(this->prf, premaster);
- if (!this->prf->get_bytes(this->prf, "master secret", seed,
- sizeof(master), master))
+
+ if (!this->prf->set_key(this->prf, premaster) ||
+ !this->prf->get_bytes(this->prf, "master secret", seed,
+ sizeof(master), master) ||
+ !this->prf->set_key(this->prf, chunk_from_thing(master)))
{
return FALSE;
}
- this->prf->set_key(this->prf, chunk_from_thing(master));
if (this->cache && session.len)
{
this->suite = select_cipher_suite(this, &this->suite, 1, KEY_ANY);
if (this->suite)
{
- this->prf->set_key(this->prf, master);
- if (!expand_keys(this, client_random, server_random))
+ if (!this->prf->set_key(this->prf, master) ||
+ !expand_keys(this, client_random, server_random))
{
this->suite = 0;
}
prf_t *prf;
};
-METHOD(tls_prf_t, set_key12, void,
+METHOD(tls_prf_t, set_key12, bool,
private_tls_prf12_t *this, chunk_t key)
{
this->prf->set_key(this->prf, key);
+ return TRUE;
}
/**
prf_t *sha1;
};
-METHOD(tls_prf_t, set_key10, void,
+METHOD(tls_prf_t, set_key10, bool,
private_tls_prf10_t *this, chunk_t key)
{
size_t len = key.len / 2 + key.len % 2;
this->md5->set_key(this->md5, chunk_create(key.ptr, len));
this->sha1->set_key(this->sha1, chunk_create(key.ptr + key.len - len, len));
+ return TRUE;
}
METHOD(tls_prf_t, get_bytes10, bool,
* Set the key of the PRF function.
*
* @param key key to set
+ * @return TRUE if key set successfully
*/
- void (*set_key)(tls_prf_t *this, chunk_t key);
+ bool (*set_key)(tls_prf_t *this, chunk_t key);
/**
* Generate a series of bytes using a label and a seed.