]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
keymat: Acquire ISA context ID on initialization
authorReto Buerki <reet@codelabs.ch>
Thu, 30 Aug 2012 12:42:19 +0000 (14:42 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 19 Mar 2013 14:23:47 +0000 (15:23 +0100)
src/charon-tkm/src/tkm/tkm_keymat.c

index 3b1fd1cd201712ea790c4f2888841ba291b2725f..50d93fc64d3e484d7f3b60f27dd63e654d670221 100644 (file)
@@ -56,6 +56,11 @@ struct private_tkm_keymat_t {
         */
        aead_t *aead_out;
 
+       /**
+        * ISA context id.
+        */
+       isa_id_type isa_ctx_id;
+
 };
 
 /**
@@ -224,7 +229,8 @@ METHOD(tkm_keymat_t, derive_ike_keys, bool,
        DBG1(DBG_IKE, "deriving IKE keys (nc: %llu, dh: %llu, spi_loc: %llx, "
                        "spi_rem: %llx)", nc_id, dh_id, spi_loc, spi_rem);
        /* Fake some data for now */
-       if (ike_isa_create(1, 1, 1, dh_id, nc_id, nonce_rem, 1, spi_loc, spi_rem,
+       if (ike_isa_create(this->isa_ctx_id, 1, 1, dh_id, nc_id, nonce_rem, 1,
+                               spi_loc, spi_rem,
                                &sk_ai, &sk_ar, &sk_ei, &sk_er) != TKM_OK)
        {
                DBG1(DBG_IKE, "key derivation failed");
@@ -318,7 +324,8 @@ METHOD(tkm_keymat_t, get_psk_sig, bool,
        idx_type idx;
        chunk_to_sequence(&idx_chunk, &idx);
 
-       if (ike_isa_sign_psk(1, msg, idx, verify == TRUE, &signature) != TKM_OK)
+       if (ike_isa_sign_psk(this->isa_ctx_id, msg, idx, verify == TRUE, &signature)
+                       != TKM_OK)
        {
                DBG1(DBG_IKE, "get %s PSK signature failed", verify ?
                                "remote" : "local");
@@ -332,6 +339,12 @@ METHOD(tkm_keymat_t, get_psk_sig, bool,
 METHOD(keymat_t, destroy, void,
        private_tkm_keymat_t *this)
 {
+       if (ike_isa_reset(this->isa_ctx_id) != TKM_OK)
+       {
+               DBG1(DBG_IKE, "failed to reset ISA context %d", this->isa_ctx_id);
+       }
+       tkm->idmgr->release_id(tkm->idmgr, TKM_CTX_ISA, this->isa_ctx_id);
+
        DESTROY_IF(this->aead_in);
        DESTROY_IF(this->aead_out);
        this->proxy->keymat.destroy(&this->proxy->keymat);
@@ -361,8 +374,15 @@ tkm_keymat_t *tkm_keymat_create(bool initiator)
                        .get_psk_sig = _get_psk_sig,
                },
                .initiator = initiator,
+               .isa_ctx_id = tkm->idmgr->acquire_id(tkm->idmgr, TKM_CTX_ISA),
                .proxy = keymat_v2_create(initiator),
        );
 
+       if (!this->isa_ctx_id)
+       {
+               free(this);
+               return NULL;
+       }
+
        return &this->public;
 }