mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-21 05:43:23 -07:00
Upgrade crapto1 library to v3.3 (#232)
- fix standalone tools mfkey32, mfkey64 and nonce2key to use common crapto1 library - fix compiler warnings in tools/mfkey/mfkey64.c and tools/nonce2key/nonce2key.c - allow crapto1.c to compile on ARM hosts - add @iceman1001's readme.txt to tools/mfkey
This commit is contained in:
parent
62fab50902
commit
0ca9bc0e99
10 changed files with 150 additions and 195 deletions
|
@ -23,33 +23,34 @@
|
|||
#define SWAPENDIAN(x)\
|
||||
(x = (x >> 8 & 0xff00ff) | (x & 0xff00ff) << 8, x = x >> 16 | x << 16)
|
||||
|
||||
#if defined(__arm__)
|
||||
#if defined(__arm__) && !defined(__linux__) && !defined(_WIN32) // bare metal ARM lacks malloc()/free()
|
||||
void crypto1_create(struct Crypto1State *s, uint64_t key)
|
||||
{
|
||||
#else
|
||||
struct Crypto1State * crypto1_create(uint64_t key)
|
||||
{
|
||||
struct Crypto1State *s = malloc(sizeof(*s));
|
||||
#endif
|
||||
int i;
|
||||
|
||||
for(i = 47;s && i > 0; i -= 2) {
|
||||
s->odd = s->odd << 1 | BIT(key, (i - 1) ^ 7);
|
||||
s->even = s->even << 1 | BIT(key, i ^ 7);
|
||||
}
|
||||
#if defined(__arm__)
|
||||
return;
|
||||
#else
|
||||
return s;
|
||||
#endif
|
||||
}
|
||||
#if defined(__arm__)
|
||||
void crypto1_destroy(struct Crypto1State *state)
|
||||
{
|
||||
state->odd = 0;
|
||||
state->even = 0;
|
||||
}
|
||||
#else
|
||||
struct Crypto1State * crypto1_create(uint64_t key)
|
||||
{
|
||||
struct Crypto1State *s = malloc(sizeof(*s));
|
||||
int i;
|
||||
|
||||
for(i = 47;s && i > 0; i -= 2) {
|
||||
s->odd = s->odd << 1 | BIT(key, (i - 1) ^ 7);
|
||||
s->even = s->even << 1 | BIT(key, i ^ 7);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
void crypto1_destroy(struct Crypto1State *state)
|
||||
{
|
||||
free(state);
|
||||
|
@ -65,8 +66,7 @@ void crypto1_get_lfsr(struct Crypto1State *state, uint64_t *lfsr)
|
|||
}
|
||||
uint8_t crypto1_bit(struct Crypto1State *s, uint8_t in, int is_encrypted)
|
||||
{
|
||||
uint32_t feedin;
|
||||
uint32_t tmp;
|
||||
uint32_t feedin, t;
|
||||
uint8_t ret = filter(s->odd);
|
||||
|
||||
feedin = ret & !!is_encrypted;
|
||||
|
@ -75,9 +75,7 @@ uint8_t crypto1_bit(struct Crypto1State *s, uint8_t in, int is_encrypted)
|
|||
feedin ^= LF_POLY_EVEN & s->even;
|
||||
s->even = s->even << 1 | parity(feedin);
|
||||
|
||||
tmp = s->odd;
|
||||
s->odd = s->even;
|
||||
s->even = tmp;
|
||||
t = s->odd, s->odd = s->even, s->even = t;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -94,8 +92,8 @@ uint32_t crypto1_word(struct Crypto1State *s, uint32_t in, int is_encrypted)
|
|||
{
|
||||
uint32_t i, ret = 0;
|
||||
|
||||
for (i = 0; i < 4; ++i, in <<= 8)
|
||||
ret = ret << 8 | crypto1_byte(s, in >> 24, is_encrypted);
|
||||
for (i = 0; i < 32; ++i)
|
||||
ret |= crypto1_bit(s, BEBIT(in, i), is_encrypted) << (i ^ 24);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue