Add 3K3 basic support
This commit is contained in:
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);
|
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]) {
|
void tdes_2key_dec(void *out, const void *in, size_t length, const void *key, unsigned char iv[8]) {
|
||||||
|
|
||||||
if (length % 8) return;
|
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_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_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.
|
// Copied from des.h in desfire imp.
|
||||||
typedef unsigned long DES_KS[16][2]; /* Single-key DES key schedule */
|
typedef unsigned long DES_KS[16][2]; /* Single-key DES key schedule */
|
||||||
|
|||||||
Reference in New Issue
Block a user