<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/23897">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">st2-cardem-pcsc: Use ATR of real card by default<br><br>Before this patch, we would always use either a hard-coded default<br>ATR from the source code, or we would use one that the user specified<br>on the command line.<br><br>The more sane default is to pass-through the real ATR of the card.<br><br>Change-Id: I75bf618a6b0d983727de4c2f19b4b48ec3e12af8<br>Closes: OS#5107<br>Requires: libosmocore.git 22117a7164012d6d88fc202cd63df79c6068484d<br>---<br>M host/src/simtrace2-cardem-pcsc.c<br>1 file changed, 19 insertions(+), 32 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/97/23897/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/host/src/simtrace2-cardem-pcsc.c b/host/src/simtrace2-cardem-pcsc.c</span><br><span>index 543780f..9a3c7e3 100644</span><br><span>--- a/host/src/simtrace2-cardem-pcsc.c</span><br><span>+++ b/host/src/simtrace2-cardem-pcsc.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /* simtrace2-cardem-pcsc - main program for the host PC to provide a remote SIM</span><br><span>  * using the SIMtrace 2 firmware in card emulation mode</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2016-2020 by Harald Welte <hwelte@hmw-consulting.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2016-2021 by Harald Welte <hwelte@hmw-consulting.de></span><br><span>  * (C) 2018, sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span>  *</span><br><span>  * This program is free software; you can redistribute it and/or</span><br><span>@@ -51,29 +51,8 @@</span><br><span> #include <osmocom/sim/class_tables.h></span><br><span> #include <osmocom/sim/sim.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define ATR_MAX_LEN 33</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define LOGCI(ci, lvl, fmt, args ...) printf(fmt, ## args)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* reasonable ATR offering all protocols and voltages</span><br><span style="color: hsl(0, 100%, 40%);">- * smartphones might not care, but other readers do</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * TS =         0x3B    Direct Convention</span><br><span style="color: hsl(0, 100%, 40%);">- * T0 =                0x80    Y(1): b1000, K: 0 (historical bytes)</span><br><span style="color: hsl(0, 100%, 40%);">- * TD(1) =  0x80    Y(i+1) = b1000, Protocol T=0</span><br><span style="color: hsl(0, 100%, 40%);">- * ----</span><br><span style="color: hsl(0, 100%, 40%);">- * TD(2) =   0x81    Y(i+1) = b1000, Protocol T=1</span><br><span style="color: hsl(0, 100%, 40%);">- * ----</span><br><span style="color: hsl(0, 100%, 40%);">- * TD(3) =   0x1F    Y(i+1) = b0001, Protocol T=15</span><br><span style="color: hsl(0, 100%, 40%);">- * ----</span><br><span style="color: hsl(0, 100%, 40%);">- * TA(4) =  0xC7    Clock stop: no preference - Class accepted by the card: (3G) A 5V B 3V C 1.8V</span><br><span style="color: hsl(0, 100%, 40%);">- * ----</span><br><span style="color: hsl(0, 100%, 40%);">- * Historical bytes</span><br><span style="color: hsl(0, 100%, 40%);">- * TCK = 0x59    correct checksum</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_ATR_STR "3B8080811FC759"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void atr_update_csum(uint8_t *atr, unsigned int atr_len)</span><br><span> {</span><br><span>        uint8_t csum = 0;</span><br><span>@@ -415,9 +394,9 @@</span><br><span>      int rc;</span><br><span>      int c, ret = 1;</span><br><span>      int skip_atr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       char *atr = DEFAULT_ATR_STR;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t real_atr[ATR_MAX_LEN];</span><br><span style="color: hsl(0, 100%, 40%);">-  int atr_len;</span><br><span style="color: hsl(120, 100%, 40%);">+  char *atr = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t override_atr[OSIM_MAX_ATR_LEN];</span><br><span style="color: hsl(120, 100%, 40%);">+       int override_atr_len = 0;</span><br><span>    int keep_running = 0;</span><br><span>        int if_num = 0, vendor_id = -1, product_id = -1;</span><br><span>     int config_id = -1, altsetting = 0, addr = -1;</span><br><span>@@ -484,11 +463,13 @@</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   atr_len = osmo_hexparse(atr,real_atr,ATR_MAX_LEN);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (atr_len < 2) {</span><br><span style="color: hsl(0, 100%, 40%);">-           fprintf(stderr, "Invalid ATR - please omit a leading 0x and only use valid hex "</span><br><span style="color: hsl(0, 100%, 40%);">-                      "digits and whitespace. ATRs need to be between 2 and 33 bytes long.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-             goto do_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (atr) {</span><br><span style="color: hsl(120, 100%, 40%);">+            override_atr_len = osmo_hexparse(atr, override_atr, sizeof(override_atr));</span><br><span style="color: hsl(120, 100%, 40%);">+            if (override_atr_len < 2) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        fprintf(stderr, "Invalid ATR - please omit a leading 0x and only use valid hex "</span><br><span style="color: hsl(120, 100%, 40%);">+                            "digits and whitespace. ATRs need to be between 2 and 33 bytes long.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                   goto do_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span>    }</span><br><span> </span><br><span>        if (vendor_id < 0 || product_id < 0) {</span><br><span>@@ -576,8 +557,14 @@</span><br><span> </span><br><span>              if (!skip_atr) {</span><br><span>                     /* set the ATR */</span><br><span style="color: hsl(0, 100%, 40%);">-                       atr_update_csum(real_atr, atr_len);</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_st2_cardem_request_set_atr(ci, real_atr, atr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (override_atr_len) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               /* user has specified an override-ATR */</span><br><span style="color: hsl(120, 100%, 40%);">+                              atr_update_csum(override_atr, override_atr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                              osmo_st2_cardem_request_set_atr(ci, override_atr, override_atr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              /* use the real ATR of the card */</span><br><span style="color: hsl(120, 100%, 40%);">+                            osmo_st2_cardem_request_set_atr(ci, card->atr, card->atr_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                  }</span><br><span>            }</span><br><span> </span><br><span>                /* select remote (forwarded) SIM */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/23897">change 23897</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/simtrace2/+/23897"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I75bf618a6b0d983727de4c2f19b4b48ec3e12af8 </div>
<div style="display:none"> Gerrit-Change-Number: 23897 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>