def initial_relabel(wl): state_words = ['A', 'B', 'C', 'D', 'E'] initial_relabels = [''] * 5 for i in range(5): w0 = bp.word(wl, state_words[i] + bp.fi(0)) w1 = bp.word(wl, 'H' + bp.fi(i)) relabels = bp.wequal(w0, w1) initial_relabels[i] = '\n'.join(relabels) return '\n'.join(initial_relabels)
def round_ind(addition_K, addition, wl, rotation_A, i): i = bp.fi(i) add_K = addition_K.replace('x', 'E' + i) add_K = add_K.replace('c', 'a' + i) add_K = add_K.replace('z', 'b' + i) add_0 = addition.replace('x', 'b' + i) add_0 = add_0.replace('y', 'F' + i) add_0 = add_0.replace('c', 'c' + i) add_0 = add_0.replace('z', 'd' + i) add_1 = addition add_1 = add_1.replace('x', 'd' + i) A = bp.word(wl, 'A' + i, rotation_A) for j in range(wl): add_1 = add_1.replace('y' + bp.fi(j), A[j]) add_1 = add_1.replace('c', 'e' + i) add_1 = add_1.replace('z', 'f' + i) add_2 = addition.replace('x', 'f' + i) add_2 = add_2.replace('y', 'W' + i) add_2 = add_2.replace('c', 'g' + i) add_2 = add_2.replace('z', 'T' + i) return '\n'.join((add_K, add_0, add_1, add_2))
def relabel_model(length, new, old, r): w0 = bp.word(length, new) w1 = bp.word(length, old, r) return '\n'.join(bp.wequal(w0, w1))
rW = int(sys.argv[2]) rB = int(sys.argv[3]) # Relabeling states r = [''] * 5 r[0] = relabel_model(wl, 'Aa', 'Tb', 0) r[1] = relabel_model(wl, 'Ba', 'Ab', 0) r[2] = relabel_model(wl, 'Ca', 'Bb', rB) r[3] = relabel_model(wl, 'Da', 'Cb', 0) r[4] = relabel_model(wl, 'Ea', 'Db', 0) bp.store_string('./models/equations/state_relabel.txt', '\n'.join(r)) # Round functions f F = bp.word(wl, 'F') B = bp.word(wl, 'B') C = bp.word(wl, 'C') D = bp.word(wl, 'D') f0 = bp.wequal(F, bp.wor([bp.wand([B, C], 1), bp.wand([bp.wnot(B), D], 1)])) bp.store_string('./models/equations/f0.txt', '\n'.join(f0)) f1 = bp.wequal(F, bp.wxor([B, C, D])) bp.store_string('./models/equations/f1.txt', '\n'.join(f1)) f2 = bp.wequal(F, bp.wor(\ [bp.wand([B, C], 1), bp.wand([B, D], 1), bp.wand([C, D], 1)])) bp.store_string('./models/equations/f2.txt', '\n'.join(f2)) # Message scheduling W0 = bp.word(wl, 'Wa') W1 = bp.word(wl, 'Wb', rW)