Rename due to name conflict

This commit is contained in:
Bjoern Kerler 2020-04-12 18:09:14 +02:00
commit c06864dcc7
3 changed files with 25 additions and 55 deletions

View file

@ -43,37 +43,6 @@
# define AddCrc14A(data, len) compute_crc(CRC_14443_A, (data), (len), (data)+(len), (data)+(len)+1) # define AddCrc14A(data, len) compute_crc(CRC_14443_A, (data), (len), (data)+(len), (data)+(len)+1)
#endif #endif
#define htole32(x) (x)
#define CRC32_PRESET 0xFFFFFFFF
static void crc32_byte(uint32_t *crc, const uint8_t value);
static void crc32_byte(uint32_t *crc, const uint8_t value) {
/* x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 */
const uint32_t poly = 0xEDB88320;
*crc ^= value;
for (int current_bit = 7; current_bit >= 0; current_bit--) {
int bit_out = (*crc) & 0x00000001;
*crc >>= 1;
if (bit_out)
*crc ^= poly;
}
}
void crc32_ex(const uint8_t *data, const size_t len, uint8_t *crc) {
uint32_t desfire_crc = CRC32_PRESET;
for (size_t i = 0; i < len; i++) {
crc32_byte(&desfire_crc, data[i]);
}
*((uint32_t *)(crc)) = htole32(desfire_crc);
}
void crc32_append(uint8_t *data, const size_t len) {
crc32_ex(data, len, data + len);
}
static inline void update_key_schedules(desfirekey_t key); static inline void update_key_schedules(desfirekey_t key);
static inline void update_key_schedules(desfirekey_t key) { static inline void update_key_schedules(desfirekey_t key) {
@ -101,25 +70,25 @@ void des_dec(void *out, const void *in, const void *key) {
} }
*/ */
void tdes_3key_enc(void *out, void *in, const void *key) { void des3_3key_enc(void *out, void *in, const void *key) {
des_enc(out, in, (uint8_t *)key + 0); des_enc(out, in, (uint8_t *)key + 0);
des_dec(out, out, (uint8_t *)key + 8); des_dec(out, out, (uint8_t *)key + 8);
des_enc(out, out, (uint8_t *)key + 16); des_enc(out, out, (uint8_t *)key + 16);
} }
void tdes_3key_dec(void *out, void *in, const uint8_t *key) { void des3_3key_dec(void *out, void *in, const uint8_t *key) {
des_dec(out, in, (uint8_t *)key + 16); des_dec(out, in, (uint8_t *)key + 16);
des_enc(out, out, (uint8_t *)key + 8); des_enc(out, out, (uint8_t *)key + 8);
des_dec(out, out, (uint8_t *)key + 0); des_dec(out, out, (uint8_t *)key + 0);
} }
void tdes_2key_enc(void *out, void *in, const void *key) { void des3_2key_enc(void *out, void *in, const void *key) {
des_enc(out, in, (uint8_t *)key + 0); des_enc(out, in, (uint8_t *)key + 0);
des_dec(out, out, (uint8_t *)key + 8); des_dec(out, out, (uint8_t *)key + 8);
des_enc(out, out, (uint8_t *)key + 0); des_enc(out, out, (uint8_t *)key + 0);
} }
void tdes_2key_dec(void *out, void *in, const uint8_t *key) { void des3_2key_dec(void *out, void *in, const uint8_t *key) {
des_dec(out, in, (uint8_t *)key + 0); des_dec(out, in, (uint8_t *)key + 0);
des_enc(out, out, (uint8_t *)key + 8); des_enc(out, out, (uint8_t *)key + 8);
des_dec(out, out, (uint8_t *)key + 0); des_dec(out, out, (uint8_t *)key + 0);
@ -137,8 +106,8 @@ void tdes_nxp_receive(const void *in, void *out, size_t length, const void *key,
while (length > 0) { while (length > 0) {
memcpy(temp, tin, 8); memcpy(temp, tin, 8);
if (keymode == 2) tdes_2key_dec(tout, tin, key); if (keymode == 2) des3_2key_dec(tout, tin, key);
else if (keymode == 3) tdes_3key_dec(tout, tin, key); else if (keymode == 3) des3_3key_dec(tout, tin, key);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
tout[i] = (unsigned char)(tout[i] ^ iv[i]); tout[i] = (unsigned char)(tout[i] ^ iv[i]);
@ -163,8 +132,8 @@ void tdes_nxp_send(const void *in, void *out, size_t length, const void *key, un
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
tin[i] = (unsigned char)(tin[i] ^ iv[i]); tin[i] = (unsigned char)(tin[i] ^ iv[i]);
if (keymode == 2) tdes_2key_enc(tout, tin, key); if (keymode == 2) des3_2key_enc(tout, tin, key);
else if (keymode == 3) tdes_3key_enc(tout, tin, key); else if (keymode == 3) des3_3key_enc(tout, tin, key);
memcpy(iv, tout, 8); memcpy(iv, tout, 8);
@ -815,26 +784,26 @@ void mifare_cypher_single_block(desfirekey_t key, uint8_t *data, uint8_t *ivect,
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
tdes_2key_enc(edata, data, key->data); des3_2key_enc(edata, data, key->data);
break; break;
case MCO_DECYPHER: case MCO_DECYPHER:
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);
tdes_2key_dec(data, edata, key->data); des3_2key_dec(data, edata, key->data);
break; break;
} }
break; break;
case T_3K3DES: case T_3K3DES:
switch (operation) { switch (operation) {
case MCO_ENCYPHER: case MCO_ENCYPHER:
tdes_3key_enc(edata, data, key->data); des3_3key_enc(edata, data, key->data);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_ENCRYPT);
break; break;
case MCO_DECYPHER: case MCO_DECYPHER:
tdes_3key_enc(data, edata, key->data); des3_3key_enc(data, edata, key->data);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);

View file

@ -13,6 +13,7 @@
#include "crc16.h" #include "crc16.h"
#include "mbedtls/aes.h" #include "mbedtls/aes.h"
#include "commonutil.h" #include "commonutil.h"
#include "des.h"
#include "util.h" #include "util.h"
#include "mifare.h" #include "mifare.h"
#include "ticks.h" #include "ticks.h"

View file

@ -446,25 +446,25 @@ void des_dec(void *out, const void *in, const void *key) {
} }
*/ */
void tdes_3key_enc(void *out, void *in, const void *key) { void des3_3key_enc(void *out, void *in, const void *key) {
des_enc(out, in, (uint8_t *)key + 0); des_enc(out, in, (uint8_t *)key + 0);
des_dec(out, out, (uint8_t *)key + 8); des_dec(out, out, (uint8_t *)key + 8);
des_enc(out, out, (uint8_t *)key + 16); des_enc(out, out, (uint8_t *)key + 16);
} }
void tdes_3key_dec(void *out, void *in, const uint8_t *key) { void des3_3key_dec(void *out, void *in, const uint8_t *key) {
des_dec(out, in, (uint8_t *)key + 16); des_dec(out, in, (uint8_t *)key + 16);
des_enc(out, out, (uint8_t *)key + 8); des_enc(out, out, (uint8_t *)key + 8);
des_dec(out, out, (uint8_t *)key + 0); des_dec(out, out, (uint8_t *)key + 0);
} }
void tdes_2key_enc(void *out, void *in, const void *key) { void des3_2key_enc(void *out, void *in, const void *key) {
des_enc(out, in, (uint8_t *)key + 0); des_enc(out, in, (uint8_t *)key + 0);
des_dec(out, out, (uint8_t *)key + 8); des_dec(out, out, (uint8_t *)key + 8);
des_enc(out, out, (uint8_t *)key + 0); des_enc(out, out, (uint8_t *)key + 0);
} }
void tdes_2key_dec(void *out, void *in, const uint8_t *key) { void des3_2key_dec(void *out, void *in, const uint8_t *key) {
des_dec(out, in, (uint8_t *)key + 0); des_dec(out, in, (uint8_t *)key + 0);
des_enc(out, out, (uint8_t *)key + 8); des_enc(out, out, (uint8_t *)key + 8);
des_dec(out, out, (uint8_t *)key + 0); des_dec(out, out, (uint8_t *)key + 0);
@ -482,8 +482,8 @@ void tdes_nxp_receive(const void *in, void *out, size_t length, const void *key,
while (length > 0) { while (length > 0) {
memcpy(temp, tin, 8); memcpy(temp, tin, 8);
if (keymode == 2) tdes_2key_dec(tout, tin, key); if (keymode == 2) des3_2key_dec(tout, tin, key);
else if (keymode == 3) tdes_3key_dec(tout, tin, key); else if (keymode == 3) des3_3key_dec(tout, tin, key);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
tout[i] = (unsigned char)(tout[i] ^ iv[i]); tout[i] = (unsigned char)(tout[i] ^ iv[i]);
@ -508,8 +508,8 @@ void tdes_nxp_send(const void *in, void *out, size_t length, const void *key, un
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
tin[i] = (unsigned char)(tin[i] ^ iv[i]); tin[i] = (unsigned char)(tin[i] ^ iv[i]);
if (keymode == 2) tdes_2key_enc(tout, tin, key); if (keymode == 2) des3_2key_enc(tout, tin, key);
else if (keymode == 3) tdes_3key_enc(tout, tin, key); else if (keymode == 3) des3_3key_enc(tout, tin, key);
memcpy(iv, tout, 8); memcpy(iv, tout, 8);
@ -1160,26 +1160,26 @@ void mifare_cypher_single_block(desfirekey_t key, uint8_t *data, uint8_t *ivect,
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
tdes_2key_enc(edata, data, key->data); des3_2key_enc(edata, data, key->data);
break; break;
case MCO_DECYPHER: case MCO_DECYPHER:
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);
tdes_2key_dec(data, edata, key->data); des3_2key_dec(data, edata, key->data);
break; break;
} }
break; break;
case T_3K3DES: case T_3K3DES:
switch (operation) { switch (operation) {
case MCO_ENCYPHER: case MCO_ENCYPHER:
tdes_3key_enc(edata, data, key->data); des3_3key_enc(edata, data, key->data);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_ENCRYPT);
break; break;
case MCO_DECYPHER: case MCO_DECYPHER:
tdes_3key_enc(data, edata, key->data); des3_3key_enc(data, edata, key->data);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks3), DES_DECRYPT);
// DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT); // DES_ecb_encrypt ((DES_cblock *) edata, (DES_cblock *) data, &(key->ks2), DES_ENCRYPT);
// DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT); // DES_ecb_encrypt ((DES_cblock *) data, (DES_cblock *) edata, &(key->ks1), DES_DECRYPT);