Merge pull request #1 from psytester/master

part 2 for new option to read dataset file
This commit is contained in:
psytester
2014-05-19 22:04:52 +02:00
3 changed files with 45 additions and 3 deletions

View File

@@ -0,0 +1,22 @@
# This is an example dataset file vor the virtual smartcard.
# Datagroups are just given in plain ascii, separated by =.
# CommunityID has to be given as hex values enclosed with ' '.
# The File is passed to the virtual smartcard emulator via
# command line option -d, with or without path.
#
DocumentType=ID
IssuingState=D
DateOfExpiry=20201031
GivenNames = Gertrud
FamilyNames=Mueller
ReligiousArtisticName=ǏǐǑǒǓǔǞǟǤǥǦǧǨǩǪǫǬǭǮǯǰǴǵǺǻǼǽǾǿȘșȚțȞȟȪȫȮȯȰ
AcademicTitle=
DateOfBirth=19530304
PlaceOfBirth= BERLIN FRIEDENAU
Nationality=DE
Sex=F
Country=D
City=BREMEN
ZIP=28195
Street =STADTMUSIKANTENWEG 12a
CommunityID='\x02\x76\x03\x02\x54\x00\x21'

View File

@@ -45,6 +45,16 @@ parser.add_argument("-f", "--file",
action="store",
type=argparse.FileType('r'),
help="load a saved smart card image")
parser.add_argument("-d", "--datasetfile",
action="store",
help="Load the smartcard's data groups (DGs) from the specified dataset file. For DGs not in dataset file default values are used. \
The data groups in the data set file must have the following syntax: \
--------------------------------------------------- Datagroupname=Datagroupvalue \
--------------------------------------------------- \
For Example: GivenNames=GERTRUD. \
The following Dataset Elements may be used in the dataset file: \
DocumentType, IssuingState, DateOfExpiry, GivenNames, FamilyNames, ReligiousArtisticName, AcademicTitle, DateOfBirth, PlaceOfBirth, Nationality, Sex, Country, City, ZIP, Street, CommunityID, dg12, dg13, dg14, dg15, dg16, dg19, dg20, dg21.\
")
parser.add_argument("-H", "--hostname",
action="store",
type=str,
@@ -126,7 +136,7 @@ if args.reversed:
else:
hostname = args.hostname
vicc = VirtualICC(args.file, args.type,
vicc = VirtualICC(args.file, args.datasetfile, args.type,
hostname, args.port, readernum=args.reader,
ef_cardaccess=ef_cardaccess_data, ef_cardsecurity=ef_cardsecurity_data,
ca_key=ca_key_data, cvca=cvca, disable_checks=args.disable_ta_checks, logginglevel=logginglevel)

View File

@@ -629,7 +629,7 @@ class VirtualICC(object):
the vpcd, which forwards it to the application.
"""
def __init__(self, filename, card_type, host, port, readernum=None, ef_cardsecurity=None, ef_cardaccess=None, ca_key=None, cvca=None, disable_checks=False, logginglevel=logging.INFO):
def __init__(self, filename, datasetfile, card_type, host, port, readernum=None, ef_cardsecurity=None, ef_cardaccess=None, ca_key=None, cvca=None, disable_checks=False, logginglevel=logging.INFO):
from os.path import exists
logging.basicConfig(level = logginglevel,
@@ -648,6 +648,16 @@ class VirtualICC(object):
logging.info("Creating new card which will be saved in %s.",
self.filename)
#If a dataset file is specified, read the card's data groups from disk
if datasetfile != None:
if exists(datasetfile):
logging.info("Reading Data Groups from file %s.",
datasetfile)
self.cardGenerator.readDatagroups(datasetfile)
else:
logging.info("Data Set File %s not found, using default values for datagroups.",
self.datasetfile)
MF, SAM = self.cardGenerator.getCard()
#Generate an OS object of the correct card_type