From 519676afd86e3d6e75e0ee9d5fc620a160999575 Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Sun, 21 Apr 2024 15:28:24 +0200 Subject: [PATCH] test lfsr17 --- main.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index c810f4e..db3b789 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,6 @@ #!/usr/bin/env python3 +from random import randint +from math import log2 class lfsr(object): def __init__(self, state, taps): @@ -28,12 +30,23 @@ class lfsr(object): return output -key=[0]*16 -key.append(1) -taps = [16-0, 16-14] +def test_lfsr17(): + key = [randint(0, 1) for _ in range(16)] # first 16 bits + key.append(1) # prevent initial state from being {0}^17 + taps = [16-0, 16-14] + lfsr17 = lfsr(key, taps) + states = [lfsr17.state] + for _ in range(2**17-2): + lfsr17.shift() + states.append(lfsr17.state) + sorted_states = sorted(states, key=lambda x: tuple(x)) + for i in range(2**17-2): + if sorted_states[i] == sorted_states[i+1]: # compare each state with the next state in the sorted list, if 2 states are identical they should be next to each other + print(f'state {sorted_states[i]} appears at least 2 times') + return False + n_state = len(sorted_states) + n_state_log = log2(n_state+1) + print(f'all {n_state} = 2^({n_state_log})-1 states are different') + return True -lfsr17 = lfsr(key, taps) - -# Generate 100 bits -for _ in range(100): - print(lfsr17.shift(), end=' ') +test_lfsr17()