diff options
author | Adrian-Ken Rueegsegger <ken@codelabs.ch> | 2012-08-29 18:32:28 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-03-19 15:23:46 +0100 |
commit | 51fdbd042901635280f98d4ee96231b2890f7feb (patch) | |
tree | 262e8240b52f3ef31a36e6aaadecac2fe4367d38 /src | |
parent | e285544be2a8c561b3d84bf43523c761526879c6 (diff) | |
download | strongswan-51fdbd042901635280f98d4ee96231b2890f7feb.tar.bz2 strongswan-51fdbd042901635280f98d4ee96231b2890f7feb.tar.xz |
keymat: Call ike_isa_sign_psk in get_psk_sig
Get PSK signed AUTH octets from TKM in initiator case.
Diffstat (limited to 'src')
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_keymat.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/charon-tkm/src/tkm/tkm_keymat.c b/src/charon-tkm/src/tkm/tkm_keymat.c index 36067eae8..0c71967e3 100644 --- a/src/charon-tkm/src/tkm/tkm_keymat.c +++ b/src/charon-tkm/src/tkm/tkm_keymat.c @@ -298,8 +298,33 @@ METHOD(tkm_keymat_t, get_psk_sig, bool, chunk_t secret, identification_t *id, char reserved[3], chunk_t *sig) { DBG1(DBG_IKE, "returning PSK signature"); - return this->proxy->get_psk_sig(this->proxy, verify, ike_sa_init, nonce, + if (!verify) + { + signature_type signature; + init_message_type msg; + chunk_to_sequence(&ike_sa_init, &msg); + + chunk_t idx_chunk, chunk = chunk_alloca(4); + chunk.ptr[0] = id->get_type(id); + memcpy(chunk.ptr + 1, reserved, 3); + idx_chunk = chunk_cata("cc", chunk, id->get_encoding(id)); + idx_type idx; + chunk_to_sequence(&idx_chunk, &idx); + + if (ike_isa_sign_psk(1, msg, idx, &signature) != TKM_OK) + { + DBG1(DBG_IKE, "get local PSK signature failed"); + return FALSE; + } + + sequence_to_chunk(&signature.data[0], signature.size, sig); + return TRUE; + } + else + { + return this->proxy->get_psk_sig(this->proxy, verify, ike_sa_init, nonce, secret, id, reserved, sig); + } } METHOD(keymat_t, destroy, void, |