#!/usr/bin/env python # FIXME: use python3 once buildslaves are updated. # Convert test sets pasted from 3GPP TS 55.205 to C code. # (C) 2016 by sysmocom s.f.m.c. GmbH # # All Rights Reserved # # Author: Neels Hofmeyr # # 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import sys, os script_dir = sys.path[0] fields = ( 'Ki', 'RAND', 'OP', 'OPc', 'MIL3G-RES', 'SRES#1', 'SRES#2', 'MIL3G-CK', 'MIL3G-IK', 'Kc', ) test_sets_lines = [] test_set_lines = None for line in [l.strip() for l in open(os.path.join(script_dir, 'ts55_205_test_sets.txt'), 'r')]: if line.startswith('Test Set'): if test_set_lines: test_sets_lines.append(test_set_lines) test_set_lines = [] elif len(line) == 8: try: is_hex = int(line, 16) test_set_lines.append(line) except ValueError: pass if test_set_lines: test_sets_lines.append(test_set_lines) # Magic fixups for PDF-to-text uselessness idx = (( 0, 10, 15, 19), ( 1, 11, 16, 20), ( 2, 12, 17, 21), ( 3, 13, 18, 22), ( 4, 14), ( 5, ), ( 6, ), ( 7, 23, 26, 28), ( 8, 24, 27, 29), ( 9, 25 ), ) test_sets = [] for l in test_sets_lines: test_sets.append( [ ''.join([l[i] for i in li]) for li in idx ] ) func_templ = open(os.path.join(script_dir, 'func_template.c'), 'r').read() funcs = [] func_calls = [] nr = 0 for test_set in test_sets: nr += 1 func_name = 'test_set_%d' % nr kwargs = dict(zip(fields, test_set)) kwargs['func_name'] = func_name func_calls.append('\t%s();' % func_name) funcs.append(func_templ.format(**kwargs)) templ = open(os.path.join(script_dir, 'main_template.c')).read() code = templ.replace('FUNCTIONS', '\n'.join(funcs)).replace('FUNCTION_CALLS', '\n'.join(func_calls)) print(''' /***** DO NOT EDIT THIS FILE -- THIS CODE IS GENERATED ***** ***** by gen_ts_55_205_test_sets/pdftxt_2_c.py *****/ ''') print(code)