Difference between revisions of "PyCryptoPlus"

From YobiWiki
Jump to navigation Jump to search
m (→‎Setup Script: added info on setuptools)
Line 141: Line 141:
   
 
==== Setup Script ====
 
==== Setup Script ====
  +
===== distutils vs setuptools =====
 
  +
Dependencies checking on install: some info [http://blog.doughellmann.com/2007/11/requiring-packages-with-distutils.html here].
  +
:It seems that the 'requires' keyword in distutils has only a purpose of documentation, but 'install_requires' in setuptools really takes care of dependencies: availability of dependencies will be checked. If a package is not available, it will be checked for on [http://pypi.python.org/pypi pypi] and installed automatically.
  +
===== distutils =====
 
* setup.py
 
* setup.py
 
** creating a distribution tar.gz: "python setup.py sdist"
 
** creating a distribution tar.gz: "python setup.py sdist"
 
** installing the source distribution (sdist):<br>- untar .tar.gz: "cd dist && tar zxfv CryptoPlus-1.0.tar.gz -C ~/"<br>- "cd ~/CryptoPlus-1.0 && python setup.py install"
 
** installing the source distribution (sdist):<br>- untar .tar.gz: "cd dist && tar zxfv CryptoPlus-1.0.tar.gz -C ~/"<br>- "cd ~/CryptoPlus-1.0 && python setup.py install"
  +
===== setuptools ======
  +
* manual: http://peak.telecommunity.com/DevCenter/setuptools
  +
* it isn't installed by default on debian
  +
** apt-get install python-setuptools
   
 
===Test Vectors===
 
===Test Vectors===

Revision as of 10:00, 30 September 2008

Back to SAGE & cryptology

Differences with pycrypto

CryptoPlus PyCrypto
Block Ciphers
Block cipher algorithms
Serpent Py
Blowfish Py C
Twofish Py
Idea C
DES Py C
3DES Py C
AES Py C
Rijndael Py
Present
Modes of operation
CMAC Py
XCBC
CBC-MAC
CCM
GCM
ECB Py C
CBC Py C
CTR Py C
LRW
XTS Py
MDC-2
Paddings
bit padding Py
zeros Py
PKCS7 Py
PKCS12 Py
ISO 10126 Py
ANSI X.923 Py


  • ciphers from pycrypto are being used with the python chaining modes and not the original pycrypto ones
    => plaintext can be supplied in arbitrary sizes instead of multiples of the blocksize like in pycrypto: the new chaining modes keep a cache to encrypt/decrypt data once the cachesize holds at least a blocksize of data
  • new possibilities:
    • Rijndael, Serpent, Twofish
      • Rijndael is limited to blocksizes of 128, 192 and 256 bits
    • CMAC, XTS, CTR
      • XTS is usable for ciphers with blocksizes of 16 bytes => XTS-AES, Serpent, Twofish
      • XTS encrypts the given input at once while all other chain modes encrypt only when a block plaintext is available in the cache
      • CMAC is usable for blocksizes of 8 and 16 bytes
    • OFB,CFB and CTR can be accessed as a stream cipher (you get the encrypted message immediately, you don't have to wait until a complete block of plaintext has been provided to the cipher)
  • test functions are available via doctests and extensive tests that loop through dictionary of test vectors
    • new pycrypto version will have it's own test bench for ciphers, this is not implemented yet

TODO

  • add chaining modes: CMAC, CTR mod?
  • further importing of pycrypto
  • make test vectors available as variables
  • add tests:
    • CBC for serpent, twofish, blowfish
    • XTS is only tested by comparing deciphered ciphertext, not by checking ciphertext: XTS-AES doctest done
  • check other implementation of Blowfish
  • final() method of chains
    • add a cipher.final() method? pycrypto doesn't have it, but it doesn't really conflict with the pycrypto API. It will just extend it
    • final() method should use padding. Choose padding function at initialization of the cipher => again: extending the API
  • XTS
    • make other blocksizes available besides 16 bytes?
  • CMAC
    • make other blocksizes available besides 8 and 16 bytes?
    • supply XTS keys by splitting 1 big key or by supplying two keys?
  • add rijndael instead of only AES
  • add docstring to every "new" function of every module, explaining what should be passed as arguments (probably the same for every function)
    Move doctests there so they are easily viewable
  • check GF2 in XTS + can it be replaced by Sage's implementation of GF2 ( -> [1]? ) ?
    • decision: stays the way it is. When Sage's GF2 would be used, then CryptoPlus wouldn't work without sage.
  • use unittest for test functions
  • check development of pycrypto:
    • Util.Counter & Util._counter
    • SelfTest: usable to perform the test for python algo's in CryptoPlus if testvectors are in right format?

Tests available

  • Doctests
    • Blowfish: ECB, CBC, CFB, OFB
    • all chain modes in AES
  • Extensive external test (via tester.py)
    • DES,TDES2,TDES3: ECB
    • Serpent 128/192/256: ECB
    • CMAC: AES128/192/256
    • XTS: AES128/256 and plaintext multiples and non-multiples of 16 bytes

Licenses

  • used from python truecrypt implementation
    all original code is under MIT license (much freedom according to [2])
    • pyTwofish (untouched)
      python truecrypt author isn't the original author = > extra copyright notice that should be left in place
    • pyserpent (untouched)
      python truecrypt author isn't the original author = > extra copyright notice that should be left in place
    • XTS (modified)
      python truecrypt author is the original author => only MIT License
    • GF2n.py(untouched)
      python truecrypt author is the original author => only MIT License
  • pyblowfish (untouched)
    gpl or artistic license
    To not affect the rest of the distribution we've to redistribute it only under Artistic license terms
  • rijndael.py (untouched)
    using tls lite (public domain) implementation which uses code from Bram Cohen (public domain)
  • pyDes (untouched)
    public domain according to its homepage
  • blockciphers CBC, ECB, CTR from [3] (modified)
    keep copyright notice in place?
  • CMAC: omac.py
    GPL but not really used it, just used as a starting point

Info

Python

Setup Script

distutils vs setuptools

Dependencies checking on install: some info here.

It seems that the 'requires' keyword in distutils has only a purpose of documentation, but 'install_requires' in setuptools really takes care of dependencies: availability of dependencies will be checked. If a package is not available, it will be checked for on pypi and installed automatically.
distutils
  • setup.py
    • creating a distribution tar.gz: "python setup.py sdist"
    • installing the source distribution (sdist):
      - untar .tar.gz: "cd dist && tar zxfv CryptoPlus-1.0.tar.gz -C ~/"
      - "cd ~/CryptoPlus-1.0 && python setup.py install"
setuptools =

Test Vectors

Chaining Modes

Ciphers