<p>herlesupreeth has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/18194">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Import TLV parsing related function from https://github.com/mitshell/card<br><br>The functions are imported from the git commit 2a81963790e27eb6b188359af169c45afb6d3aaf from master branch<br><br>Change-Id: I5c7fdbd122e696d272f7480785d0c17ad2af138c<br>---<br>M pySim/utils.py<br>1 file changed, 39 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/94/18194/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim/utils.py b/pySim/utils.py</span><br><span>index 1980685..eb7a56b 100644</span><br><span>--- a/pySim/utils.py</span><br><span>+++ b/pySim/utils.py</span><br><span>@@ -359,3 +359,42 @@</span><br><span>                              avail_st += '\tService %d - %s\n' % ((8*i) + j, lookup_map[(8*i) + j])</span><br><span>                       byte = byte >> 1</span><br><span>       return avail_st</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def first_TLV_parser(bytelist):</span><br><span style="color: hsl(120, 100%, 40%);">+    '''</span><br><span style="color: hsl(120, 100%, 40%);">+       first_TLV_parser([0xAA, 0x02, 0xAB, 0xCD, 0xFF, 0x00]) -> (170, 2, [171, 205])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   parses first TLV format record in a list of bytelist</span><br><span style="color: hsl(120, 100%, 40%);">+  returns a 3-Tuple: Tag, Length, Value</span><br><span style="color: hsl(120, 100%, 40%);">+ Value is a list of bytes</span><br><span style="color: hsl(120, 100%, 40%);">+      parsing of length is ETSI'style 101.220</span><br><span style="color: hsl(120, 100%, 40%);">+   '''</span><br><span style="color: hsl(120, 100%, 40%);">+       Tag = bytelist[0]</span><br><span style="color: hsl(120, 100%, 40%);">+     if bytelist[1] == 0xFF:</span><br><span style="color: hsl(120, 100%, 40%);">+               Len = bytelist[2]*256 + bytelist[3]</span><br><span style="color: hsl(120, 100%, 40%);">+           Val = bytelist[4:4+Len]</span><br><span style="color: hsl(120, 100%, 40%);">+       else:</span><br><span style="color: hsl(120, 100%, 40%);">+         Len = bytelist[1]</span><br><span style="color: hsl(120, 100%, 40%);">+             Val = bytelist[2:2+Len]</span><br><span style="color: hsl(120, 100%, 40%);">+       return (Tag, Len, Val)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def TLV_parser(bytelist):</span><br><span style="color: hsl(120, 100%, 40%);">+   '''</span><br><span style="color: hsl(120, 100%, 40%);">+       TLV_parser([0xAA, ..., 0xFF]) -> [(T, L, [V]), (T, L, [V]), ...]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ loops on the input list of bytes with the "first_TLV_parser()" function</span><br><span style="color: hsl(120, 100%, 40%);">+     returns a list of 3-Tuples</span><br><span style="color: hsl(120, 100%, 40%);">+    '''</span><br><span style="color: hsl(120, 100%, 40%);">+       ret = []</span><br><span style="color: hsl(120, 100%, 40%);">+      while len(bytelist) > 0:</span><br><span style="color: hsl(120, 100%, 40%);">+           T, L, V = first_TLV_parser(bytelist)</span><br><span style="color: hsl(120, 100%, 40%);">+          if T == 0xFF:</span><br><span style="color: hsl(120, 100%, 40%);">+                 # padding bytes</span><br><span style="color: hsl(120, 100%, 40%);">+                       break</span><br><span style="color: hsl(120, 100%, 40%);">+         ret.append( (T, L, V) )</span><br><span style="color: hsl(120, 100%, 40%);">+               # need to manage length of L</span><br><span style="color: hsl(120, 100%, 40%);">+          if L > 0xFE:</span><br><span style="color: hsl(120, 100%, 40%);">+                       bytelist = bytelist[ L+4 : ]</span><br><span style="color: hsl(120, 100%, 40%);">+          else:</span><br><span style="color: hsl(120, 100%, 40%);">+                 bytelist = bytelist[ L+2 : ]</span><br><span style="color: hsl(120, 100%, 40%);">+  return ret</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/18194">change 18194</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/pysim/+/18194"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I5c7fdbd122e696d272f7480785d0c17ad2af138c </div>
<div style="display:none"> Gerrit-Change-Number: 18194 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: herlesupreeth <herlesupreeth@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>