コード例 #1
0
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)
コード例 #2
0
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))
コード例 #3
0
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))
コード例 #4
0
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)