[Pymoul-svn] SF.net SVN: pymoul: [225] xtea/trunk/src/xtea
Status: Alpha
Brought to you by:
tiran
|
From: <ti...@us...> - 2007-03-02 17:03:28
|
Revision: 225
http://pymoul.svn.sourceforge.net/pymoul/?rev=225&view=rev
Author: tiran
Date: 2007-03-02 09:03:21 -0800 (Fri, 02 Mar 2007)
Log Message:
-----------
Added implementation switch and timing function
Modified Paths:
--------------
xtea/trunk/src/xtea/_common.py
xtea/trunk/src/xtea/tests.py
xtea/trunk/src/xtea/xtea.py
Modified: xtea/trunk/src/xtea/_common.py
===================================================================
--- xtea/trunk/src/xtea/_common.py 2007-03-02 16:28:11 UTC (rev 224)
+++ xtea/trunk/src/xtea/_common.py 2007-03-02 17:03:21 UTC (rev 225)
@@ -106,6 +106,33 @@
"""
return cls(key, **kwargs)
+ @classmethod
+ def setDefaultImpl(cls, impl='py'):
+ """Set default implementation
+ """
+ if impl == 'py':
+ cls._decrypt = cls._py_decrypt
+ cls._encrypt = cls._py_encrypt
+ elif impl == 'c':
+ assert cls._c_decrypt is not None
+ cls._decrypt = cls._c_decrypt
+ cls._encrypt = cls._c_encrypt
+ else:
+ raise ValueError(impl)
+
+ def setImpl(self, impl='py'):
+ """Set implementation for this instance
+ """
+ if impl == 'py':
+ self._decrypt = self._py_decrypt
+ self._encrypt = self._py_encrypt
+ elif impl == 'c':
+ assert self._c_decrypt is not None
+ self._decrypt = self._c_decrypt
+ self._encrypt = self._c_encrypt
+ else:
+ raise ValueError(impl)
+
def encrypt(self, block):
"""Encrypt a block
@@ -134,6 +161,10 @@
_decrypt = None
_encrypt = None
+ _c_decrypt = None
+ _c_encrypt = None
+ _py_decrypt = None
+ _py_encrypt = None
def _ecb(self, block, func):
"""Electronic Code Book encryption/decryption
Modified: xtea/trunk/src/xtea/tests.py
===================================================================
--- xtea/trunk/src/xtea/tests.py 2007-03-02 16:28:11 UTC (rev 224)
+++ xtea/trunk/src/xtea/tests.py 2007-03-02 17:03:21 UTC (rev 225)
@@ -8,7 +8,9 @@
import os
import unittest
from doctest import DocTestSuite
+from time import time
+from xtea import XTEA
class CXteaTestCase(unittest.TestCase):
def setUp(self):
@@ -24,15 +26,29 @@
def tearDown(self):
pass
+def compare_timing(cls=XTEA):
+ key = os.urandom(16)
+ data = os.urandom(1024)
+ xtea = cls(key)
+ for impl in ('c', 'py'):
+ for size in (1, 5, 10, 50):
+ d = size*data
+ xtea.setImpl(impl)
+ start = time()
+ for i in range(5):
+ enc = xtea.encrypt(d)
+ xtea.decrypt(enc)
+ print "%s: 5 times %sk data: %0.4f" % (impl, size, time() - start)
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(CXteaTestCase),
unittest.makeSuite(PyXteaTestCase),
DocTestSuite('xtea'),
- DocTestSuite('xxtea'),
+ #DocTestSuite('xxtea'),
DocTestSuite('_common'),
))
if __name__ == '__main__':
+ #compare_timing()
unittest.main(defaultTest="test_suite")
-
Modified: xtea/trunk/src/xtea/xtea.py
===================================================================
--- xtea/trunk/src/xtea/xtea.py 2007-03-02 16:28:11 UTC (rev 224)
+++ xtea/trunk/src/xtea/xtea.py 2007-03-02 17:03:21 UTC (rev 225)
@@ -154,7 +154,7 @@
return ''.join(xor)
@staticmethod
- def _py_xtea_decrypt(v, key, n=32, delta=0x9e3779b9L,
+ def _py_decrypt(v, key, n=32, delta=0x9e3779b9L,
mask=0xffffffffL):
"""Decrypt a quad
@@ -175,10 +175,8 @@
v0 = (v0 - (((v1<<4 ^ v1>>5) + v1) ^ (sum + key[sum & 3]))) & mask
return v0, v1
- _decrypt = _py_xtea_decrypt
-
@staticmethod
- def _py_xtea_encrypt(v, key, n=32, delta=0x9e3779b9L,
+ def _py_encrypt(v, key, n=32, delta=0x9e3779b9L,
mask=0xffffffffL):
"""Encrypt a quad
@@ -199,15 +197,14 @@
v1 = (v1 + (((v0<<4 ^ v0>>5) + v0) ^ (sum + key[sum>>11 & 3]))) & mask
return v0, v1
- _encrypt = _py_xtea_encrypt
-
# Try to replace core functions with optimized versions
try:
from _xtea import _c_xtea_encrypt
from _xtea import _c_xtea_decrypt
except ImportError, msg:
- pass
+ XTEA.setDefaultImpl('py')
#print msg
else:
- XTEA._encrypt = _c_xtea_encrypt
- XTEA._decrypt = _c_xtea_decrypt
+ XTEA._c_encrypt = _c_xtea_encrypt
+ XTEA._c_decrypt = _c_xtea_decrypt
+ XTEA.setDefaultImpl('c')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|