forgot to commit...
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5483 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -46,6 +46,7 @@ Description Defines the authentication EMM procedure executed by the
|
|||||||
|
|
||||||
#ifdef NAS_UE
|
#ifdef NAS_UE
|
||||||
#include "usim_api.h"
|
#include "usim_api.h"
|
||||||
|
#include "secu_defs.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAS_MME
|
#ifdef NAS_MME
|
||||||
@@ -1151,26 +1152,62 @@ static int _authentication_kasme(const OctetString *autn,
|
|||||||
memcpy(key + ck->length, ik->value, ik->length);
|
memcpy(key + ck->length, ik->value, ik->length);
|
||||||
|
|
||||||
/* Compute the KDF input parameter
|
/* Compute the KDF input parameter
|
||||||
* S = FC(0x10) || SNid || 0x00 0x03 || SQN ⊕ AK || 0x00 0x06
|
* S = FC(0x10) || SNid(MCC, MNC) || 0x00 0x03 || SQN ⊕ AK || 0x00 0x06
|
||||||
*/
|
*/
|
||||||
UInt8_t input[kasme->length];
|
UInt8_t input[kasme->length];
|
||||||
UInt16_t length;
|
UInt16_t length;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
int size_of_length = sizeof(length);
|
int size_of_length = sizeof(length);
|
||||||
|
|
||||||
|
// FC
|
||||||
input[offset] = 0x10;
|
input[offset] = 0x10;
|
||||||
offset += 1;
|
offset += 1;
|
||||||
length = AUTH_SNID_SIZE;
|
|
||||||
|
// P0=SN id
|
||||||
|
length = AUTH_SNID_SIZE;
|
||||||
memcpy(input + offset, plmn, length);
|
memcpy(input + offset, plmn, length);
|
||||||
|
LOG_TRACE(INFO,"EMM-PROC _authentication_kasme P0 MCC,MNC %02X %02X %02X",
|
||||||
|
input[offset],
|
||||||
|
input[offset+1],
|
||||||
|
input[offset+2]);
|
||||||
offset += length;
|
offset += length;
|
||||||
|
// L0=SN id length
|
||||||
memcpy(input + offset, &length, size_of_length);
|
memcpy(input + offset, &length, size_of_length);
|
||||||
offset += size_of_length;
|
offset += size_of_length;
|
||||||
|
|
||||||
|
// P1=Authentication token
|
||||||
length = AUTH_SQN_SIZE;
|
length = AUTH_SQN_SIZE;
|
||||||
memcpy(input + offset, autn, length);
|
memcpy(input + offset, autn, length);
|
||||||
offset += length;
|
offset += length;
|
||||||
|
// L1
|
||||||
memcpy(input + offset, &length, size_of_length);
|
memcpy(input + offset, &length, size_of_length);
|
||||||
|
offset += size_of_length;
|
||||||
|
|
||||||
/* TODO !!! Compute the Kasme key */
|
/* TODO !!! Compute the Kasme key */
|
||||||
// todo_hmac_256(key, input, kasme->value);
|
// todo_hmac_256(key, input, kasme->value);
|
||||||
|
kdf(input,
|
||||||
|
offset,
|
||||||
|
key,
|
||||||
|
ck->length + ik->length , /*key_length*/
|
||||||
|
&kasme->value,
|
||||||
|
kasme->length);
|
||||||
|
|
||||||
|
LOG_TRACE(INFO,"EMM-PROC CK (l=%d)", ck->length);
|
||||||
|
LOG_TRACE(INFO,"EMM-PROC IK (l=%d)", ik->length);
|
||||||
|
|
||||||
|
LOG_TRACE(INFO,"EMM-PROC KASME (l=%d)%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||||
|
"%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||||
|
"%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||||
|
"%02X%02X%02X%02X%02X%02X%02X%02X",
|
||||||
|
kasme->length,
|
||||||
|
kasme->value[0],kasme->value[1],kasme->value[2],kasme->value[3],
|
||||||
|
kasme->value[4],kasme->value[5],kasme->value[6],kasme->value[7],
|
||||||
|
kasme->value[8],kasme->value[9],kasme->value[10],kasme->value[11],
|
||||||
|
kasme->value[12],kasme->value[13],kasme->value[14],kasme->value[15],
|
||||||
|
kasme->value[16],kasme->value[17],kasme->value[18],kasme->value[19],
|
||||||
|
kasme->value[20],kasme->value[21],kasme->value[22],kasme->value[23],
|
||||||
|
kasme->value[24],kasme->value[25],kasme->value[26],kasme->value[27],
|
||||||
|
kasme->value[28],kasme->value[29],kasme->value[30],kasme->value[31]);
|
||||||
|
|
||||||
LOG_FUNC_RETURN (RETURNok);
|
LOG_FUNC_RETURN (RETURNok);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user