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
) {
20 if(init
== 0) /* hack to get a always 0 keystream */
23 lfsr
.b
= (init
<< 1) | 1;
26 void legic_prng_forward(int count
) {
29 lfsr
.a
= lfsr
.a
>> 1 | (lfsr
.a
^ lfsr
.a
>> 6) << 6;
30 lfsr
.b
= lfsr
.b
>> 1 | (lfsr
.b
^ lfsr
.b
>> 2 ^ lfsr
.b
>> 3 ^ lfsr
.b
>> 7) << 7;
34 int 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;