laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/37925?usp=email ) Change subject: pySim-trace: pySim.apdu_source.stdin_hex ...................................................................... pySim-trace: pySim.apdu_source.stdin_hex This introduces an "APDU source" for pySim-trace which enables the decoding of APDUs that are copy+pasted from elsewhere, for example APDU logs in text form created by proprietary tools, or to decode personalization scripts or the like. Change-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33 --- M pySim-trace.py A pySim/apdu_source/stdin_hex.py 2 files changed, 46 insertions(+), 0 deletions(-) Approvals: dexter: Looks good to me, approved; Verified laforge: Looks good to me, approved Jenkins Builder: Verified diff --git a/pySim-trace.py b/pySim-trace.py index 09e9584..0aa1e9c 100755 --- a/pySim-trace.py +++ b/pySim-trace.py @@ -23,6 +23,7 @@ from pySim.apdu_source.pyshark_rspro import PysharkRsproPcap, PysharkRsproLive from pySim.apdu_source.pyshark_gsmtap import PysharkGsmtapPcap from pySim.apdu_source.tca_loader_log import TcaLoaderLogApduSource +from pySim.apdu_source.stdin_hex import StdinHexApduSource from pySim.apdu.ts_102_221 import UiccSelect, UiccStatus @@ -190,6 +191,10 @@ parser_tcaloader_log.add_argument('-f', '--log-file', required=True, help='Name of the log file to be read') +parser_stdin_hex = subparsers.add_parser('stdin-hex', help=""" + Read APDUs as hex-string from stdin.""") + + if __name__ == '__main__': opts = option_parser.parse_args() @@ -205,6 +210,8 @@ s = PysharkGsmtapPcap(opts.pcap_file) elif opts.source == 'tca-loader-log': s = TcaLoaderLogApduSource(opts.log_file) + elif opts.source == 'stdin-hex': + s = StdinHexApduSource() else: raise ValueError("unsupported source %s", opts.source) diff --git a/pySim/apdu_source/stdin_hex.py b/pySim/apdu_source/stdin_hex.py new file mode 100644 index 0000000..67eeb7d --- /dev/null +++ b/pySim/apdu_source/stdin_hex.py @@ -0,0 +1,39 @@ +# coding=utf-8 + +# (C) 2024 by Harald Welte <laforge@osmocom.org> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 <http://www.gnu.org/licenses/>. + + +from pySim.utils import h2b + +from pySim.apdu.ts_102_221 import ApduCommands as UiccApduCommands +from pySim.apdu.ts_102_222 import ApduCommands as UiccAdmApduCommands +from pySim.apdu.ts_31_102 import ApduCommands as UsimApduCommands +from pySim.apdu.global_platform import ApduCommands as GpApduCommands + +from . import ApduSource, PacketType, CardReset + +ApduCommands = UiccApduCommands + UiccAdmApduCommands + UsimApduCommands + GpApduCommands + +class StdinHexApduSource(ApduSource): + """ApduSource for reading apdu hex-strings from stdin.""" + + def read_packet(self) -> PacketType: + while True: + command = input("C-APDU >") + if len(command) == 0: + continue + response = '9000' + return ApduCommands.parse_cmd_bytes(h2b(command) + h2b(response)) -- To view, visit https://gerrit.osmocom.org/c/pysim/+/37925?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33 Gerrit-Change-Number: 37925 Gerrit-PatchSet: 8 Gerrit-Owner: laforge <laforge@osmocom.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: dexter <pmaier@sysmocom.de> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> Gerrit-Reviewer: laforge <laforge@osmocom.org>