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

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

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

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

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

@ -109,6 +109,7 @@ private:
// User data // User data
auth_algo_t auth_algo; auth_algo_t auth_algo;
uint8_t amf[2]; // 3GPP 33.102 v10.0.0 Annex H uint8_t amf[2]; // 3GPP 33.102 v10.0.0 Annex H
AUTH_OPERATOR_CODE_TYPE opc_t;
uint8_t op[16]; uint8_t op[16];
uint64_t imsi; uint64_t imsi;
uint64_t imei; 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 // Use RAND and K to compute RES, CK, IK and AK
security_milenage_f2345( k, security_milenage_f2345( k,
opc_t,
op, op,
rand, rand,
res, res,
@ -363,6 +364,7 @@ auth_result_t usim::gen_auth_res_milenage(uint8_t *rand,
// Generate MAC // Generate MAC
security_milenage_f1( k, security_milenage_f1( k,
opc_t,
op, op,
rand, rand,
sqn, sqn,

Loading…
Cancel
Save