mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-03 21:43:25 +00:00 
			
		
		
		
	o Generate the private key as below.
   $ openssl genpkey -algorithm X25519 -out /etc/open5gs/hnet/curve25519-1.key
   $ openssl ecparam -name prime256v1 -genkey -conv_form compressed -out /etc/open5gs/hnet/secp256r1-2.key
 o The private and public keys can be viewed with the command.
   The public key is used when creating the SIM.
   $ openssl pkey -in /etc/open5gs/hnet/curve25519-1.key -text
   $ openssl ec -in /etc/open5gs/hnet/secp256r1-2.key -conv_form compressed -text
In ausf/udm.yaml
 hnet:
    o Home network public key identifier(PKI) value : 1
      Protection scheme identifier : ECIES scheme profile A
    - id: 1
      scheme: 1
      key: /etc/open5gs/hnet/curve25519-1.key
    o Home network public key identifier(PKI) value : 2
      Protection scheme identifier : ECIES scheme profile B
    - id: 2
      scheme: 2
      key: /etc/open5gs/hnet/secp256r1-2.key
    o Home network public key identifier(PKI) value : 3
      Protection scheme identifier : ECIES scheme profile A
    - id: 3
      scheme: 1
      key: /etc/open5gs/hnet/curve25519-1.key
    o Home network public key identifier(PKI) value : 4
      Protection scheme identifier : ECIES scheme profile B
    - id: 4
      scheme: 2
      key: /etc/open5gs/hnet/secp256r1-2.key
Related to #1779
		
	
		
			
				
	
	
		
			328 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
 | 
						|
 | 
						|
# This file is part of Open5GS.
 | 
						|
 | 
						|
# This program is free software: you can redistribute it and/or modify
 | 
						|
# it under the terms of the GNU Affero General Public License as published by
 | 
						|
# the Free Software Foundation, either version 3 of the License, or
 | 
						|
# (at your option) any later version.
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# You should have received a copy of the GNU General Public License
 | 
						|
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
libcore_conf = configuration_data()
 | 
						|
 | 
						|
libcore_headers = ('''
 | 
						|
    arpa/inet.h
 | 
						|
    ctype.h
 | 
						|
    errno.h
 | 
						|
    execinfo.h
 | 
						|
    fcntl.h
 | 
						|
    ifaddrs.h
 | 
						|
    netdb.h
 | 
						|
    pthread.h
 | 
						|
    signal.h
 | 
						|
    stdarg.h
 | 
						|
    stddef.h
 | 
						|
    stdio.h
 | 
						|
    stdint.h
 | 
						|
    stdbool.h
 | 
						|
    stdlib.h
 | 
						|
    string.h
 | 
						|
    strings.h
 | 
						|
    time.h
 | 
						|
    sys/time.h
 | 
						|
    unistd.h
 | 
						|
    net/if.h
 | 
						|
    netinet/in.h
 | 
						|
    netinet/in_systm.h
 | 
						|
    netinet/udp.h
 | 
						|
    netinet/tcp.h
 | 
						|
    sys/ioctl.h
 | 
						|
    sys/param.h
 | 
						|
    sys/random.h
 | 
						|
    sys/socket.h
 | 
						|
    sys/stat.h
 | 
						|
    limits.h
 | 
						|
    sys/syslimits.h
 | 
						|
    sys/types.h
 | 
						|
    sys/wait.h
 | 
						|
    sys/uio.h
 | 
						|
'''.split())
 | 
						|
 | 
						|
foreach h : libcore_headers
 | 
						|
    if cc.has_header(h)
 | 
						|
        define = 'HAVE_' + h.underscorify().to_upper()
 | 
						|
        libcore_conf.set(define, 1)
 | 
						|
    endif
 | 
						|
endforeach
 | 
						|
 | 
						|
libcore_functions = ('''
 | 
						|
    arc4random
 | 
						|
    arc4random_buf
 | 
						|
    getrandom
 | 
						|
    localtime_r
 | 
						|
    getifaddrs
 | 
						|
    getenv
 | 
						|
    putenv
 | 
						|
    setenv
 | 
						|
    unsetenv
 | 
						|
    strerror_r
 | 
						|
    sigaction
 | 
						|
    sigwait
 | 
						|
    sigsuspend
 | 
						|
    eventfd
 | 
						|
    kqueue
 | 
						|
    epoll_ctl
 | 
						|
'''.split())
 | 
						|
 | 
						|
foreach f : libcore_functions
 | 
						|
    if cc.has_function(f)
 | 
						|
        define = 'HAVE_' + f.underscorify().to_upper()
 | 
						|
        libcore_conf.set(define, 1)
 | 
						|
        set_variable('have_func_' + f, true)
 | 
						|
    else
 | 
						|
        set_variable('have_func_' + f, false)
 | 
						|
    endif
 | 
						|
endforeach
 | 
						|
 | 
						|
# Determination of thread implementation
 | 
						|
threads = []
 | 
						|
if host_system == 'windows' and not get_option('force_posix_threads')
 | 
						|
else
 | 
						|
    threads = dependency('threads')
 | 
						|
    if cc.has_header_symbol('pthread.h', 'pthread_barrier_wait')
 | 
						|
        libcore_conf.set('HAVE_PTHREAD_BAR', 1)
 | 
						|
    endif
 | 
						|
endif
 | 
						|
 | 
						|
# Check for sys_syslist
 | 
						|
if cc.has_header_symbol('signal.h', 'sys_siglist')
 | 
						|
    libcore_conf.set('HAVE_DECL_SYS_SIGLIST', 1,
 | 
						|
            description: 'Define to 1 if you have the declaration of \`sys_siglist\', and to 0 if you don\'t.')
 | 
						|
endif
 | 
						|
 | 
						|
# Check whether strerror_r returns char *
 | 
						|
if have_func_strerror_r
 | 
						|
    if cc.compiles('''#define _GNU_SOURCE
 | 
						|
                      #include <string.h>
 | 
						|
                      int func (void) {
 | 
						|
                          char error_string[256];
 | 
						|
                          char *ptr = strerror_r (-2, error_string, 256);
 | 
						|
                          char c = *strerror_r (-2, error_string, 256);
 | 
						|
                          return c != 0 && ptr != (void*) 0L;
 | 
						|
                      }''', name : 'strerror_r() returns char *')
 | 
						|
        libcore_conf.set('STRERROR_R_CHAR_P', 1,
 | 
						|
                description: 'Defined if strerror_r returns char *')
 | 
						|
    endif
 | 
						|
endif
 | 
						|
 | 
						|
# Check for backtrace()
 | 
						|
libexecinfo = cc.find_library('execinfo', required : false)
 | 
						|
if libcore_conf.has('HAVE_EXECINFO_H')
 | 
						|
    if cc.has_function('backtrace', prefix : '#include <execinfo.h>')
 | 
						|
        libcore_conf.set('HAVE_BACKTRACE', 1)
 | 
						|
    elif libexecinfo.found() and cc.has_function('backtrace',
 | 
						|
                                            prefix : '#include <execinfo.h>',
 | 
						|
                                            dependencies : libexecinfo)
 | 
						|
        libcore_conf.set('HAVE_BACKTRACE', 1)
 | 
						|
    endif
 | 
						|
endif    
 | 
						|
 | 
						|
# Check for clock_gettime()
 | 
						|
clock_gettime_test_code = '''
 | 
						|
    #include <time.h>
 | 
						|
    struct timespec t;
 | 
						|
    int main (int argc, char ** argv) {
 | 
						|
        return clock_gettime(CLOCK_REALTIME, &t);
 | 
						|
    }'''
 | 
						|
librt = []
 | 
						|
if cc.links(clock_gettime_test_code, name : 'clock_gettime()')
 | 
						|
    libcore_conf.set('HAVE_CLOCK_GETTIME', 1)
 | 
						|
elif cc.links(clock_gettime_test_code, args : '-lrt', name : 'clock_gettime() in librt')
 | 
						|
    libcore_conf.set('HAVE_CLOCK_GETTIME', 1)
 | 
						|
    librt = cc.find_library('rt')
 | 
						|
elif cc.links(clock_gettime_test_code, args : '-lposix4', name : 'clock_gettime() in libposix4')
 | 
						|
    libcore_conf.set('HAVE_CLOCK_GETTIME', 1)
 | 
						|
    librt = cc.find_library('posix4')
 | 
						|
else
 | 
						|
    error('Could not find clock_gettime()')
 | 
						|
endif
 | 
						|
 | 
						|
# Check for /dev/urandom
 | 
						|
if meson.version().version_compare('>=0.47.0')
 | 
						|
     dev_urandom = run_command('[', '-c', '/dev/urandom', ']', check: false)
 | 
						|
else
 | 
						|
     dev_urandom = run_command('[', '-c', '/dev/urandom', ']')
 | 
						|
endif
 | 
						|
if dev_urandom.returncode() == 0
 | 
						|
    libcore_conf.set_quoted('OGS_DEV_RANDOM', '/dev/urandom',
 | 
						|
                    description: 'a suitable file to read random data from')
 | 
						|
endif
 | 
						|
 | 
						|
# Check for eventfd(2)
 | 
						|
if cc.links('''#include <sys/eventfd.h>
 | 
						|
               #include <unistd.h>
 | 
						|
               int main (int argc, char ** argv) {
 | 
						|
                   eventfd (0, EFD_CLOEXEC);
 | 
						|
                   return 0;
 | 
						|
               }''', name : 'eventfd(2) system call')
 | 
						|
    libcore_conf.set('HAVE_EVENTFD', 1)
 | 
						|
endif
 | 
						|
 | 
						|
# Check for epoll
 | 
						|
if have_func_epoll_ctl
 | 
						|
    libcore_conf.set('HAVE_EPOLL', 1, description: 'Defined if your system supports the epoll system calls')
 | 
						|
endif
 | 
						|
 | 
						|
# Check for socket
 | 
						|
libsocket = cc.find_library('socket', required : false)
 | 
						|
if host_system != 'windows'
 | 
						|
    # socket()
 | 
						|
    socket_test = '''#include <sys/types.h>
 | 
						|
                     #include <sys/socket.h>
 | 
						|
                     int main (int argc, char ** argv) {
 | 
						|
                         return socket(1, 2, 3);
 | 
						|
                     }'''
 | 
						|
    if cc.links(socket_test, name : 'socket()')
 | 
						|
    elif libsocket.found() and cc.links(socket_test,
 | 
						|
                                        dependencies : libsocket,
 | 
						|
                                        name : 'socket() in -lsocket')
 | 
						|
    else
 | 
						|
        error('Could not find socket()')
 | 
						|
    endif
 | 
						|
endif
 | 
						|
 | 
						|
configure_file(output : 'core-config-private.h', configuration : libcore_conf)
 | 
						|
 | 
						|
ogs_libcore_conf = configuration_data()
 | 
						|
 | 
						|
ogs_libcore_conf.set('_GNU_SOURCE', true)
 | 
						|
ogs_libcore_conf.set('OGS_BIG_ENDIAN', 4321)
 | 
						|
ogs_libcore_conf.set('OGS_LITTLE_ENDIAN', 1234)
 | 
						|
 | 
						|
if host_machine.endian() == 'big'
 | 
						|
    ogs_libcore_conf.set('OGS_BYTE_ORDER', 'OGS_BIG_ENDIAN')
 | 
						|
else
 | 
						|
    ogs_libcore_conf.set('OGS_BYTE_ORDER', 'OGS_LITTLE_ENDIAN')
 | 
						|
endif
 | 
						|
 | 
						|
if host_system == 'windows'
 | 
						|
ogs_libcore_conf.set('OGS_DIR_SEPARATOR', '\'\\\\\'')
 | 
						|
ogs_libcore_conf.set_quoted('OGS_DIR_SEPARATOR_S', '\\\\')
 | 
						|
else
 | 
						|
ogs_libcore_conf.set('OGS_DIR_SEPARATOR', '\'/\'')
 | 
						|
ogs_libcore_conf.set_quoted('OGS_DIR_SEPARATOR_S', '/')
 | 
						|
endif
 | 
						|
 | 
						|
configure_file(output : 'core-config.h', configuration : ogs_libcore_conf)
 | 
						|
 | 
						|
libcore_sources = files('''
 | 
						|
    ogs-core.h
 | 
						|
 | 
						|
    ogs-compat.h
 | 
						|
    ogs-macros.h
 | 
						|
    ogs-pool.h
 | 
						|
    ogs-list.h
 | 
						|
    ogs-abort.h
 | 
						|
    ogs-errno.h
 | 
						|
    ogs-strings.h
 | 
						|
    ogs-time.h
 | 
						|
    ogs-conv.h
 | 
						|
    ogs-log.h
 | 
						|
    ogs-pkbuf.h
 | 
						|
    ogs-memory.h
 | 
						|
    ogs-rbtree.h
 | 
						|
    ogs-timer.h
 | 
						|
    ogs-rand.h
 | 
						|
    ogs-uuid.h
 | 
						|
    ogs-thread.h
 | 
						|
    ogs-signal.h
 | 
						|
    ogs-process.h
 | 
						|
    ogs-sockaddr.h
 | 
						|
    ogs-socket.h
 | 
						|
    ogs-sockopt.h
 | 
						|
    ogs-sockpair.h
 | 
						|
    ogs-socknode.h
 | 
						|
    ogs-udp.h
 | 
						|
    ogs-tcp.h
 | 
						|
    ogs-queue.h
 | 
						|
    ogs-poll.h
 | 
						|
    ogs-notify.h
 | 
						|
    ogs-tlv.h
 | 
						|
    ogs-tlv-msg.h
 | 
						|
    ogs-env.h
 | 
						|
    ogs-fsm.h
 | 
						|
    ogs-hash.h
 | 
						|
    ogs-misc.h
 | 
						|
    ogs-getopt.h
 | 
						|
    ogs-file.h
 | 
						|
    abts.h
 | 
						|
 | 
						|
    ogs-abort.c
 | 
						|
    ogs-errno.c
 | 
						|
    ogs-strings.c
 | 
						|
    ogs-time.c
 | 
						|
    ogs-conv.c
 | 
						|
    ogs-log.c
 | 
						|
    ogs-pkbuf.c
 | 
						|
    ogs-memory.c
 | 
						|
    ogs-rbtree.c
 | 
						|
    ogs-timer.c
 | 
						|
    ogs-rand.c
 | 
						|
    ogs-uuid.c
 | 
						|
    ogs-thread.c
 | 
						|
    ogs-signal.c
 | 
						|
    ogs-process.c
 | 
						|
    ogs-sockaddr.c
 | 
						|
    ogs-socket.c
 | 
						|
    ogs-sockopt.c
 | 
						|
    ogs-sockpair.c
 | 
						|
    ogs-socknode.c
 | 
						|
    ogs-udp.c
 | 
						|
    ogs-tcp.c
 | 
						|
    ogs-queue.c
 | 
						|
    ogs-select.c
 | 
						|
    ogs-poll.c
 | 
						|
    ogs-notify.c
 | 
						|
    ogs-tlv.c
 | 
						|
    ogs-tlv-msg.c
 | 
						|
    ogs-env.c
 | 
						|
    ogs-fsm.c
 | 
						|
    ogs-hash.c
 | 
						|
    ogs-misc.c
 | 
						|
    ogs-getopt.c
 | 
						|
    ogs-file.c
 | 
						|
    ogs-core.c
 | 
						|
    abts.c
 | 
						|
'''.split())
 | 
						|
 | 
						|
if have_func_epoll_ctl
 | 
						|
    libcore_sources += files('ogs-epoll.c')
 | 
						|
endif
 | 
						|
if have_func_kqueue
 | 
						|
    libcore_sources += files('ogs-kqueue.c')
 | 
						|
endif
 | 
						|
 | 
						|
libcore_inc = include_directories('.')
 | 
						|
 | 
						|
libtalloc_dep = dependency('talloc')
 | 
						|
 | 
						|
libcore = library('ogscore',
 | 
						|
    sources : libcore_sources,
 | 
						|
    version : libogslib_version,
 | 
						|
    c_args : '-DOGS_CORE_COMPILATION',
 | 
						|
    include_directories : [libcore_inc, libinc],
 | 
						|
    dependencies : [threads, librt, libexecinfo, libsocket, libtalloc_dep],
 | 
						|
    install : true)
 | 
						|
 | 
						|
libcore_dep = declare_dependency(
 | 
						|
    link_with : libcore,
 | 
						|
    include_directories : [libcore_inc, libinc],
 | 
						|
    dependencies : [threads, librt, libexecinfo, libsocket, libtalloc_dep])
 |