From b489fa4b46efb5f2c02edc10d4a5ec3855156d8f Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Fri, 3 Mar 2017 22:05:05 +0900 Subject: [PATCH] update it --- lib/core/include/core_lib.h | 3 ++- lib/core/src/misc.c | 6 +++--- lib/core/test/testmisc.c | 24 ++++++++++++++++++++---- lib/s6a/hss_main.c | 6 +++--- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/lib/core/include/core_lib.h b/lib/core/include/core_lib.h index 1bd8c8362..7f465e011 100644 --- a/lib/core/include/core_lib.h +++ b/lib/core/include/core_lib.h @@ -88,7 +88,8 @@ CORE_DECLARE(status_t) core_generate_random_bytes( unsigned char *buf, int length); CORE_DECLARE(void *) core_ascii_to_hex(char *in, int len, char *out); -CORE_DECLARE(void *) core_uint64_to_buffer(c_uint64_t num, c_uint8_t *array); +CORE_DECLARE(void *) core_int_to_buffer(c_uint64_t num, + c_uint8_t *buffer, int size); /** @} */ diff --git a/lib/core/src/misc.c b/lib/core/src/misc.c index 0bd2cf8d6..25aace7f9 100644 --- a/lib/core/src/misc.c +++ b/lib/core/src/misc.c @@ -14,11 +14,11 @@ void *core_ascii_to_hex(char *in, int len, char *out) return out; } -void *core_uint64_to_buffer(c_uint64_t num, c_uint8_t *buffer) +void *core_int_to_buffer(c_uint64_t num, c_uint8_t *buffer, int size) { int i; - for (i = 0; i < 8; i++) - buffer[i] = (num >> (8-1-i) * 8) & 0xff; + for (i = 0; i < size; i++) + buffer[i] = (num >> ((size-1-i) * 8)) & 0xff; return buffer; } diff --git a/lib/core/test/testmisc.c b/lib/core/test/testmisc.c index bd7ed01bb..2b1f99063 100644 --- a/lib/core/test/testmisc.c +++ b/lib/core/test/testmisc.c @@ -35,11 +35,27 @@ static void misc_test2(abts_case *tc, void *data) static void misc_test3(abts_case *tc, void *data) { - c_uint64_t num = 0x0123456789abcdef; - c_uint8_t buf[8]; - c_uint8_t tmp[8] = "\x01\x23\x45\x67\x89\xab\xcd\xef"; +#define MAX_SIZE 8 + c_uint8_t tmp[MAX_SIZE] = "\x01\x23\x45\x67\x89\xab\xcd\xef"; + c_uint8_t buf[MAX_SIZE]; + c_uint64_t num; - ABTS_TRUE(tc, memcmp(tmp, core_uint64_to_buffer(num, buf), 8) == 0); + num = 0x0123456789abcdef; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 8), 8) == 0); + num = 0x0123456789abcd; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 7), 7) == 0); + num = 0x0123456789ab; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 6), 6) == 0); + num = 0x0123456789; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 5), 5) == 0); + num = 0x01234567; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 4), 4) == 0); + num = 0x012345; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 3), 3) == 0); + num = 0x0123; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 2), 2) == 0); + num = 0x01; + ABTS_TRUE(tc, memcmp(tmp, core_int_to_buffer(num, buf, 1), 1) == 0); } abts_suite *testmisc(abts_suite *suite) diff --git a/lib/s6a/hss_main.c b/lib/s6a/hss_main.c index c1701923d..646693143 100644 --- a/lib/s6a/hss_main.c +++ b/lib/s6a/hss_main.c @@ -38,7 +38,7 @@ static int hss_air_cb( struct msg **msg, struct avp *avp, union avp_value val; ue_ctx_t *ue = NULL; - c_uint8_t buffer[8]; + c_uint8_t sqn[MAX_SQN_LEN]; c_uint8_t autn[MAX_KEY_LEN]; c_uint8_t ik[MAX_KEY_LEN]; c_uint8_t ck[MAX_KEY_LEN]; @@ -75,9 +75,9 @@ static int hss_air_cb( struct msg **msg, struct avp *avp, core_generate_random_bytes(ue->rand, MAX_KEY_LEN); milenage_opc(ue->k, ue->op, ue->opc); milenage_generate(ue->opc, ue->amf, ue->k, - core_uint64_to_buffer(ue->sqn, buffer), ue->rand, + core_int_to_buffer(ue->sqn, sqn, MAX_SQN_LEN), ue->rand, autn, ik, ck, ak, xres, &xres_len); - derive_kasme(ck, ik, hdr->avp_value->os.data, buffer, ak, kasme); + derive_kasme(ck, ik, hdr->avp_value->os.data, sqn, ak, kasme); ue->sqn = (ue->sqn + 32) & 0x7ffffffffff;