curve25519: Move shared secret calculation to get_shared_secret()

This commit is contained in:
Tobias Brunner
2022-06-29 10:28:50 +02:00
parent 31f467d70b
commit ed3494ef7b
@@ -42,6 +42,11 @@ struct private_curve25519_dh_t {
*/ */
bool computed; bool computed;
/**
* Public key provided by peer
*/
u_char pubkey[CURVE25519_KEY_SIZE];
/** /**
* Curve25519 backend * Curve25519 backend
*/ */
@@ -78,11 +83,8 @@ METHOD(key_exchange_t, set_public_key, bool,
{ {
if (value.len == CURVE25519_KEY_SIZE) if (value.len == CURVE25519_KEY_SIZE)
{ {
if (this->drv->curve25519(this->drv, value.ptr, this->shared)) memcpy(this->pubkey, value.ptr, value.len);
{ return TRUE;
this->computed = TRUE;
return TRUE;
}
} }
return FALSE; return FALSE;
} }
@@ -114,10 +116,12 @@ METHOD(key_exchange_t, set_private_key, bool,
METHOD(key_exchange_t, get_shared_secret, bool, METHOD(key_exchange_t, get_shared_secret, bool,
private_curve25519_dh_t *this, chunk_t *secret) private_curve25519_dh_t *this, chunk_t *secret)
{ {
if (!this->computed) if (!this->computed &&
!this->drv->curve25519(this->drv, this->pubkey, this->shared))
{ {
return FALSE; return FALSE;
} }
this->computed = TRUE;
*secret = chunk_clone(chunk_from_thing(this->shared)); *secret = chunk_clone(chunk_from_thing(this->shared));
return TRUE; return TRUE;
} }