From 90d20fd80edec93c64a961930990375837bb6ac2 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:03:08 +0200 Subject: [PATCH] command sketches and low level fix --- client/src/cipurse/cipursecore.c | 8 ++++---- client/src/cipurse/cipursecore.h | 4 ++-- client/src/cmdhfcipurse.c | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/client/src/cipurse/cipursecore.c b/client/src/cipurse/cipursecore.c index cfeddf2af..5fbf5bdd6 100644 --- a/client/src/cipurse/cipursecore.c +++ b/client/src/cipurse/cipursecore.c @@ -212,12 +212,12 @@ int CIPURSEUpdateBinary(uint16_t offset, uint8_t *data, uint16_t datalen, uint8_ return CIPURSEExchange((sAPDU_t) {0x00, 0xd6, (offset >> 8) & 0x7f, offset & 0xff, datalen, data}, result, max_result_len, result_len, sw); } -int CIPURSEUpdateKeyAttrib(uint8_t key_attrib, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) { - return CIPURSEExchangeEx(false, true, (sAPDU_t) {0x80, 0x4e, 0, key_attrib, 0, NULL}, false, 0, result, max_result_len, result_len, sw); +int CIPURSEUpdateKeyAttrib(uint8_t key_num, uint8_t key_attrib, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) { + return CIPURSEExchangeEx(false, true, (sAPDU_t) {0x80, 0x4e, 0x00, key_num, 1, &key_attrib}, false, 0, result, max_result_len, result_len, sw); } -int CIPURSEUpdateKey(uint8_t encryt_key_num, uint8_t udate_key_num, uint8_t *key, uint16_t key_len, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) { - return CIPURSEExchangeEx(false, true, (sAPDU_t) {0x80, 0xd6, encryt_key_num, udate_key_num, key_len, key}, false, 0, result, max_result_len, result_len, sw); +int CIPURSEUpdateKey(uint8_t encrypt_key_num, uint8_t key_num, uint8_t *key, uint16_t key_len, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw) { + return CIPURSEExchangeEx(false, true, (sAPDU_t) {0x80, 0xd6, encrypt_key_num, key_num, key_len, key}, false, 0, result, max_result_len, result_len, sw); } int CIPURSECommitTransaction(uint16_t *sw) { diff --git a/client/src/cipurse/cipursecore.h b/client/src/cipurse/cipursecore.h index ee6231c93..b6f8f9bcb 100644 --- a/client/src/cipurse/cipursecore.h +++ b/client/src/cipurse/cipursecore.h @@ -55,8 +55,8 @@ int CIPURSEUpdateFileAttributes(uint8_t *data, uint16_t datalen, uint8_t *result 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); -int CIPURSEUpdateKeyAttrib(uint8_t key_attrib, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw); -int CIPURSEUpdateKey(uint8_t encryt_key_num, uint8_t udate_key_num, uint8_t *key, uint16_t key_len, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw); +int CIPURSEUpdateKeyAttrib(uint8_t key_num, uint8_t key_attrib, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw); +int CIPURSEUpdateKey(uint8_t encrypt_key_num, uint8_t key_num, uint8_t *key, uint16_t key_len, uint8_t *result, size_t max_result_len, size_t *result_len, uint16_t *sw); int CIPURSECommitTransaction(uint16_t *sw); int CIPURSECancelTransaction(uint16_t *sw); diff --git a/client/src/cmdhfcipurse.c b/client/src/cmdhfcipurse.c index 44475bf55..1cd756d7a 100644 --- a/client/src/cmdhfcipurse.c +++ b/client/src/cmdhfcipurse.c @@ -1402,6 +1402,20 @@ static int CmdHFCipurseDeleteFile(const char *Cmd) { return PM3_SUCCESS; } +// {"updkey", CmdHFCipurseUpdateKey, IfPm3Iso14443a, "Update key"}, +static int CmdHFCipurseUpdateKey(const char *Cmd) { + + DropField(); + return PM3_SUCCESS; +} + +// {"updakey", CmdHFCipurseUpdateKeyAttr, IfPm3Iso14443a, "Update key attributes"}, +static int CmdHFCipurseUpdateKeyAttr(const char *Cmd) { + + DropField(); + return PM3_SUCCESS; +} + bool CheckCardCipurse(void) { uint8_t buf[APDU_RES_LEN] = {0}; size_t len = 0; @@ -1491,6 +1505,8 @@ static command_t CommandTable[] = { {"formatall", CmdHFCipurseFormatAll, IfPm3Iso14443a, "Erase all the data from chip"}, {"create", CmdHFCipurseCreateDGI, IfPm3Iso14443a, "Create file, application, key via DGI record"}, {"delete", CmdHFCipurseDeleteFile, IfPm3Iso14443a, "Delete file"}, + {"updkey", CmdHFCipurseUpdateKey, IfPm3Iso14443a, "Update key"}, + {"updakey", CmdHFCipurseUpdateKeyAttr, IfPm3Iso14443a, "Update key attributes"}, {"default", CmdHFCipurseDefault, IfPm3Iso14443a, "Set default key and file id for all the other commands"}, {"test", CmdHFCipurseTest, AlwaysAvailable, "Tests"}, {NULL, NULL, 0, NULL}