mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
fix: hf mfu pwdgen - xyz
This commit is contained in:
parent
14e0b8e2df
commit
08f40ef310
1 changed files with 39 additions and 37 deletions
|
@ -34,7 +34,7 @@
|
||||||
// XYZ 3D printing
|
// XYZ 3D printing
|
||||||
// Vinglock
|
// Vinglock
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
static void transform_D(uint8_t *ru) {
|
void transform_D(uint8_t* ru) {
|
||||||
|
|
||||||
const uint32_t c_D[] = {
|
const uint32_t c_D[] = {
|
||||||
0x6D835AFC, 0x7D15CD97, 0x0942B409, 0x32F9C923, 0xA811FB02, 0x64F121E8,
|
0x6D835AFC, 0x7D15CD97, 0x0942B409, 0x32F9C923, 0xA811FB02, 0x64F121E8,
|
||||||
|
@ -49,16 +49,12 @@ static void transform_D(uint8_t *ru) {
|
||||||
uint8_t p = 0;
|
uint8_t p = 0;
|
||||||
uint32_t v1 = ((ru[3] << 24) | (ru[2] << 16) | (ru[1] << 8) | ru[0]) + c_D[p++];
|
uint32_t v1 = ((ru[3] << 24) | (ru[2] << 16) | (ru[1] << 8) | ru[0]) + c_D[p++];
|
||||||
uint32_t v2 = ((ru[7] << 24) | (ru[6] << 16) | (ru[5] << 8) | ru[4]) + c_D[p++];
|
uint32_t v2 = ((ru[7] << 24) | (ru[6] << 16) | (ru[5] << 8) | ru[4]) + c_D[p++];
|
||||||
|
for (i = 0; i < 12; i += 2)
|
||||||
for (i = 0; i < 12; i += 2) {
|
{
|
||||||
uint32_t xor1 = v1 ^ v2;
|
uint32_t t1 = PM3_ROTL(v1 ^ v2, v2 & 0x1F) + c_D[p++];
|
||||||
uint32_t t1 = ROTL(xor1, v2 & 0x1F) + c_D[p++];
|
uint32_t t2 = PM3_ROTL(v2 ^ t1, t1 & 0x1F) + c_D[p++];
|
||||||
uint32_t xor2 = v2 ^ t1;
|
v1 = PM3_ROTL(t1 ^ t2, t2 & 0x1F) + c_D[p++];
|
||||||
uint32_t t2 = ROTL(xor2, t1 & 0x1F) + c_D[p++];
|
v2 = PM3_ROTL(t2 ^ v1, v1 & 0x1F) + c_D[p++];
|
||||||
uint32_t xor3 = t1 ^ t2;
|
|
||||||
uint32_t xor4 = t2 ^ v1;
|
|
||||||
v1 = ROTL(xor3, t2 & 0x1F) + c_D[p++];
|
|
||||||
v2 = ROTL(xor4, v1 & 0x1F) + c_D[p++];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Re-use ru
|
//Re-use ru
|
||||||
|
@ -130,17 +126,23 @@ uint32_t ul_ev1_pwdgenC(uint8_t *uid) {
|
||||||
|
|
||||||
// XYZ 3d printing pwd generation algo nickname D.
|
// XYZ 3d printing pwd generation algo nickname D.
|
||||||
uint32_t ul_ev1_pwdgenD(uint8_t *uid) {
|
uint32_t ul_ev1_pwdgenD(uint8_t *uid) {
|
||||||
|
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
uint8_t r = (uid[1] + uid[3] + uid[5]) & 7; // rotation offset
|
// rotation offset
|
||||||
uint8_t ru[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // rotated UID
|
uint8_t r = (uid[1] + uid[3] + uid[5]) & 7;
|
||||||
|
|
||||||
|
// rotated UID
|
||||||
|
uint8_t ru[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
for (i = 0; i < 7; i++)
|
for (i = 0; i < 7; i++)
|
||||||
ru[(i + r) & 7] = uid[i];
|
ru[(i + r) & 7] = uid[i];
|
||||||
|
|
||||||
transform_D(ru);
|
transform_D(ru);
|
||||||
|
|
||||||
|
// offset
|
||||||
|
r = (ru[0] + ru[2] + ru[4] + ru[6]) & 3;
|
||||||
|
|
||||||
// calc key
|
// calc key
|
||||||
uint32_t pwd = 0;
|
uint32_t pwd = 0;
|
||||||
r = (ru[0] + ru[2] + ru[4] + ru[6]) & 3; // offset
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
pwd = ru[i + r] + (pwd << 8);
|
pwd = ru[i + r] + (pwd << 8);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue