Skip to content

Instantly share code, notes, and snippets.

@asterite3
Created June 11, 2019 11:42
Show Gist options
  • Save asterite3/e27d3a909f0ef58684f49c9ed094c829 to your computer and use it in GitHub Desktop.
Save asterite3/e27d3a909f0ef58684f49c9ed094c829 to your computer and use it in GitHub Desktop.
L3LFSR keystream generator for cipher from ctf.moscow task "line"
class L3LFSR:
def __init__(self, key):
self.r1 = key[:67]
self.r2 = key[67:67+59]
self.r3 = key[-2:]
self.b1 = [67, 5, 2, 1]
self.b2 = [59, 6, 5, 4, 3, 1]
self.b3 = [2, 1]
def _clock_r(self, reg, branches):
ret = reg[len(reg) - 1]
new = 0
for i in branches:
new ^= reg[i - 1]
reg = [new] + reg[:-1]
return reg, ret
def next_bit(self):
self.r1, x1 = self._clock_r(self.r1, self.b1)
self.r2, x2 = self._clock_r(self.r2, self.b2)
self.r3, x3 = self._clock_r(self.r3, self.b3)
f = x1 ^ x2 ^ x3 ^ 1
return f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment