Source code for wheezy.core.feistel
""" ``feistel`` module.
"""
def make_feistel_number(f):
[docs] """ Generate pseudo random consistent reversal number
per Feistel cypher algorithm.
see http://en.wikipedia.org/wiki/Feistel_cipher
>>> feistel_number = make_feistel_number(sample_f)
>>> feistel_number(1)
573852158
>>> feistel_number(2)
1788827948
>>> feistel_number(123456789)
1466105040
Reversable
>>> feistel_number(1466105040)
123456789
>>> feistel_number(1788827948)
2
>>> feistel_number(573852158)
1
"""
def feistel_number(n):
l = (n >> 16) & 65535
r = n & 65535
for i in (1, 2, 3):
l, r = r, l ^ f(r)
return ((r & 65535) << 16) + l
return feistel_number
def sample_f(x):
return int((((1366 * x + 150889) % 714025) * 32767) // 714025)