print attributes

This commit is contained in:
merlokk 2022-02-04 15:16:43 +02:00
commit 13012c33b0
2 changed files with 37 additions and 0 deletions

View file

@ -200,6 +200,10 @@ int CIPURSEReadFileAttributes(uint8_t *result, size_t max_result_len, size_t *re
return CIPURSEExchange((sAPDU_t) {0x80, 0xce, 0x00, 0x00, 0, NULL}, result, max_result_len, result_len, sw);
}
int CIPURSEUpdateFileAttributes(uint8_t *data, uint16_t datalen, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) {
return CIPURSEExchange((sAPDU_t) {0x80, 0xde, 0x00, 0x00, datalen, data}, result, max_result_len, result_len, sw);
}
int CIPURSEReadBinary(uint16_t offset, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) {
return CIPURSEExchange((sAPDU_t) {0x00, 0xb0, (offset >> 8) & 0x7f, offset & 0xff, 0, NULL}, result, max_result_len, result_len, sw);
}
@ -610,3 +614,34 @@ void CIPURSEPrintFileAttrEx(uint8_t *attr, size_t len, bool isDGI) {
void CIPURSEPrintFileAttr(uint8_t *attr, size_t len) {
return CIPURSEPrintFileAttrEx(attr, len, false);
}
void CIPURSEPrintFileUpdateAttr(uint8_t *attr, size_t len) {
uint8_t keynum = attr[0];
PrintAndLogEx(INFO, "Keys assigned... %d", keynum);
size_t idx = 1;
if ( keynum > 0) {
if (len >= idx + 2) {
PrintAndLogEx(INFO, "SMR entries... %02x%02x", attr[idx], attr[idx + 1]);
CIPURSEPrintSMR(&attr[idx]);
}
idx += 2;
if (len >= idx + keynum + 1) {
PrintAndLogEx(INFO, "ART... %s", sprint_hex(&attr[idx], keynum + 1));
CIPURSEPrintART(&attr[idx], keynum + 1);
PrintAndLogEx(NORMAL, "");
}
idx += keynum + 1;
}
// FCI
if (len >= idx + 1) {
int xlen = len - idx;
if (xlen > 0 && xlen < 200) {
PrintAndLogEx(INFO, "TLV file control parameters... [%d] %s", xlen, sprint_hex(&attr[idx], xlen));
TLVPrintFromBuffer(&attr[idx], xlen);
PrintAndLogEx(NORMAL, "");
}
}
}

View file

@ -51,6 +51,7 @@ int CIPURSESelectMFEx(bool activate_field, bool leave_field_on, uint8_t *result,
int CIPURSESelectMF(uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw);
int CIPURSEReadFileAttributes(uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw);
int CIPURSEUpdateFileAttributes(uint8_t *data, uint16_t datalen, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw);
int CIPURSEReadBinary(uint16_t offset, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw);
int CIPURSEUpdateBinary(uint16_t offset, uint8_t *data, uint16_t datalen, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw);
@ -66,6 +67,7 @@ void CIPURSEPrintART(uint8_t *artrec, size_t artlen);
void CIPURSEPrintEFFileAttr(uint8_t *attr, size_t len);
void CIPURSEPrintFileAttrEx(uint8_t *attr, size_t len, bool isDGI);
void CIPURSEPrintFileAttr(uint8_t *attr, size_t len);
void CIPURSEPrintFileUpdateAttr(uint8_t *attr, size_t len);
void CIPURSEPrintFileDescriptor(uint8_t desc);
void CIPURSEPrintDGIArray(uint8_t *dgi, size_t dgilen);
void CIPURSEPrintDGI(uint8_t *dgi, size_t dgilen);