http://hg.viff.dk/viff/rev/3be465a9f016
changeset: 1077:3be465a9f016
user:      Marcel Keller <[email protected]>
date:      Mon Jan 12 15:26:47 2009 +0100
summary:   AES encryption added.

diffstat:

2 files changed, 55 insertions(+)
viff/aes.py           |   42 ++++++++++++++++++++++++++++++++++++++++++
viff/test/test_aes.py |   13 +++++++++++++

diffs (69 lines):

diff -r e77c20718de2 -r 3be465a9f016 viff/aes.py
--- a/viff/aes.py       Mon Jan 12 15:23:53 2009 +0100
+++ b/viff/aes.py       Mon Jan 12 15:26:47 2009 +0100
@@ -199,3 +199,45 @@
             expanded_key.append(new_word)
 
         return expanded_key
+
+    def preprocess(self, input):
+        if (isinstance(input, str)):
+            return [Share(self.runtime, GF256, GF256(ord(c))) 
+                    for c in input]
+        else:
+            for byte in input:
+                assert byte.field == GF256, \
+                    "Input must be a list of GF256 elements " \
+                    "or of shares thereof."
+            return input
+
+    def encrypt(self, cleartext, key):
+        """Rijndael encryption.
+
+        Cleartext and key should be either a string or a list of bytes 
+        (possibly shared as elements of GF256)."""
+
+        assert len(cleartext) == 4 * self.n_b, "Wrong length of cleartext."
+        assert len(key) == 4 * self.n_k, "Wrong length of key."
+
+        cleartext = self.preprocess(cleartext)
+        key = self.preprocess(key)
+
+        state = [cleartext[i::4] for i in xrange(4)]
+        key = [key[4*i:4*i+4] for i in xrange(self.n_k)]
+
+        expanded_key = self.key_expansion(key)
+
+        self.add_round_key(state, expanded_key[0:self.n_b])
+
+        for i in xrange(1, self.rounds):
+            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])
+
+        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]
diff -r e77c20718de2 -r 3be465a9f016 viff/test/test_aes.py
--- a/viff/test/test_aes.py     Mon Jan 12 15:23:53 2009 +0100
+++ b/viff/test/test_aes.py     Mon Jan 12 15:26:47 2009 +0100
@@ -116,3 +116,16 @@
                     word /= 256
 
         self.verify(runtime, result, expected_result)
+
+    @protocol
+    def test_encrypt(self, runtime):
+        cleartext = "Encrypt this!!!!"
+        key = "Supposed to be secret!?!"
+
+        aes = AES(runtime, 192)
+        r = rijndael(key)
+
+        result = aes.encrypt(cleartext, key)
+        expected = [ord(c) for c in r.encrypt(cleartext)]
+
+        return self.verify(runtime, [result], [expected])
_______________________________________________
viff-commits mailing list
[email protected]
http://lists.viff.dk/listinfo.cgi/viff-commits-viff.dk

Reply via email to