changeset 57:bccf028921bb

apdu-checksw command added to both fc-simtool and fc-uicc-tool
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 22 Mar 2021 23:58:11 +0000
parents b9fc7022f9ac
children 871281cb0555
files libcommon/apducmd.c simtool/cmdtab.c uicc/cmdtab.c
diffstat 3 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libcommon/apducmd.c	Mon Mar 22 21:30:42 2021 +0000
+++ b/libcommon/apducmd.c	Mon Mar 22 23:58:11 2021 +0000
@@ -5,6 +5,7 @@
 
 #include <sys/types.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "simresp.h"
 
 cmd_apdu(argc, argv)
@@ -24,3 +25,28 @@
 	printf("%04X\n", sim_resp_sw);
 	return(0);
 }
+
+cmd_apdu_checksw(argc, argv)
+	char **argv;
+{
+	u_char cmd[260];
+	int rc;
+	unsigned len, expect_sw;
+
+	rc = decode_hex_data_from_string(argv[1], cmd, 5, 260);
+	if (rc < 0)
+		return(rc);
+	len = rc;
+	expect_sw = strtoul(argv[2], 0, 16);
+	rc = apdu_exchange(cmd, len);
+	if (rc < 0)
+		return(rc);
+	if (sim_resp_sw == expect_sw)
+		return(0);
+	else {
+		fprintf(stderr,
+			"SW response mismatch: expected %04X, got %04X\n",
+			expect_sw, sim_resp_sw);
+		return(-1);
+	}
+}
--- a/simtool/cmdtab.c	Mon Mar 22 21:30:42 2021 +0000
+++ b/simtool/cmdtab.c	Mon Mar 22 23:58:11 2021 +0000
@@ -6,6 +6,7 @@
 
 extern int cmd_a38();
 extern int cmd_apdu();
+extern int cmd_apdu_checksw();
 extern int cmd_atr();
 extern int cmd_bfsearch();
 extern int cmd_bfsearch_full();
@@ -124,6 +125,7 @@
 struct cmdtab cmdtab[] = {
 	{"a38", 1, 1, 1, cmd_a38},
 	{"apdu", 1, 1, 0, cmd_apdu},
+	{"apdu-checksw", 2, 2, 0, cmd_apdu_checksw},
 	{"atr", 0, 0, 0, cmd_atr},
 	{"bfsearch", 1, 18, 1, cmd_bfsearch},
 	{"bfsearch-full", 0, 0, 1, cmd_bfsearch_full},
--- a/uicc/cmdtab.c	Mon Mar 22 21:30:42 2021 +0000
+++ b/uicc/cmdtab.c	Mon Mar 22 23:58:11 2021 +0000
@@ -5,6 +5,7 @@
 #include "cmdtab.h"
 
 extern int cmd_apdu();
+extern int cmd_apdu_checksw();
 extern int cmd_atr();
 extern int cmd_bfsearch_adf();
 extern int cmd_bfsearch_mf();
@@ -38,6 +39,7 @@
 
 struct cmdtab cmdtab[] = {
 	{"apdu", 1, 1, 0, cmd_apdu},
+	{"apdu-checksw", 2, 2, 0, cmd_apdu_checksw},
 	{"atr", 0, 0, 0, cmd_atr},
 	{"bfsearch-adf", 0, 0, 1, cmd_bfsearch_adf},
 	{"bfsearch-mf", 0, 0, 1, cmd_bfsearch_mf},