rotor alternative?

Aaron Watters aaron at reportlab.com
Wed Nov 19 12:24:51 EST 2003


Paul Rubin <http://phr.cx@NOSPAM.invalid> wrote in message news:<7xwu9x32j2.fsf at ruckus.brouhaha.com>...
> aaron at reportlab.com (Aaron Watters) writes:
> > > Is an alternative to rotor planned?
>  > > http://athos.rutgers.edu/~aaron/python/pulver.py> 
> At first glance that function looks awful (no offense intended), and
> the implementation looks very slow.  I'd strongly advise against doing
> anything serious with it.  If you want a pure-Python cipher, please try
> 
>   http://www.nightsong.com/phr/crypto/p3.py

Offense taken :(.  Please explain (offline if you like).
It's okay to call my stuff awful, but I require a bit of
constructive criticism to go with it.

FWIW it was loosely inspired by RC4 and it seems to scramble
things up nicely.  Regarding speed: for small blocks it should
be reasonably fast for a pure python module which doesn't
use any extension modules, and it is also suitable for conversion
into a very small self contained C function, which was the intent.

But yours is much faster of course, since it uses an extension module
for the critical loop.  For larger blocks more than an order of
magnitude faster.  This is the timing I get when I modify
your test function

% python p3.py
(yours)
plain p3: 1000 5 0.22000002861 sec = 22727.2697717 bytes/sec
plain p3: 1000 20 0.261000037193 sec = 76628.3415706 bytes/sec
plain p3: 1000 200 0.520999908447 sec = 383877.226766 bytes/sec
plain p3: 100 2000 0.300000071526 sec = 666666.507721 bytes/sec
(mine)
plain pulver: 1000 5 0.210000038147 sec = 23809.5194845 bytes/sec
plain pulver: 1000 20 0.680999994278 sec = 29368.5758708 bytes/sec
plain pulver: 1000 200 5.94900000095 sec = 33619.0956409 bytes/sec
plain pulver: 100 2000 5.76800000668 sec = 34674.0637601 bytes/sec

In a C implementation I think mine would be more than competitive,
however.

The two are not precisely comparable, I think, because as far as I can
tell you just encrypt a single string, whereas mine encrypts a sequence
of strings progressively, unless I'm missing something.

Obviously, I have something really important to do, otherwise I
wouldn't be procrastinating like this :(... Enough goofing off...
   -- Aaron Watters
===
never eat anything bigger than your head. -kliban




More information about the Python-list mailing list