diff --git a/CMakeLists.txt b/CMakeLists.txt index bef6278246..eb6707c418 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -300,10 +300,6 @@ target_link_libraries(lte_rrc PRIVATE nr_rrc) add_library(nr_rrc ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c) target_link_libraries(nr_rrc PUBLIC asn1_nr_rrc asn1_lte_rrc) - -# S1AP and NGAP need crypt library -pkg_check_modules(libcrypt REQUIRED libcrypt) - # S1AP ############## set(S1AP_DIR ${OPENAIR3_DIR}/S1AP) diff --git a/openair3/NGAP/ngap_gNB.c b/openair3/NGAP/ngap_gNB.c index f877e9d4ba..09dc9321a1 100644 --- a/openair3/NGAP/ngap_gNB.c +++ b/openair3/NGAP/ngap_gNB.c @@ -33,7 +33,7 @@ #include #include #include -#include +#include "openair3/SECU/kdf.h" #include "tree.h" #include "queue.h" @@ -71,17 +71,20 @@ void ngap_gNB_handle_register_gNB(instance_t instance, ngap_register_gnb_req_t * void ngap_gNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp); -uint32_t ngap_generate_gNB_id(void) { - char *out; - char hostname[50]; - int ret; - uint32_t gNB_id; +uint32_t ngap_generate_gNB_id(void) +{ /* Retrieve the host name */ - ret = gethostname(hostname, sizeof(hostname)); + char hostname[32] = {0}; + int const ret = gethostname(hostname, sizeof(hostname)); DevAssert(ret == 0); - out = crypt(hostname, "eurecom"); - DevAssert(out != NULL); - gNB_id = ((out[0] << 24) | (out[1] << 16) | (out[2] << 8) | out[3]); + + uint8_t key[32] = {"eurecom"}; + byte_array_t data = {.len = 32, .buf = (uint8_t *)hostname}; + + uint8_t out[32] = {0}; + kdf(key, data, 32, out); + + uint32_t const gNB_id = ((out[0] << 24) | (out[1] << 16) | (out[2] << 8) | out[3]); return gNB_id; } diff --git a/openair3/S1AP/s1ap_eNB.c b/openair3/S1AP/s1ap_eNB.c index 700148f05e..2baf315599 100644 --- a/openair3/S1AP/s1ap_eNB.c +++ b/openair3/S1AP/s1ap_eNB.c @@ -32,7 +32,7 @@ #include #include #include -#include +#include "openair3/SECU/kdf.h" #include "tree.h" #include "queue.h" @@ -108,17 +108,20 @@ int s1ap_timer_remove(long timer_id) return ret; } -uint32_t s1ap_generate_eNB_id(void) { - char *out; - char hostname[50]; - int ret; - uint32_t eNB_id; +uint32_t s1ap_generate_eNB_id(void) +{ /* Retrieve the host name */ - ret = gethostname(hostname, sizeof(hostname)); + char hostname[32] = {0}; + int const ret = gethostname(hostname, sizeof(hostname)); DevAssert(ret == 0); - out = crypt(hostname, "eurecom"); - DevAssert(out != NULL); - eNB_id = ((out[0] << 24) | (out[1] << 16) | (out[2] << 8) | out[3]); + + uint8_t key[32] = {"eurecom"}; + byte_array_t data = {.len = 32, .buf = (uint8_t *)hostname}; + + uint8_t out[32] = {0}; + kdf(key, data, 32, out); + + uint32_t const eNB_id = ((out[0] << 24) | (out[1] << 16) | (out[2] << 8) | out[3]); return eNB_id; } diff --git a/openair3/SECU/kdf.h b/openair3/SECU/kdf.h index 9567296bd2..ad8a842fad 100644 --- a/openair3/SECU/kdf.h +++ b/openair3/SECU/kdf.h @@ -24,7 +24,7 @@ #include #include -#include "byte_array.h" +#include "common/utils/ds/byte_array.h" void kdf(const uint8_t key[32], byte_array_t data, size_t len, uint8_t out[len]);