communication mode to file mode and vice versa

This commit is contained in:
merlokk 2021-07-28 00:06:20 +03:00
commit 2ed139bfc3
2 changed files with 41 additions and 0 deletions

View file

@ -345,6 +345,44 @@ uint8_t DesfireDESKeyGetVersion(uint8_t *key) {
return version; return version;
} }
DesfireCommunicationMode DesfireFileCommModeToCommMode(uint8_t file_comm_mode) {
DesfireCommunicationMode mode = DCMNone;
switch (file_comm_mode & 0x03) {
case 0x00:
case 0x02:
mode = DCMPlain;
break;
case 0x01:
mode = DCMMACed;
break;
case 0x03:
mode = DCMEncrypted;
break;
default:
break;
}
return mode;
}
uint8_t DesfireCommModeToFileCommMode(DesfireCommunicationMode comm_mode) {
uint8_t fmode = DCMNone;
switch (comm_mode) {
case DCMPlain:
fmode = 0x00;
break;
case DCMMACed:
fmode = 0x01;
break;
case DCMEncrypted:
case DCMEncryptedPlain:
fmode = 0x11;
break;
case DCMNone:
break;
}
return fmode;
}
void desfire_crc32(const uint8_t *data, const size_t len, uint8_t *crc) { void desfire_crc32(const uint8_t *data, const size_t len, uint8_t *crc) {
crc32_ex(data, len, crc); crc32_ex(data, len, crc);
} }

View file

@ -105,6 +105,9 @@ void DesfireCryptoCMAC(DesfireContext *ctx, uint8_t *srcdata, size_t srcdatalen,
void DesfireDESKeySetVersion(uint8_t *key, DesfireCryptoAlgorythm keytype, uint8_t version); void DesfireDESKeySetVersion(uint8_t *key, DesfireCryptoAlgorythm keytype, uint8_t version);
uint8_t DesfireDESKeyGetVersion(uint8_t *key); uint8_t DesfireDESKeyGetVersion(uint8_t *key);
DesfireCommunicationMode DesfireFileCommModeToCommMode(uint8_t file_comm_mode);
uint8_t DesfireCommModeToFileCommMode(DesfireCommunicationMode comm_mode);
void desfire_crc32(const uint8_t *data, const size_t len, uint8_t *crc); void desfire_crc32(const uint8_t *data, const size_t len, uint8_t *crc);
void desfire_crc32_append(uint8_t *data, const size_t len); void desfire_crc32_append(uint8_t *data, const size_t len);
bool desfire_crc32_check(uint8_t *data, const size_t len, uint8_t *crc); bool desfire_crc32_check(uint8_t *data, const size_t len, uint8_t *crc);