New API function mifare_desfire_set_ats().

This commit is contained in:
Romain Tartiere 2010-12-24 22:08:56 +00:00
parent 58f64b881e
commit 9a4b7b5882
5 changed files with 194 additions and 2 deletions

View file

@ -320,6 +320,7 @@ int mifare_desfire_get_version (MifareTag tag, struct mifare_desfire_version_i
int mifare_desfire_free_mem (MifareTag tag, uint32_t *size);
int mifare_desfire_set_configuration (MifareTag tag, bool disable_format, bool enable_random_uid);
int mifare_desfire_set_default_key (MifareTag tag, MifareDESFireKey key);
int mifare_desfire_set_ats (MifareTag tag, uint8_t *ats);
int mifare_desfire_get_card_uid (MifareTag tag, char **uid);
int mifare_desfire_get_file_ids (MifareTag tag, uint8_t *files[], size_t *count);
int mifare_desfire_get_file_settings (MifareTag tag, uint8_t file_no, struct mifare_desfire_file_settings *settings);

View file

@ -929,6 +929,40 @@ mifare_desfire_set_default_key (MifareTag tag, MifareDESFireKey key)
return 0;
}
int
mifare_desfire_set_ats (MifareTag tag, uint8_t *ats)
{
ASSERT_ACTIVE (tag);
ASSERT_MIFARE_DESFIRE (tag);
BUFFER_INIT (cmd, 34);
BUFFER_INIT (res, 1 + CMAC_LENGTH);
BUFFER_APPEND (cmd, 0x5C);
BUFFER_APPEND (cmd, 0x02);
BUFFER_APPEND_BYTES (cmd, ats, *ats);
switch (MIFARE_DESFIRE (tag)->authentication_scheme) {
case AS_LEGACY:
iso14443a_crc_append (cmd + 2 , __cmd_n - 2);
__cmd_n += 2;
break;
case AS_NEW:
desfire_crc32_append (cmd, __cmd_n);
__cmd_n += 4;
break;
}
BUFFER_APPEND (cmd, 0x80);
uint8_t *p = mifare_cryto_preprocess_data (tag, cmd, &__cmd_n, 2, MDCM_ENCIPHERED | NO_CRC | ENC_COMMAND);
DESFIRE_TRANSCEIVE2 (tag, p, __cmd_n, res);
ssize_t sn = __res_n;
p = mifare_cryto_postprocess_data (tag, res, &sn, MDCM_PLAIN | CMAC_COMMAND | CMAC_VERIFY);
return 0;
}
int
mifare_desfire_get_card_uid (MifareTag tag, char **uid)
{