Pass IKEv1 specific keymat to ike_keys hook

This commit is contained in:
Martin Willi
2012-03-20 17:31:37 +01:00
parent 264514826c
commit 23f9e7a18d
6 changed files with 20 additions and 12 deletions
+4 -3
View File
@@ -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)
{ {
+5 -2
View File
@@ -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.
* *
+5 -2
View File
@@ -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.
+2 -1
View File
@@ -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;
+2 -2
View File
@@ -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;
} }
+2 -2
View File
@@ -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;
} }