]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - common/legic_prng.c
93229251124563174032c946d693059b3a735ce9
1 //-----------------------------------------------------------------------------
2 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 // at your option, any later version. See the LICENSE.txt file for the text of
5 //-----------------------------------------------------------------------------
6 // LEFIC's obfuscation function
7 //-----------------------------------------------------------------------------
9 #include "legic_prng.h"
17 void legic_prng_init(uint8_t init
) {
19 lfsr
.b
= 0; // hack to get a always 0 keystream
22 lfsr
.b
= (init
<< 1) | 1;
25 void legic_prng_forward(int count
) {
28 // According: http://www.proxmark.org/forum/viewtopic.php?pid=5437#p5437
29 lfsr
.a
= (lfsr
.a
>> 1 | (lfsr
.a
^ lfsr
.a
>> 6) << 6) & 0x7F;
30 lfsr
.b
= lfsr
.b
>> 1 | (lfsr
.b
^ lfsr
.b
>> 2 ^ lfsr
.b
>> 3 ^ lfsr
.b
>> 7) << 7;
34 uint32_t legic_prng_count() {
38 uint8_t legic_prng_get_bit() {
39 uint8_t idx
= 7 - ( (lfsr
.a
& 4) | (lfsr
.a
>> 2 & 2) | (lfsr
.a
>> 4 & 1) );
40 return lfsr
.b
>> idx
& 1;