mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-24 08:05:13 +08:00
Add 3K3 basic support
This commit is contained in:
parent
327d8a8bfe
commit
fceae52e68
2 changed files with 78 additions and 24 deletions
100
armsrc/des.c
100
armsrc/des.c
|
@ -388,30 +388,6 @@ void tdes_dec(void *out, void *in, const uint8_t *key) {
|
|||
des_dec(out, out, (uint8_t *)key + 0);
|
||||
}
|
||||
|
||||
void tdes_2key_enc(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||
|
||||
if (length % 8) return;
|
||||
|
||||
uint8_t i;
|
||||
uint8_t *tin = (uint8_t *) in;
|
||||
uint8_t *tout = (uint8_t *) out;
|
||||
|
||||
while (length > 0) {
|
||||
for (i = 0; i < 8; i++)
|
||||
tout[i] = (unsigned char)(tin[i] ^ iv[i]);
|
||||
|
||||
des_enc(tout, tin, (uint8_t *)key + 0);
|
||||
des_dec(tout, tout, (uint8_t *)key + 8);
|
||||
des_enc(tout, tout, (uint8_t *)key + 0);
|
||||
|
||||
memcpy(iv, tout, 8);
|
||||
|
||||
tin += 8;
|
||||
tout += 8;
|
||||
length -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
void tdes_2key_dec(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||
|
||||
if (length % 8) return;
|
||||
|
@ -439,6 +415,82 @@ void tdes_2key_dec(void *out, const void *in, size_t length, const void *key, un
|
|||
}
|
||||
}
|
||||
|
||||
void tdes_2key_enc(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||
|
||||
if (length % 8) return;
|
||||
|
||||
uint8_t i;
|
||||
uint8_t *tin = (uint8_t *) in;
|
||||
uint8_t *tout = (uint8_t *) out;
|
||||
|
||||
while (length > 0) {
|
||||
for (i = 0; i < 8; i++)
|
||||
tout[i] = (unsigned char)(tin[i] ^ iv[i]);
|
||||
|
||||
des_enc(tout, tin, (uint8_t *)key + 0);
|
||||
des_dec(tout, tout, (uint8_t *)key + 8);
|
||||
des_enc(tout, tout, (uint8_t *)key + 0);
|
||||
|
||||
memcpy(iv, tout, 8);
|
||||
|
||||
tin += 8;
|
||||
tout += 8;
|
||||
length -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
void tdes_3key_enc(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||
|
||||
if (length % 8) return;
|
||||
|
||||
uint8_t i;
|
||||
uint8_t *tin = (uint8_t *) in;
|
||||
uint8_t *tout = (uint8_t *) out;
|
||||
|
||||
while (length > 0) {
|
||||
for (i = 0; i < 8; i++)
|
||||
tout[i] = (unsigned char)(tin[i] ^ iv[i]);
|
||||
|
||||
des_enc(tout, tin, (uint8_t *)key + 0);
|
||||
des_dec(tout, tout, (uint8_t *)key + 8);
|
||||
des_enc(tout, tout, (uint8_t *)key + 16);
|
||||
|
||||
memcpy(iv, tout, 8);
|
||||
|
||||
tin += 8;
|
||||
tout += 8;
|
||||
length -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
void tdes_3key_dec(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||
|
||||
if (length % 8) return;
|
||||
|
||||
uint8_t i;
|
||||
unsigned char temp[8];
|
||||
uint8_t *tin = (uint8_t *) in;
|
||||
uint8_t *tout = (uint8_t *) out;
|
||||
|
||||
while (length > 0) {
|
||||
memcpy(temp, tin, 8);
|
||||
|
||||
des_dec(tout, tin, (uint8_t *)key + 0);
|
||||
des_enc(tout, tout, (uint8_t *)key + 8);
|
||||
des_dec(tout, tout, (uint8_t *)key + 16);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
tout[i] = (unsigned char)(tout[i] ^ iv[i]);
|
||||
|
||||
memcpy(iv, temp, 8);
|
||||
|
||||
tin += 8;
|
||||
tout += 8;
|
||||
length -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
|
@ -104,6 +104,8 @@ void tdes_dec(void *out, void *in, const uint8_t *key);
|
|||
|
||||
void tdes_2key_enc(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]);
|
||||
void tdes_2key_dec(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]);
|
||||
void tdes_3key_enc(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]);
|
||||
void tdes_3key_dec(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]);
|
||||
|
||||
// Copied from des.h in desfire imp.
|
||||
typedef unsigned long DES_KS[16][2]; /* Single-key DES key schedule */
|
||||
|
|
Loading…
Reference in a new issue