mirror of
https://gitea.osmocom.org/sim-card/pysim.git
synced 2026-03-16 18:38:32 +03:00
We're creating a 'pyosmocom' pypi module which contains a number of core Osmocom libraries / interfaces that are not specific to SIM card stuff contained here. The main modules moved in this initial step are pySim.tlv, pySim.utils and pySim.construct. utils is split, not all of the contents is unrelated to SIM Cards. The other two are moved completely. Change-Id: I4b63e45bcb0c9ba2424dacf85e0222aee735f411
44 lines
1.3 KiB
Python
Executable File
44 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# A more useful verion of the 'unber' tool provided with asn1c:
|
|
# Give a hierarchical decode of BER/DER-encoded ASN.1 TLVs
|
|
|
|
import sys
|
|
import argparse
|
|
|
|
from osmocom.utils import b2h, h2b
|
|
from osmocom.tlv import bertlv_parse_one, bertlv_encode_tag
|
|
|
|
def process_one_level(content: bytes, indent: int):
|
|
remainder = content
|
|
while len(remainder):
|
|
tdict, l, v, remainder = bertlv_parse_one(remainder)
|
|
#print(tdict)
|
|
rawtag = bertlv_encode_tag(tdict)
|
|
if tdict['constructed']:
|
|
print("%s%s l=%d" % (indent*" ", b2h(rawtag), l))
|
|
process_one_level(v, indent + 1)
|
|
else:
|
|
print("%s%s l=%d %s" % (indent*" ", b2h(rawtag), l, b2h(v)))
|
|
|
|
|
|
option_parser = argparse.ArgumentParser(description='BER/DER data dumper')
|
|
group = option_parser.add_mutually_exclusive_group(required=True)
|
|
group.add_argument('--file', help='Input file')
|
|
group.add_argument('--hex', help='Input hexstring')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
opts = option_parser.parse_args()
|
|
|
|
if opts.file:
|
|
with open(opts.file, 'rb') as f:
|
|
content = f.read()
|
|
elif opts.hex:
|
|
content = h2b(opts.hex)
|
|
else:
|
|
# avoid pylint "(possibly-used-before-assignment)" below
|
|
sys.exit(2)
|
|
|
|
process_one_level(content, 0)
|