summaryrefslogtreecommitdiff
path: root/cp/secu
diff options
context:
space:
mode:
authorGuillaume2007-12-07 15:52:26 +0000
committerGuillaume2007-12-07 15:52:26 +0000
commit755573a61e8e82a0777485065130d1275d575e04 (patch)
tree657d0bf3d17d3f9597e5667cbc43e607b93d9afc /cp/secu
parent94a4fdd13361d6e8ace64a22477951be6c44f536 (diff)
working on message cm_encrypted_payload.ind
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@1112 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cp/secu')
-rw-r--r--cp/secu/inc/secu_types.h10
-rw-r--r--cp/secu/secu.h11
-rw-r--r--cp/secu/src/secu_lib.c25
-rw-r--r--cp/secu/src/secu_p_run.c5
4 files changed, 44 insertions, 7 deletions
diff --git a/cp/secu/inc/secu_types.h b/cp/secu/inc/secu_types.h
index 2cfc31faee..bc74c3c71a 100644
--- a/cp/secu/inc/secu_types.h
+++ b/cp/secu/inc/secu_types.h
@@ -68,11 +68,11 @@ typedef enum sec_state_t
{ JOIN, ADD, ACCEPT} sec_state_t;
typedef enum pid_t
-{ AUTH_REQ_BY_NEW_STA,
- PROV_AUTH_STA_WITH_NEK,
- PROV_STA_WITH_NMK_U_DAK,
- PROV_STA_WITH_NMK_U_UKE,
- HLE_PRO
+{ AUTH_REQ_BY_NEW_STA = 0x0,
+ PROV_AUTH_STA_WITH_NEK = 0x1,
+ PROV_STA_WITH_NMK_U_DAK = 0x2,
+ PROV_STA_WITH_NMK_U_UKE = 0x3,
+ HLE_PRO = 0x4
} pid_t;
typedef struct protocol_run_t
diff --git a/cp/secu/secu.h b/cp/secu/secu.h
index 5ed00a28bd..b2cd417dfe 100644
--- a/cp/secu/secu.h
+++ b/cp/secu/secu.h
@@ -46,6 +46,17 @@ secu_hash (pwd_type_t pwd_type, u8 in[], u8 out[]);
E_ErrCode
secu_gen_aes_key (u8 key[]);
+/**
+ * return the ek for the given peks
+ * \param peks the peks
+ * \param tei tei of the station (only if peks == PEKS_DESTINATION_STA_DAK)
+ * \return the key
+ */
+aes_key_t *
+secu_get_ek_from_peks(const peks_t peks, const tei_t tei);
+
+void
+secu_set_sta_s_dak(const tei_t, const aes_key_t dak);
#endif
diff --git a/cp/secu/src/secu_lib.c b/cp/secu/src/secu_lib.c
index e6cccdb651..54d6c9a8d7 100644
--- a/cp/secu/src/secu_lib.c
+++ b/cp/secu/src/secu_lib.c
@@ -16,8 +16,11 @@
#include "cp/secu/secu.h"
static peks_t m_peks; // see p588
-static u8 m_eks; // see p122
+static u8 m_eks; // see p122
+static aes_key_t m_dak[THEORICAL_MAX_STA_NB];
+static aes_key_t m_tek[PEKS_TEKD + 1];
+static aes_key_t m_nmk;
void
@@ -26,6 +29,9 @@ secu_init (sec_t *p_sec)
dbg_assert (p_sec);
memset (p_sec, 0, sizeof(sec_t));
+ memset (m_dak, 0, sizeof(m_dak));
+ memset (m_tek, 0, sizeof(m_tek));
+
m_peks = PEKS_NOT_ENCRYPTED;
m_eks = 0xF; // 0xF : no encryption key
#ifndef DEBUG
@@ -120,6 +126,23 @@ secu_gen_aes_key (u8 key[])
aes_set_key( &ctx, sec.key, AES_KEY_SIZE * 8);
aes_encrypt( &ctx, tmp_key, key);
return Success;
+}
+aes_key_t *
+secu_get_ek_from_peks(const peks_t peks, const tei_t tei)
+{
+ dbg_assert(peks < PEKS_NOT_ENCRYPTED);
+ dbg_assert(tei != 0 && tei != 0xFF);
+
+ if(peks == PEKS_DESTINATION_STA_DAK) return &m_dak[tei];
+ if(peks == PEKS_NMK) return &m_nmk;
+ if(peks == PEKS_NOT_ENCRYPTED) return NULL;
+ return &m_tek[peks];
}
+void
+secu_set_sta_s_dak(const tei_t tei, const aes_key_t dak)
+{
+ dbg_assert(tei != 0 && tei != 0xFF);
+ memcpy(m_dak[tei], dak, sizeof(m_dak[0]));
+}
diff --git a/cp/secu/src/secu_p_run.c b/cp/secu/src/secu_p_run.c
index 39616a5aef..101c3a274d 100644
--- a/cp/secu/src/secu_p_run.c
+++ b/cp/secu/src/secu_p_run.c
@@ -15,13 +15,16 @@
#include "common/std.h"
#include "cp/secu/inc/secu_p_run.h"
-static protocol_run_t m_p_run[MAX_STA_NB]; // variables du protocol run
+static protocol_run_t m_p_run[THEORICAL_MAX_STA_NB]; // variables du protocol run
void
secu_p_run_init(void)
{
+ uint i;
memset(m_p_run, 0, sizeof(m_p_run));
+ for(i = 0 ; i<COUNT(m_p_run) ; i++)
+ m_p_run[i].pmn = PMN_LAST_MSG;
}
void