CJ Kucera wrote: > Hello list, resurrecting a rather old thread from here: > > http://mail.python.org/pipermail/python-dev/2009-August/091450.html
... and one final update from me, mostly just so Google and the like will pick it up. I did actually end up packaging up something I called "czipfile," which is just the stock Python Lib/zipfile.py optimized in Cython, which provides very fast zipfile decryption. It's available here: http://pypi.python.org/pypi/czipfile So, anyone with a need for fast zipfile decryption can now head over that way. FWIW, while playing around with things, I found that you can get some pretty nontrivial performance improvements in pure Python by unrolling the decryption loop. For instance, line 608 in Lib/zipfile.py used to be: newdata = ''.join(map(self.decrypter, newdata)) Substituting the following results in some significant speed improvements (though still quite a lot slower than the C-based extension) - key0 = self.decrypter.key0 key1 = self.decrypter.key1 key2 = self.decrypter.key2 crctable = self.decrypter.crctable datalist = [] for c in newdata: k = key2 | 2 cord = ord(c) ^ (((k * (k^1)) >> 8) & 255) datalist.append(chr(cord)) key0 = ((key0 >> 8) & 0xffffff) ^ crctable[(key0 ^ cord) & 0xff] key1 = (key1 + (key0 & 255)) & 4294967295 key1 = (key1 * 134775813 + 1) & 4294967295 key2 = ((key2 >> 8) & 0xffffff) ^ crctable[(key2 ^ ((key1 >> 24) & 255)) & 0xff] self.decrypter.key0 = key0 self.decrypter.key1 = key1 self.decrypter.key2 = key2 newdata = ''.join(datalist) Anyone looking to speed up decryption who didn't want to absolutely depend on the user having czipfile installed might want to consider bundling their own modified version of Lib/zipfile.py with the above changes. Okay, that's all. Enjoy! -CJ -- WOW: Flemmy | "The ships hung in the sky in much the same p...@apocalyptech.com | way that bricks don't." - Douglas Adams, 24.24.2.3171 | _The Hitchhiker's Guide To The Galaxy_ _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com