]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - common/legic_prng.c
   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" 
  16 void legic_prng_init(uint8_t init
) { 
  18   if(init 
== 0) /* hack to get a always 0 keystream */ 
  21     lfsr
.b 
= (init 
<< 1) | 1; 
  24 void legic_prng_forward(int count
) { 
  26     lfsr
.a 
= lfsr
.a 
>> 1 | (lfsr
.a 
^ lfsr
.a 
>> 6) << 6; 
  27     lfsr
.b 
= lfsr
.b 
>> 1 | (lfsr
.b 
^ lfsr
.b 
>> 2 ^ lfsr
.b 
>> 3 ^ lfsr
.b 
>> 7) << 7; 
  31 uint8_t legic_prng_get_bit() { 
  32   uint8_t idx 
= 7 - ( (lfsr
.a 
& 4) | (lfsr
.a 
>> 2 & 2) | (lfsr
.a 
>> 4 & 1) ); 
  33   return lfsr
.b 
>> idx 
& 1;