Adding OPc option to security functions.

master
Pedro Alvarez 7 years ago
parent 1766e11076
commit 0eeb70bede

@ -122,6 +122,13 @@ typedef enum{
static const char liblte_security_integrity_algorithm_id_text[LIBLTE_SECURITY_INTEGRITY_ALGORITHM_ID_N_ITEMS][20] = {"EIA0",
"128-EIA1",
"128-EIA2"};
typedef enum
{
AUTH_OP,
AUTH_OPC
}AUTH_OPERATOR_CODE_TYPE;
// Structs
// Functions
LIBLTE_ERROR_ENUM liblte_security_generate_k_nas(uint8 *k_asme,
@ -278,6 +285,7 @@ LIBLTE_ERROR_ENUM liblte_security_decryption_eea2(uint8 *key,
// Structs
// Functions
LIBLTE_ERROR_ENUM liblte_security_milenage_f1(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *sqn,
@ -299,6 +307,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f1(uint8 *k,
// Structs
// Functions
LIBLTE_ERROR_ENUM liblte_security_milenage_f1_star(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *sqn,
@ -320,6 +329,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f1_star(uint8 *k,
// Structs
// Functions
LIBLTE_ERROR_ENUM liblte_security_milenage_f2345(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *res,
@ -341,6 +351,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f2345(uint8 *k,
// Structs
// Functions
LIBLTE_ERROR_ENUM liblte_security_milenage_f5_star(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *ak);

@ -33,7 +33,7 @@
#include "srslte/common/common.h"
#include "srslte/common/liblte_security.h"
#define SECURITY_DIRECTION_UPLINK 0
#define SECURITY_DIRECTION_DOWNLINK 1
@ -58,12 +58,6 @@ typedef enum{
static const char integrity_algorithm_id_text[INTEGRITY_ALGORITHM_ID_N_ITEMS][20] = {"EIA0",
"128-EIA1",
"128-EIA2"};
typedef enum
{
AUTH_OP,
AUTH_OPC
} AUTH_OPERATOR_CODE_TYPE;
/******************************************************************************
* Key Generation
*****************************************************************************/

@ -1099,6 +1099,7 @@ LIBLTE_ERROR_ENUM liblte_security_decryption_eea2(uint8 *key,
Document Reference: 35.206 v10.0.0 Annex 3
*********************************************************************/
LIBLTE_ERROR_ENUM liblte_security_milenage_f1(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *sqn,
@ -1188,6 +1189,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f1(uint8 *k,
Document Reference: 35.206 v10.0.0 Annex 3
*********************************************************************/
LIBLTE_ERROR_ENUM liblte_security_milenage_f1_star(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *sqn,
@ -1277,6 +1279,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f1_star(uint8 *k,
Document Reference: 35.206 v10.0.0 Annex 3
*********************************************************************/
LIBLTE_ERROR_ENUM liblte_security_milenage_f2345(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *res,
@ -1391,6 +1394,7 @@ LIBLTE_ERROR_ENUM liblte_security_milenage_f2345(uint8 *k,
Document Reference: 35.206 v10.0.0 Annex 3
*********************************************************************/
LIBLTE_ERROR_ENUM liblte_security_milenage_f5_star(uint8 *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8 *op,
uint8 *rand,
uint8 *ak)

@ -26,7 +26,6 @@
#include "srslte/common/security.h"
#include "srslte/common/liblte_security.h"
#include "srslte/common/snow_3g.h"
#ifdef HAVE_MBEDTLS
@ -231,6 +230,7 @@ uint8_t security_128_eea2(uint8_t *key,
*****************************************************************************/
uint8_t security_milenage_f1( uint8_t *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8_t *op,
uint8_t *rand,
uint8_t *sqn,
@ -238,6 +238,7 @@ uint8_t security_milenage_f1( uint8_t *k,
uint8_t *mac_a)
{
return liblte_security_milenage_f1(k,
opc_t,
op,
rand,
sqn,
@ -246,6 +247,7 @@ uint8_t security_milenage_f1( uint8_t *k,
}
uint8_t security_milenage_f1_star( uint8_t *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8_t *op,
uint8_t *rand,
uint8_t *sqn,
@ -253,6 +255,7 @@ uint8_t security_milenage_f1_star( uint8_t *k,
uint8_t *mac_s)
{
return liblte_security_milenage_f1_star(k,
opc_t,
op,
rand,
sqn,
@ -261,6 +264,7 @@ uint8_t security_milenage_f1_star( uint8_t *k,
}
uint8_t security_milenage_f2345( uint8_t *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8_t *op,
uint8_t *rand,
uint8_t *res,
@ -269,6 +273,7 @@ uint8_t security_milenage_f2345( uint8_t *k,
uint8_t *ak)
{
return liblte_security_milenage_f2345(k,
opc_t,
op,
rand,
res,
@ -278,11 +283,13 @@ uint8_t security_milenage_f2345( uint8_t *k,
}
uint8_t security_milenage_f5_star( uint8_t *k,
AUTH_OPERATOR_CODE_TYPE opc_t,
uint8_t *op,
uint8_t *rand,
uint8_t *ak)
{
return liblte_security_milenage_f5_star(k,
opc_t,
op,
rand,
ak);

@ -49,8 +49,6 @@ void arrprint(uint8_t const * const a, uint32 len) {
/*
* Functions
*/
void test_set_2()
{
LIBLTE_ERROR_ENUM err_lte = LIBLTE_ERROR_INVALID_INPUTS;
@ -61,17 +59,18 @@ void test_set_2()
uint8_t sqn[] = {0xff, 0x9b, 0xb4, 0xd0, 0xb6, 0x07};
uint8_t amf[] = {0xb9, 0xb9};
uint8_t op[] = {0xcd, 0xc2, 0x02, 0xd5, 0x12, 0x3e, 0x20, 0xf6, 0x2b, 0x6d, 0x67, 0x6a, 0xc7, 0x2c, 0xb3, 0x18};
// f1
// f1
uint8_t mac_o[8];
err_lte = liblte_security_milenage_f1(k,
AUTH_OP,
op,
rand,
sqn,
amf,
mac_o);
assert(err_lte == LIBLTE_SUCCESS);
assert(err_lte == LIBLTE_SUCCESS);
arrprint(mac_o, sizeof(mac_o));
uint8_t mac_a[] = {0x4a, 0x9f, 0xfa, 0xc3, 0x54, 0xdf, 0xaf, 0xb3};
@ -81,9 +80,9 @@ void test_set_2()
assert(err_cmp == 0);
// f1 star
uint8_t mac_so[8];
err_lte = liblte_security_milenage_f1_star(k,
AUTH_OP,
op,
rand,
sqn,
@ -106,6 +105,7 @@ void test_set_2()
uint8_t ak_o[6];
err_lte = liblte_security_milenage_f2345(k,
AUTH_OP,
op,
rand,
res_o,
@ -145,7 +145,11 @@ void test_set_2()
// f star
uint8_t ak_star_o[6];
err_lte = liblte_security_milenage_f5_star(k, op, rand, ak_star_o);
err_lte = liblte_security_milenage_f5_star(k,
AUTH_OP,
op,
rand,
ak_star_o);
assert(err_lte == LIBLTE_SUCCESS);
arrprint(ak_star_o, sizeof(ak_star_o));
@ -158,10 +162,10 @@ void test_set_2()
/*
Own test sets
*/
int main(int argc, char * argv[]) {
/*
test_set_2();
/*
test_set_3();
test_set_4();
test_set_5();

@ -109,6 +109,7 @@ private:
// User data
auth_algo_t auth_algo;
uint8_t amf[2]; // 3GPP 33.102 v10.0.0 Annex H
AUTH_OPERATOR_CODE_TYPE opc_t;
uint8_t op[16];
uint64_t imsi;
uint64_t imei;

@ -341,6 +341,7 @@ auth_result_t usim::gen_auth_res_milenage(uint8_t *rand,
// Use RAND and K to compute RES, CK, IK and AK
security_milenage_f2345( k,
opc_t,
op,
rand,
res,
@ -363,6 +364,7 @@ auth_result_t usim::gen_auth_res_milenage(uint8_t *rand,
// Generate MAC
security_milenage_f1( k,
opc_t,
op,
rand,
sqn,

Loading…
Cancel
Save