diffie-hellman: Add a bool return value to get_my_public_value()
This commit is contained in:
@@ -109,8 +109,10 @@ struct diffie_hellman_t {
|
||||
* Space for returned chunk is allocated and must be freed by the caller.
|
||||
*
|
||||
* @param value public value of caller is stored at this location
|
||||
* @return TRUE if public value retrieved
|
||||
*/
|
||||
void (*get_my_public_value) (diffie_hellman_t *this, chunk_t *value);
|
||||
bool (*get_my_public_value) (diffie_hellman_t *this, chunk_t *value)
|
||||
__attribute__((warn_unused_result));
|
||||
|
||||
/**
|
||||
* Get the DH group used.
|
||||
|
||||
@@ -132,10 +132,11 @@ static chunk_t export_mpi(gcry_mpi_t value, size_t len)
|
||||
return chunk;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_gcrypt_dh_t *this, chunk_t *value)
|
||||
{
|
||||
*value = export_mpi(this->ya, this->p_len);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -144,7 +144,7 @@ METHOD(diffie_hellman_t, set_other_public_value, void,
|
||||
mpz_clear(p_min_1);
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_gmp_diffie_hellman_t *this,chunk_t *value)
|
||||
{
|
||||
value->len = this->p_len;
|
||||
@@ -153,6 +153,7 @@ METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
{
|
||||
value->len = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -109,7 +109,7 @@ struct private_ntru_ke_t {
|
||||
ntru_drbg_t *drbg;
|
||||
};
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_ntru_ke_t *this, chunk_t *value)
|
||||
{
|
||||
*value = chunk_empty;
|
||||
@@ -130,13 +130,14 @@ METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
if (!this->privkey)
|
||||
{
|
||||
DBG1(DBG_LIB, "NTRU keypair generation failed");
|
||||
return;
|
||||
return FALSE;
|
||||
}
|
||||
this->pubkey = this->privkey->get_public_key(this->privkey);
|
||||
}
|
||||
*value = chunk_clone(this->pubkey->get_encoding(this->pubkey));
|
||||
DBG3(DBG_LIB, "NTRU public key: %B", value);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -61,13 +61,14 @@ struct private_openssl_diffie_hellman_t {
|
||||
bool computed;
|
||||
};
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_openssl_diffie_hellman_t *this, chunk_t *value)
|
||||
{
|
||||
*value = chunk_alloc(DH_size(this->dh));
|
||||
memset(value->ptr, 0, value->len);
|
||||
BN_bn2bin(this->dh->pub_key,
|
||||
value->ptr + value->len - BN_num_bytes(this->dh->pub_key));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -235,10 +235,11 @@ METHOD(diffie_hellman_t, set_other_public_value, void,
|
||||
this->computed = TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_openssl_ec_diffie_hellman_t *this,chunk_t *value)
|
||||
{
|
||||
ecp2chunk(this->ec_group, EC_KEY_get0_public_key(this->key), value, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -148,10 +148,11 @@ METHOD(diffie_hellman_t, set_other_public_value, void,
|
||||
derive_secret(this, value);
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_my_public_value, void,
|
||||
METHOD(diffie_hellman_t, get_my_public_value, bool,
|
||||
private_pkcs11_dh_t *this, chunk_t *value)
|
||||
{
|
||||
*value = chunk_clone(this->pub_key);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
METHOD(diffie_hellman_t, get_shared_secret, bool,
|
||||
|
||||
@@ -1077,14 +1077,14 @@ START_TEST(test_ntru_ke)
|
||||
ck_assert(i_ntru != NULL);
|
||||
ck_assert(i_ntru->get_dh_group(i_ntru) == params[k].group);
|
||||
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key);
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key));
|
||||
ck_assert(pub_key.len > 0);
|
||||
|
||||
r_ntru = lib->crypto->create_dh(lib->crypto, params[k].group);
|
||||
ck_assert(r_ntru != NULL);
|
||||
|
||||
r_ntru->set_other_public_value(r_ntru, pub_key);
|
||||
r_ntru->get_my_public_value(r_ntru, &cipher_text);
|
||||
ck_assert(r_ntru->get_my_public_value(r_ntru, &cipher_text));
|
||||
ck_assert(cipher_text.len > 0);
|
||||
|
||||
ck_assert(r_ntru->get_shared_secret(r_ntru, &r_shared_secret));
|
||||
@@ -1109,8 +1109,8 @@ START_TEST(test_ntru_retransmission)
|
||||
chunk_t pub_key1, pub_key2;
|
||||
|
||||
i_ntru = lib->crypto->create_dh(lib->crypto, NTRU_256_BIT);
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key1);
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key2);
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key1));
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key2));
|
||||
ck_assert(chunk_equals(pub_key1, pub_key2));
|
||||
|
||||
chunk_free(&pub_key1);
|
||||
@@ -1137,7 +1137,7 @@ START_TEST(test_ntru_pubkey_oid)
|
||||
|
||||
r_ntru = lib->crypto->create_dh(lib->crypto, NTRU_128_BIT);
|
||||
r_ntru->set_other_public_value(r_ntru, oid_tests[_i]);
|
||||
r_ntru->get_my_public_value(r_ntru, &cipher_text);
|
||||
ck_assert(r_ntru->get_my_public_value(r_ntru, &cipher_text));
|
||||
ck_assert(cipher_text.len == 0);
|
||||
r_ntru->destroy(r_ntru);
|
||||
}
|
||||
@@ -1152,14 +1152,14 @@ START_TEST(test_ntru_wrong_set)
|
||||
"libstrongswan.plugins.ntru.parameter_set",
|
||||
"x9_98_bandwidth");
|
||||
i_ntru = lib->crypto->create_dh(lib->crypto, NTRU_112_BIT);
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key);
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key));
|
||||
|
||||
lib->settings->set_str(lib->settings,
|
||||
"libstrongswan.plugins.ntru.parameter_set",
|
||||
"optimum");
|
||||
r_ntru = lib->crypto->create_dh(lib->crypto, NTRU_112_BIT);
|
||||
r_ntru->set_other_public_value(r_ntru, pub_key);
|
||||
r_ntru->get_my_public_value(r_ntru, &cipher_text);
|
||||
ck_assert(r_ntru->get_my_public_value(r_ntru, &cipher_text));
|
||||
ck_assert(cipher_text.len == 0);
|
||||
|
||||
chunk_free(&pub_key);
|
||||
@@ -1190,7 +1190,7 @@ START_TEST(test_ntru_ciphertext)
|
||||
for (i = 0; i < countof(test); i++)
|
||||
{
|
||||
i_ntru = lib->crypto->create_dh(lib->crypto, NTRU_128_BIT);
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key);
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key));
|
||||
i_ntru->set_other_public_value(i_ntru, test[i]);
|
||||
ck_assert(!i_ntru->get_shared_secret(i_ntru, &shared_secret));
|
||||
ck_assert(shared_secret.len == 0);
|
||||
@@ -1210,10 +1210,10 @@ START_TEST(test_ntru_wrong_ciphertext)
|
||||
r_ntru = lib->crypto->create_dh(lib->crypto, NTRU_128_BIT);
|
||||
m_ntru = lib->crypto->create_dh(lib->crypto, NTRU_128_BIT);
|
||||
|
||||
i_ntru->get_my_public_value(i_ntru, &pub_key_i);
|
||||
m_ntru->get_my_public_value(m_ntru, &pub_key_m);
|
||||
ck_assert(i_ntru->get_my_public_value(i_ntru, &pub_key_i));
|
||||
ck_assert(m_ntru->get_my_public_value(m_ntru, &pub_key_m));
|
||||
r_ntru->set_other_public_value(r_ntru, pub_key_m);
|
||||
r_ntru->get_my_public_value(r_ntru, &cipher_text);
|
||||
ck_assert(r_ntru->get_my_public_value(r_ntru, &cipher_text));
|
||||
i_ntru->set_other_public_value(i_ntru, cipher_text);
|
||||
ck_assert(!i_ntru->get_shared_secret(i_ntru, &shared_secret));
|
||||
ck_assert(shared_secret.len == 0);
|
||||
|
||||
Reference in New Issue
Block a user