-Added some documentation

-Partially fixed format string usage in the logger


git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@504 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
oepen
2011-08-23 12:28:16 +00:00
parent 596b43a038
commit b8306d2a40
2 changed files with 38 additions and 20 deletions

View File

@@ -326,7 +326,7 @@ class CryptoflexOS(Iso7816OS): # {{{
try:
c = C_APDU(msg)
except ValueError, e:
logging.debug("Failed to parse APDU %s" % msg)
logging.debug("Failed to parse APDU %s", msg)
return self.formatResult(0, 0, "", SW["ERR_INCORRECTPARAMETERS"])
try:
@@ -378,10 +378,10 @@ class RelayOS(SmartcardOS): # {{{
try:
self.session = smartcard.Session(self.reader)
except smartcard.Exceptions.CardConnectionException, e:
logging.error("Error connecting to card: %s" % e.message)
logging.error("Error connecting to card: %s", e.message)
sys.exit()
logging.info("Connected to card in '%s'" % self.reader)
logging.info("Connected to card in '%s'", self.reader)
atexit.register(self.cleanup)
@@ -389,7 +389,7 @@ class RelayOS(SmartcardOS): # {{{
try:
self.session.close()
except smartcard.Exceptions.CardConnectionException, e:
logging.warning("Error disconnecting from card: %s" % e.message)
logging.warning("Error disconnecting from card: %s", e.message)
def getATR(self):
try:
@@ -400,7 +400,7 @@ class RelayOS(SmartcardOS): # {{{
self.session = smartcard.Session(self.reader)
atr = self.session.getATR()
except smartcard.Exceptions.CardConnectionException, e:
logging.error("Error getting ATR: %s" % e.message)
logging.error("Error getting ATR: %s", e.message)
sys.exit()
return "".join([chr(b) for b in atr])
@@ -412,14 +412,14 @@ class RelayOS(SmartcardOS): # {{{
try:
self.session = smartcard.Session(self.reader)
except smartcard.Exceptions.CardConnectionException, e:
logging.error("Error connecting to card: %s" % e.message)
logging.error("Error connecting to card: %s", e.message)
sys.exit()
def powerDown(self):
try:
self.session.close()
except smartcard.Exceptions.CardConnectionException, e:
logging.error("Error disconnecting from card: %s" % str(e))
logging.error("Error disconnecting from card: %s", str(e))
sys.exit()
def execute(self, msg):
@@ -431,7 +431,7 @@ class RelayOS(SmartcardOS): # {{{
try:
rapdu, sw1, sw2 = self.session.sendCommandAPDU(apdu)
except smartcard.Exceptions.CardConnectionException, e:
logging.error("Error transmitting APDU: %s" % str(e))
logging.error("Error transmitting APDU: %s", str(e))
sys.exit()
# XXX this is a workaround, see on sourceforge bug #3083586
@@ -458,7 +458,15 @@ VPCD_CTRL_ON = 1
VPCD_CTRL_RESET = 2
VPCD_CTRL_ATR = 4
class VirtualICC(object): # {{{
class VirtualICC(object): # {{{
"""
This class is responsible for maintaining the communication of the virtual
PCD and the emulated smartcard. vpicc and vpcd communicate via a socket.
The vpcd sends command APDUs (which it receives from an application) to the
vicc. The vicc passes these CAPDUs on to an emulated smartcard, which
produces a response APDU. This RAPDU is then passed back by the vicc to
the vpcd, which forwards it to the application.
"""
def __init__(self, filename, type, host, port, lenlen=3, readernum=None):
from os.path import exists
@@ -476,8 +484,8 @@ class VirtualICC(object): # {{{
if exists(filename):
self.cardGenerator.loadCard(self.filename)
else:
logging.info("Creating new card which will be saved in %s."
% self.filename)
logging.info("Creating new card which will be saved in %s.",
self.filename)
MF, SAM = self.cardGenerator.getCard()
@@ -489,8 +497,8 @@ class VirtualICC(object): # {{{
elif type == "relay":
self.os = RelayOS(readernum)
else:
logging.warning("Unknown cardtype %s. Will use standard ISO 7816 cardtype"
% type)
logging.warning("Unknown cardtype %s. Will use standard type (ISO 7816)",
type)
type = "iso7816"
self.os = Iso7816OS(MF, SAM)
self.type = type
@@ -500,7 +508,7 @@ class VirtualICC(object): # {{{
self.sock = self.connectToPort(host, port)
self.sock.settimeout(None)
except socket.error, e:
logging.error("Failed to open socket: %s" % str(e))
logging.error("Failed to open socket: %s", str(e))
logging.error("Is pcscd running at %s? Is vpcd loaded? Is a firewall blocking port %u?" % (host, port))
sys.exit()
@@ -518,15 +526,20 @@ class VirtualICC(object): # {{{
@staticmethod
def connectToPort(host, port):
"""
Open a connection to a given host on a given port.
"""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
return sock
def __sendToVPICC(self, msg):
""" Send a message to the vpcd """
#size = inttostring(len(msg), self.lenlen)
self.sock.send(struct.pack('!H', len(msg)) + msg)
def __recvFromVPICC(self):
""" Receive a message from the vpcd """
# receive message size
sizestr = self.sock.recv(_Csizeof_short)
if len(sizestr) == 0:
@@ -545,6 +558,11 @@ class VirtualICC(object): # {{{
return size, msg
def run(self):
"""
Main loop of the vpicc. Receives command APDUs via a socket from the
vpcd, dispatches them to the emulated smartcard and sends the resulting
respsonse APDU back to the vpcd.
"""
while True :
(size, msg) = self.__recvFromVPICC()
if not size:

View File

@@ -380,10 +380,10 @@ class R_APDU(APDU):
return self.data + self.sw
if __name__ == "__main__":
a = C_APDU(1,2,3,4) # case 1
b = C_APDU(1,2,3,4,5) # case 2
c = C_APDU((1,2,3), cla=0x23, data="hallo") # case 3
d = C_APDU(1,2,3,4,2,4,6,0) # case 4
a = C_APDU(1, 2, 3, 4) # case 1
b = C_APDU(1, 2, 3, 4, 5) # case 2
c = C_APDU((1, 2, 3), cla = 0x23, data = "hallo") # case 3
d = C_APDU(1, 2, 3, 4, 2, 4, 6, 0) # case 4
print
print a
@@ -401,7 +401,7 @@ if __name__ == "__main__":
print hexdump(i.render())
print
e = R_APDU(0x90,0)
e = R_APDU(0x90, 0)
f = R_APDU("foo\x67\x00")
print
@@ -415,7 +415,7 @@ if __name__ == "__main__":
for i in e, f:
print hexdump(i.render())
g = C_APDU(0x00, 0xb0, 0x9c, 0x00, 0x00, 0x00, 0x00) # case 2 extended length
g = C_APDU(0x00, 0xb0, 0x9c, 0x00, 0x00, 0x00, 0x00) #case 2 extended length
print
print g