mirror of https://gerrit.osmocom.org/pysim
rename card_data to card_key_provider.
"data" is an awfully generic term. Anything stored on a card is data. This specific code deals with resolving key/pin material from an external source. Change-Id: I4c8e1be3e766f7c0565c07b39d48abf8adc375af
This commit is contained in:
parent
90d3b970af
commit
4442b3d1c0
|
@ -48,7 +48,7 @@ from pySim.ts_102_221 import CardProfileUICC
|
|||
from pySim.ts_31_102 import CardApplicationUSIM
|
||||
from pySim.ts_31_103 import CardApplicationISIM
|
||||
|
||||
from pySim.card_data import CardDataCsv, card_data_register, card_data_get_field
|
||||
from pySim.card_key_provider import CardKeyProviderCsv, card_key_provider_register, card_key_provider_get_field
|
||||
|
||||
|
||||
class PysimApp(cmd2.Cmd):
|
||||
|
@ -95,7 +95,7 @@ class PysimApp(cmd2.Cmd):
|
|||
pin_adm = sanitize_pin_adm(arg)
|
||||
else:
|
||||
# try to find an ADM-PIN if none is specified
|
||||
result = card_data_get_field('ADM1', key='ICCID', value=self.iccid)
|
||||
result = card_key_provider_get_field('ADM1', key='ICCID', value=self.iccid)
|
||||
pin_adm = sanitize_pin_adm(result)
|
||||
if pin_adm:
|
||||
self.poutput("found ADM-PIN '%s' for ICCID '%s'" % (result, self.iccid))
|
||||
|
@ -148,7 +148,7 @@ class Iso7816Commands(CommandSet):
|
|||
if str(code).upper() not in auto:
|
||||
return sanitize_pin_adm(code)
|
||||
|
||||
result = card_data_get_field(str(code), key='ICCID', value=self._cmd.iccid)
|
||||
result = card_key_provider_get_field(str(code), key='ICCID', value=self._cmd.iccid)
|
||||
result = sanitize_pin_adm(result)
|
||||
if result:
|
||||
self._cmd.poutput("found %s '%s' for ICCID '%s'" % (code.upper(), result, self._cmd.iccid))
|
||||
|
@ -439,9 +439,9 @@ if __name__ == '__main__':
|
|||
# or from CSV file in home directory
|
||||
csv_default = str(Path.home()) + "/.osmocom/pysim/card_data.csv"
|
||||
if opts.csv:
|
||||
card_data_register(CardDataCsv(opts.csv))
|
||||
card_key_provider_register(CardKeyProviderCsv(opts.csv))
|
||||
if os.path.isfile(csv_default):
|
||||
card_data_register(CardDataCsv(csv_default))
|
||||
card_key_provider_register(CardKeyProviderCsv(csv_default))
|
||||
|
||||
# If the user supplies an ADM PIN at via commandline args authenticate
|
||||
# immediatley so that the user does not have to use the shell commands
|
||||
|
|
|
@ -23,9 +23,9 @@ from typing import List, Dict, Optional
|
|||
|
||||
import csv
|
||||
|
||||
card_data_provider = [] # type: List[CardData]
|
||||
card_key_providers = [] # type: List[CardData]
|
||||
|
||||
class CardData(object):
|
||||
class CardKeyProvider(object):
|
||||
|
||||
VALID_FIELD_NAMES = ['ICCID', 'ADM1', 'IMSI', 'PIN1', 'PIN2', 'PUK1', 'PUK2']
|
||||
|
||||
|
@ -54,7 +54,7 @@ class CardData(object):
|
|||
"""get fields from CSV file using a specified key/value pair"""
|
||||
pass
|
||||
|
||||
class CardDataCsv(CardData):
|
||||
class CardKeyProviderCsv(CardKeyProvider):
|
||||
"""card data class that allows the user to query against a specified CSV file"""
|
||||
csv_file = None
|
||||
filename = None
|
||||
|
@ -87,17 +87,17 @@ class CardDataCsv(CardData):
|
|||
return rc
|
||||
|
||||
|
||||
def card_data_register(provider:CardData, provider_list=card_data_provider):
|
||||
def card_key_provider_register(provider:CardKeyProvider, provider_list=card_key_providers):
|
||||
"""Register a new card data provider"""
|
||||
if not isinstance(provider, CardData):
|
||||
if not isinstance(provider, CardKeyProvider):
|
||||
raise ValueError("provider is not a card data provier")
|
||||
provider_list.append(provider)
|
||||
|
||||
|
||||
def card_data_get(fields, key:str, value:str, provider_list=card_data_provider) -> Dict[str,str]:
|
||||
def card_key_provider_get(fields, key:str, value:str, provider_list=card_key_providers) -> Dict[str,str]:
|
||||
"""Query all registered card data providers"""
|
||||
for p in provider_list:
|
||||
if not isinstance(p, CardData):
|
||||
if not isinstance(p, CardKeyProvider):
|
||||
raise ValueError("provider list contains provider, which is not a card data provier")
|
||||
result = p.get(fields, key, value)
|
||||
if result:
|
||||
|
@ -105,10 +105,10 @@ def card_data_get(fields, key:str, value:str, provider_list=card_data_provider)
|
|||
return {}
|
||||
|
||||
|
||||
def card_data_get_field(field:str, key:str, value:str, provider_list=card_data_provider) -> Optional[str]:
|
||||
def card_key_provider_get_field(field:str, key:str, value:str, provider_list=card_key_providers) -> Optional[str]:
|
||||
"""Query all registered card data providers for a single field"""
|
||||
for p in provider_list:
|
||||
if not isinstance(p, CardData):
|
||||
if not isinstance(p, CardKeyProvider):
|
||||
raise ValueError("provider list contains provider, which is not a card data provier")
|
||||
result = p.get_field(field, key, value)
|
||||
if result:
|
Loading…
Reference in New Issue