mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-06 00:00:47 -04:00
gcrypt: Move shared secret calculation to get_shared_secret()
This commit is contained in:
parent
ed3494ef7b
commit
d95082ce0d
@ -100,25 +100,22 @@ METHOD(key_exchange_t, set_public_key, bool,
|
|||||||
p_min_1 = gcry_mpi_new(this->p_len * 8);
|
p_min_1 = gcry_mpi_new(this->p_len * 8);
|
||||||
gcry_mpi_sub_ui(p_min_1, this->p, 1);
|
gcry_mpi_sub_ui(p_min_1, this->p, 1);
|
||||||
|
|
||||||
/* check public value:
|
/* check that the public value y satisfies 1 < y < p-1.
|
||||||
* 1. 0 or 1 is invalid as 0^a = 0 and 1^a = 1
|
* according to RFC 6989, section 2.1, this is enough for the common safe-
|
||||||
* 2. a public value larger or equal the modulus is invalid */
|
* prime DH groups (i.e. with q=(p-1)/2 being prime) and also for those
|
||||||
if (gcry_mpi_cmp_ui(this->yb, 1) > 0 &&
|
* with small subgroups (22, 23, 24) if private keys are not reused, which
|
||||||
gcry_mpi_cmp(this->yb, p_min_1) < 0)
|
* we never do and explicitly prevent by not resetting this->zz when a
|
||||||
{
|
* different public key is set. */
|
||||||
if (!this->zz)
|
if (gcry_mpi_cmp_ui(this->yb, 1) <= 0 ||
|
||||||
{
|
gcry_mpi_cmp(this->yb, p_min_1) >= 0)
|
||||||
this->zz = gcry_mpi_new(this->p_len * 8);
|
|
||||||
}
|
|
||||||
gcry_mpi_powm(this->zz, this->yb, this->xa, this->p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
DBG1(DBG_LIB, "public DH value verification failed: "
|
DBG1(DBG_LIB, "public DH value verification failed: "
|
||||||
" y < 2 || y > p - 1 ");
|
"y <= 1 || y >= p - 1");
|
||||||
|
gcry_mpi_release(p_min_1);
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
gcry_mpi_release(p_min_1);
|
gcry_mpi_release(p_min_1);
|
||||||
return this->zz != NULL;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -169,7 +166,8 @@ METHOD(key_exchange_t, get_shared_secret, bool,
|
|||||||
{
|
{
|
||||||
if (!this->zz)
|
if (!this->zz)
|
||||||
{
|
{
|
||||||
return FALSE;
|
this->zz = gcry_mpi_new(this->p_len * 8);
|
||||||
|
gcry_mpi_powm(this->zz, this->yb, this->xa, this->p);
|
||||||
}
|
}
|
||||||
*secret = export_mpi(this->zz, this->p_len);
|
*secret = export_mpi(this->zz, this->p_len);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user