Further decode access rule

This commit is contained in:
Henryk Plötz 2011-01-07 16:58:56 +01:00
parent 699e655ed8
commit c5b4a68c26
1 changed files with 44 additions and 1 deletions

View File

@ -696,7 +696,20 @@ class TCOS_Card(ISO_7816_4_Card,building_blocks.Card_with_80_aa):
"clear_se": cmd_clear_se,
"set_key": cmd_set_key,
}
TLV_utils.identifier("context_ardo")
TLV_utils.identifier("context_art")
def decode_access_rule(mask, value):
result = []
for i in range(3, -1, -1):
if mask & (1<<i):
result.append(binascii.b2a_hex(value[0]))
value = value[1:]
else:
result.append("__");
return " " + " ".join(result)
class TCOS_3_Card(TCOS_Card):
DRIVER_NAME = ["TCOS 3.0"]
APDU_DELETE_FILE = C_APDU(cla=0x80,ins=0xe4)
@ -734,6 +747,36 @@ class TCOS_3_Card(TCOS_Card):
TLV_utils.context_FCP: {
0x86: (TCOS_Card.decode_security_attributes, "Security attributes"),
0x85: (decode_file_descriptor_extension_HACK, "File descriptor extension"),
0xAB: (TLV_utils.recurse, "Access rule object", context_ardo),
0xA2: (TLV_utils.recurse, "SFI / Path mapping template", None),
0xA0: (TLV_utils.recurse, "Access rule template for data objects", context_art),
0xA1: (TLV_utils.recurse, "Interface mode template", None),
},
context_ardo: {
0x80: (TLV_utils.binary, "Compact bitmap"),
0x81: (lambda a: decode_access_rule(1, a), "APDU equals"),
0x82: (lambda a: decode_access_rule(2, a), "APDU equals"),
0x83: (lambda a: decode_access_rule(3, a), "APDU equals"),
0x84: (lambda a: decode_access_rule(4, a), "APDU equals"),
0x85: (lambda a: decode_access_rule(5, a), "APDU equals"),
0x86: (lambda a: decode_access_rule(6, a), "APDU equals"),
0x87: (lambda a: decode_access_rule(7, a), "APDU equals"),
0x88: (lambda a: decode_access_rule(8, a), "APDU equals"),
0x89: (lambda a: decode_access_rule(9, a), "APDU equals"),
0x8a: (lambda a: decode_access_rule(0xa, a), "APDU equals"),
0x8b: (lambda a: decode_access_rule(0xb, a), "APDU equals"),
0x8c: (lambda a: decode_access_rule(0xc, a), "APDU equals"),
0x8d: (lambda a: decode_access_rule(0xd, a), "APDU equals"),
0x8e: (lambda a: decode_access_rule(0xe, a), "APDU equals"),
0x8f: (lambda a: decode_access_rule(0xf, a), "APDU equals"),
0x90: (None, "Always allowed"),
0x97: (None, "Never allowed"),
},
context_art: {
0xAB: (TLV_utils.recurse, "Access rule object", context_ardo),
0x5C: (TLV_utils.binary, "Tag list"),
}
}
TLV_OBJECTS[TLV_utils.context_FCI] = TLV_OBJECTS[TLV_utils.context_FCP]