Pass IKEv1 specific keymat to ike_keys hook
This commit is contained in:
@@ -438,7 +438,8 @@ METHOD(bus_t, message, void,
|
|||||||
|
|
||||||
METHOD(bus_t, ike_keys, void,
|
METHOD(bus_t, ike_keys, void,
|
||||||
private_bus_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
private_bus_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
||||||
chunk_t nonce_i, chunk_t nonce_r, ike_sa_t *rekey)
|
chunk_t dh_other, chunk_t nonce_i, chunk_t nonce_r,
|
||||||
|
ike_sa_t *rekey, shared_key_t *shared)
|
||||||
{
|
{
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
entry_t *entry;
|
entry_t *entry;
|
||||||
@@ -453,8 +454,8 @@ METHOD(bus_t, ike_keys, void,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
entry->calling++;
|
entry->calling++;
|
||||||
keep = entry->listener->ike_keys(entry->listener, ike_sa, dh,
|
keep = entry->listener->ike_keys(entry->listener, ike_sa, dh, dh_other,
|
||||||
nonce_i, nonce_r, rekey);
|
nonce_i, nonce_r, rekey, shared);
|
||||||
entry->calling--;
|
entry->calling--;
|
||||||
if (!keep)
|
if (!keep)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -264,12 +264,15 @@ struct bus_t {
|
|||||||
*
|
*
|
||||||
* @param ike_sa IKE_SA this keymat belongs to
|
* @param ike_sa IKE_SA this keymat belongs to
|
||||||
* @param dh diffie hellman shared secret
|
* @param dh diffie hellman shared secret
|
||||||
|
* @param dh_other others DH public value (IKEv1 only)
|
||||||
* @param nonce_i initiators nonce
|
* @param nonce_i initiators nonce
|
||||||
* @param nonce_r responders nonce
|
* @param nonce_r responders nonce
|
||||||
* @param rekey IKE_SA we are rekeying, if any
|
* @param rekey IKE_SA we are rekeying, if any (IKEv2 only)
|
||||||
|
* @param shared shared key used for key derivation (IKEv1-PSK only)
|
||||||
*/
|
*/
|
||||||
void (*ike_keys)(bus_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
void (*ike_keys)(bus_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
||||||
chunk_t nonce_i, chunk_t nonce_r, ike_sa_t *rekey);
|
chunk_t dh_other, chunk_t nonce_i, chunk_t nonce_r,
|
||||||
|
ike_sa_t *rekey, shared_key_t *shared);
|
||||||
/**
|
/**
|
||||||
* CHILD_SA keymat hook.
|
* CHILD_SA keymat hook.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -97,13 +97,16 @@ struct listener_t {
|
|||||||
*
|
*
|
||||||
* @param ike_sa IKE_SA this keymat belongs to
|
* @param ike_sa IKE_SA this keymat belongs to
|
||||||
* @param dh diffie hellman shared secret
|
* @param dh diffie hellman shared secret
|
||||||
|
* @param dh_other others DH public value (IKEv1 only)
|
||||||
* @param nonce_i initiators nonce
|
* @param nonce_i initiators nonce
|
||||||
* @param nonce_r responders nonce
|
* @param nonce_r responders nonce
|
||||||
* @param rekey IKE_SA we are rekeying, if any
|
* @param rekey IKE_SA we are rekeying, if any (IKEv2 only)
|
||||||
|
* @param shared shared key used for key derivation (IKEv1-PSK only)
|
||||||
* @return TRUE to stay registered, FALSE to unregister
|
* @return TRUE to stay registered, FALSE to unregister
|
||||||
*/
|
*/
|
||||||
bool (*ike_keys)(listener_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
bool (*ike_keys)(listener_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
||||||
chunk_t nonce_i, chunk_t nonce_r, ike_sa_t *rekey);
|
chunk_t dh_other, chunk_t nonce_i, chunk_t nonce_r,
|
||||||
|
ike_sa_t *rekey, shared_key_t *shared);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook called with CHILD_SA key material.
|
* Hook called with CHILD_SA key material.
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ static ike_extension_t copy_extension(ike_sa_t *ike_sa, ike_extension_t ext)
|
|||||||
|
|
||||||
METHOD(listener_t, ike_keys, bool,
|
METHOD(listener_t, ike_keys, bool,
|
||||||
private_ha_ike_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
private_ha_ike_t *this, ike_sa_t *ike_sa, diffie_hellman_t *dh,
|
||||||
chunk_t nonce_i, chunk_t nonce_r, ike_sa_t *rekey)
|
chunk_t dh_other, chunk_t nonce_i, chunk_t nonce_r, ike_sa_t *rekey,
|
||||||
|
shared_key_t *shared)
|
||||||
{
|
{
|
||||||
ha_message_t *m;
|
ha_message_t *m;
|
||||||
chunk_t secret;
|
chunk_t secret;
|
||||||
|
|||||||
@@ -215,9 +215,9 @@ METHOD(phase1_t, derive_keys, bool,
|
|||||||
DBG1(DBG_IKE, "key derivation for %N failed", auth_method_names, method);
|
DBG1(DBG_IKE, "key derivation for %N failed", auth_method_names, method);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
charon->bus->ike_keys(charon->bus, this->ike_sa, this->dh, this->dh_value,
|
||||||
|
this->nonce_i, this->nonce_r, NULL, shared_key);
|
||||||
DESTROY_IF(shared_key);
|
DESTROY_IF(shared_key);
|
||||||
charon->bus->ike_keys(charon->bus, this->ike_sa, this->dh,
|
|
||||||
this->nonce_i, this->nonce_r, NULL);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -354,8 +354,8 @@ static bool derive_keys(private_ike_init_t *this,
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
charon->bus->ike_keys(charon->bus, this->ike_sa, this->dh,
|
charon->bus->ike_keys(charon->bus, this->ike_sa, this->dh, chunk_empty,
|
||||||
nonce_i, nonce_r, this->old_sa);
|
nonce_i, nonce_r, this->old_sa, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user