http://hg.viff.dk/viff/rev/e3b5d98cdbda
changeset: 1081:e3b5d98cdbda
user: Marcel Keller <[email protected]>
date: Wed Jan 14 18:16:47 2009 +0100
summary: Compute every round directly after its preparation in AES encryption.
diffstat:
1 file changed, 38 insertions(+), 10 deletions(-)
viff/aes.py | 48 ++++++++++++++++++++++++++++++++++++++----------
diffs (72 lines):
diff -r 8d946965e46f -r e3b5d98cdbda viff/aes.py
--- a/viff/aes.py Tue Jan 13 19:00:40 2009 +0100
+++ b/viff/aes.py Wed Jan 14 18:16:47 2009 +0100
@@ -231,7 +231,7 @@
start = time.time()
def progress(x, i):
- print "Round %2d: %f" % (i, time.time() - start)
+ print "Round %d: %f" % (i, time.time() - start)
return x
expanded_key = self.key_expansion(key)
@@ -240,22 +240,50 @@
self.add_round_key(state, expanded_key[0:self.n_b])
- state[0][0].addCallback(progress, 0)
+ def get_trigger(state):
+ return state[3][self.n_b-1]
- for i in xrange(1, self.rounds):
+ state[3][self.n_b-1].addCallback(progress, 0)
+
+ def round(_, state, i):
self.byte_sub(state)
self.shift_row(state)
self.mix_column(state)
self.add_round_key(state, expanded_key[i*self.n_b:(i+1)*self.n_b])
- state[0][0].addCallback(progress, i)
+ state[3][self.n_b-1].addCallback(progress, i)
+
+ if (i < self.rounds - 1):
+ get_trigger(state).addCallback(round, state, i + 1)
+ else:
+ get_trigger(state).addCallback(final_round, state)
+
print "Round %d preparation: %f" % (i, time.time() - start)
- self.byte_sub(state)
- self.shift_row(state)
- self.add_round_key(state, expanded_key[self.rounds*self.n_b:])
+ return _
- state[0][0].addCallback(progress, self.rounds)
- print "Preparation: %f" % (time.time() - start)
+ def final_round(_, state):
+ self.byte_sub(state)
+ self.shift_row(state)
+ self.add_round_key(state, expanded_key[self.rounds*self.n_b:])
- return [byte for word in zip(*state) for byte in word]
+ state[3][self.n_b-1].addCallback(progress, self.rounds)
+
+ get_trigger(state).addCallback(finish, state)
+
+ print "Round %d preparation: %f" % (self.rounds, time.time() -
start)
+
+ return _
+
+ def finish(_, state):
+ actual_result = [byte for word in zip(*state) for byte in word]
+
+ for a, b in zip(actual_result, result):
+ a.addCallback(b.callback)
+
+ return _
+
+ round(None, state, 1)
+
+ result = [Share(self.runtime, GF256) for i in xrange(4 * self.n_b)]
+ return result
_______________________________________________
viff-commits mailing list
[email protected]
http://lists.viff.dk/listinfo.cgi/viff-commits-viff.dk