From 5e9a299eaafff141d9ef320b65aea3aaf12a42b6 Mon Sep 17 00:00:00 2001 From: oepen Date: Mon, 1 Feb 2010 16:40:27 +0000 Subject: [PATCH] - Object orientated refactoring of CardGenerator - PassportOS class in VirtualSmartcard.py is no longer needed, because all the functionallity is now in CardGenerator - Removed hard coded image - Added version number and type to file format git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@38 96b47cad-a561-4643-ad3b-153ac7d7599c --- virtualsmartcard/vpicc/CardGenerator.py | 279 +++++++++++---------- virtualsmartcard/vpicc/VirtualSmartcard.py | 71 ++---- virtualsmartcard/vpicc/jp2.jpg | Bin 4102 -> 0 bytes 3 files changed, 172 insertions(+), 178 deletions(-) delete mode 100644 virtualsmartcard/vpicc/jp2.jpg diff --git a/virtualsmartcard/vpicc/CardGenerator.py b/virtualsmartcard/vpicc/CardGenerator.py index 4924c3f..1f66d85 100644 --- a/virtualsmartcard/vpicc/CardGenerator.py +++ b/virtualsmartcard/vpicc/CardGenerator.py @@ -17,11 +17,11 @@ # virtualsmartcard. If not, see . # -import sys, getpass, anydbm +import sys, getpass, anydbm, readline, os, dircache from pickle import loads, dumps from TLVutils import pack from utils import inttostring -from SmartcardFilesystem import MF, TransparentStructureEF +from SmartcardFilesystem import * # pgp directory #self.mf.append(DF(parent=self.mf, @@ -34,133 +34,164 @@ from SmartcardFilesystem import MF, TransparentStructureEF #self.mf.append(DF(parent=self.mf, #fid=3, dfname='\xa0\x00\x00\x03\x08\x00\x00\x10\x00\x01\x00')) -def generate_iso_card(): - from SmartcardSAM import SAM - - print "Using default SAM. Insecure!!!" - sam = SAM("1234", "1234567890") #FIXME: Use user provided data +class CardGenerator(object): - mf = MF(filedescriptor=FDB["DF"], lifecycle=LCB["ACTIVATED"], dfname=None) - self.SAM.set_MF(self.mf) - - return mf, sam - -def generate_ePass(): - from PIL import Image - from SmartcardFilesystem import DF - from SmartcardSAM import PassportSAM + def __init__(self, type='iso7816', sam=None, mf=None): + types = ['iso7816', 'ePass', 'cryptoflex'] + if not type in types: + raise ValueError, "Unsupported type " % type - MRZ1 = "PP*75kQ&CbR#&thWZ;u8|n(lau%vR~xnmXwy2zp8ls zrn0`Fu?gG!uBElByQjCWe_-(A$mrPk#N^cU%pwlI^mBP-b#0xnySIOE`1|OX_{T*8 zfc|A&=6_}X!^L>%A|)dOkx~9}k&r(617{>7zadF+Ro#^GzW+5|sVFKY4NP%eCpDk6 z*$(rAhu^NS@XIU;5dP5qk^S#r(f=>mf5QIDH3NV_B$tl|Vg%HHRp)Q2H~P;TdWlLY zj};;bGQHo_)2O%~NcLC5^d*+_S7JF10^GeOm2s1E{ zKJ+hqs1$1DM0+a#mH+Ei(i&@3ng~dMZ0E+L!4KBc>)vck$%sTyR|x^N9?tib#q}QHUJUZdsJnVbvN@qdOYB#)aRZB za<(;i_`MLm^sZs%xgd12G$S-;rbzgq|4a+DtbWdczQ__<%-VKj>K@T75=KDfwX)qmDAc!Bk>F1f940XB5*S@ojeZ!hZjbKUCwMU%vV4|fbXVNOGU+3FA z4tO759eV*ht1_SpCR=-g8fBY>_ZNq2WrA)e$)uK6oa*ab0M{&`w{Uq}8Y3cx8i?U7 z>Z0H@czmG|%zF5Kf4G&U{WG%G^xa>s+Gb4PBD>HX72#6;@t$q}IQ64MR@70Ot|?}4 zH14v@-B8vZn6so{(*CP^At1vGVAIR>M{ldZ6s>O^8`VvRwi)yMaX~v3w|GFdLZ?B43 z+z0{xXixRIHRtyHu-DbmMj)kkm`a;{(1RU~Q@V$LSyOqd;*D6zWbYup>D^A*?&mt~ zY`C;?|1$Y?c;#=RCGBTcK6pdg`jGF|ZBgjzLW_SBQ$8{|0{$y;LzUNBy)yV|r<|1} z|J$L*yzR&nO|T%@VGXL+QhsKl7*)k3yu7UpKXhNR278dcT-2moDN;vR+9uw76vu7d zSN>|=%Qo}*D7~)>n)Y$$N)-AT3E~P>cf!)H$G5eFUmj0ju!1HXM04o76HWx=Rt+P%9`9 z-^s=f^|u?6Gm{8_1=0*GMvofTw>Dz>hMT(d-tYueE-{2o>f_mEGe_`(-Bv7BV0DLO z>I@woweR2a15ejaO}gb1{tAqw1EI>+jlK=3H2>mDNI!b(-&|puTa6Qw`f{!#=g+=X zqSI0YFSHRz6m)==8+NB}3{*Y0)d(xJ@U4`ssfE^c@pxQmn`Jj}f)IH;Tl@p-$N5hn z-3%7&J1#3}Ive}d9sw%aT@!sLn`t+TWe^K{FWE6vU%s?yk_;Q6%(>kcv4zXlC2%+1 zHcfvaDPu|KE8tiIZQRT}EYy~f6NSH-?=cA;{8@UeXW^#M3H#J?IjIFxLoClSUCIMqj*mVlDr5?6As{NBkO@pG{pZ(*wh4vxzTk%^?gWD>c^@ zYaDyB2>k@*52KZfxgI8UDnU^xEB1IA7rU2t)TX^BnQ`sDBTgM%g+3mOtV~4(DeU`drPY=22;E+@}*}iK_~I_C`*NeHB=t z#p^neVuKioKhWW{m_$l5w3M60wFdh+x zLLAWn2$7+PZ;eAre%sMF;!pM6&nbg;hn@%3-n{OUdJ&sx<#m=DO)2U`i?DLUb&XW) zO?kgJF2Ffavspn!>z0;E3`;lxKN0q+DhX@K8DZ|lA+?AeVOklT_#1=008)b0HWDLO zdD~IAN?IMQ_K7r22qLDTK%(-h)+(O6G+K@0P}%#e@ZS-t7AiJ(LyOfWDqR5XAL#40 z%$|+IJ;rKqY2tbe-9@|7HfuN#cO))vQdcGN>+sR&mk#iX&u|=6{VjclSc>NHq+ml% zZL3FT)!f=D%M``con_Ukqj4X3lRWrQ>B4M+)09>Z<~iDk<;~wM;5(1gyCZIp$9-}5 zbOF>_LX}k}stBxI+qp(>e7QP$3Z3R`GiX}q=t3>Jq>W8Ri#OC5xkm3itIFVYIgUem zWsH@N3J_vT0+VuzpMFgGXpYHnb06qBvDmVLjfcMu2-~t9-!eFVpf{ZG(M_Rq9d$fW zfPFDBe`750R%#w>F`0pF_oG$K!d!%6iB-CaaCmBLg|yiB+2Gq&)+_J4Nc?%G9URK# z=_owsb9_rW&g#&!RyI#>Sz(HhR+#+5A>;9Ldnu;+S;foB z91cnZ(V5ychr3B0^lfD6>yfs<^?i?iKRtg}aULzQTx~0+@!K$$d88>t z^6>d}7AgtUWbK+GY_>t*F9DsQpO8K&osUZB@kw=MPZzUZo@<_h#yj)HL9VTiyez0C z{kjWafqx0K>gOfA*Gr6P>Z@SR!U)XSnwuJ;`0TwuO8FjZ(;;X~~q$xs-Fr;B+uGH3Dz4H@)u^HjJ% zuDAKMW1J(avhO~ff$om(&u$FCeLf8g^9{>A0CW;mdgwK|4`Po!h z38G5Gf0~7!c{slt^OenR9S`8rbFVHNDrom7eacA*-Hm9fs-&5HA#>*X!|)v<4`$s| zx}ZA{0Z$2kC{j>W7@e6Je{*!Jk%wume(EkHc8xzVxKsfiGe@W7pIBWQ95HOOGnYMC zCpy`jw(7}!Gkslu>KZk^psNX8cX>77FE`u9$vss?Fuw~zutLC?=aswo=c?h=%G zoeQ-(wo0=TsA)Q=x}BOSn`9gFI_PF~+p*1I{q@Nug+k|hRrzV9EtLC1#`H4>KDLHN zxV|v`Ft4CQMv3kL>*rWyk|-nI{LIFwILooJ#ykT@EL6?C0}b}Ry^IuGT9;cnnZu8~ zl{NJ0X|+prw40mh2TyMJu;eo2@IS{&aq@JepGxnCQGVKjwgZr1V&>Mh2Ko3usGAQ@Mpid=*ulT@WwCD zbe#jlZ(0i5f^`XgNr$DoDQPN${onb)m^Di~u-1p;c*-9lTFfJ8DMeK~e9F8K{%pop K=w