Navigation



Ignore:
Timestamp:
Dec 1, 2010, 6:19:54 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Added ability to extract the Extended MSK (EMSK) for future use

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/app_diameap/plugins/eap_tls/eap_tls.c

    r577 r610  
    5050                struct eap_packet eapRespData);
    5151boolean eap_tls_isDone(struct eap_state_machine *smd);
    52 int eap_tls_getKey(struct eap_state_machine *smd, u8** key, int * keylen);
     52int eap_tls_getKey(struct eap_state_machine *smd, u8** msk, int * msklen, u8** emsk, int * emsklen);
    5353void eap_tls_unregister(void);
    5454void eap_tls_free(void * data);
     
    289289}
    290290
    291 int eap_tls_getKey(struct eap_state_machine *smd, u8 ** key, int *keylen)
     291int eap_tls_getKey(struct eap_state_machine *smd, u8 ** msk, int *msklen, u8 ** emsk, int *emsklen)
    292292{
    293293        struct tls_data * data;
     294        int len = emsk ? 128 : 64;
    294295        data = (struct tls_data *) smd->methodData;
    295         *key = malloc(64);
     296        *msk = malloc(len);
    296297        if (gnutls_prf(data->session, strlen("client EAP encryption"),
    297                         "client EAP encryption", 0, 0, NULL, 64, (char *) *key)
     298                        "client EAP encryption", 0, 0, NULL, len, (char *) *msk)
    298299                        != GNUTLS_E_SUCCESS)
    299300        {
    300                 free(*key);
    301                 *key = NULL;
    302                 *keylen = 0;
     301                free(*msk);
     302                *msk = NULL;
     303                *msklen = 0;
    303304                return 1;
    304305        }
    305306        else
    306307        {
    307                 *keylen = 64;
     308                *msklen = 64;
     309        }
     310        if (emsk) {
     311                *emsk = malloc(64);
     312                memcpy(*emsk, (*msk)+64, 64);
     313                memset((*msk)+64, 0, 64);
     314                *emsklen = 64;
    308315        }
    309316
Note: See TracChangeset for help on using the changeset viewer.