VirtualMailManager/pycompat/hashlib.py
branchv0.6.x
changeset 268 beb8f4421f92
child 366 d6573da35b5f
equal deleted inserted replaced
267:084300a00ee1 268:beb8f4421f92
       
     1 # -*- coding: UTF-8 -*-
       
     2 # Copyright (c) 2010, Pascal Volk
       
     3 # See COPYING for distribution information.
       
     4 
       
     5 """
       
     6     VirtualMailManager.pycompat.hashlib
       
     7 
       
     8     VirtualMailManager's minimal hashlib emulation for Python 2.4
       
     9 
       
    10     hashlib.md5(...), hashlib.sha1(...), hashlib.new('md5', ...) and
       
    11     hashlib.new('sha1', ...) will work always.
       
    12 
       
    13     When the PyCrypto module <http://www.pycrypto.org/> could be found in
       
    14     sys.path hashlib.new('md4', ...) will also work.
       
    15 
       
    16     With PyCrypto >= 2.1.0alpha1 hashlib.new('sha256', ...) and
       
    17     hashlib.sha256(...) becomes functional.
       
    18 """
       
    19 
       
    20 
       
    21 import md5 as _md5
       
    22 import sha as _sha1
       
    23 
       
    24 try:
       
    25     import Crypto
       
    26 except ImportError:
       
    27     _md4 = None
       
    28     SHA256 = None
       
    29 else:
       
    30     from Crypto.Hash import MD4 as _md4
       
    31     if hasattr(Crypto, 'version_info'):  # <- Available since v2.1.0alpha1
       
    32         from Crypto.Hash import SHA256   # SHA256 works since v2.1.0alpha1
       
    33         sha256 = SHA256.new
       
    34     else:
       
    35         SHA256 = None
       
    36     del Crypto
       
    37 
       
    38 
       
    39 compat = 0x01
       
    40 md5 = _md5.new
       
    41 sha1 = _sha1.new
       
    42 
       
    43 
       
    44 def new(name, string=''):
       
    45     """Return a new hashing object using the named algorithm, optionally
       
    46     initialized with the provided string.
       
    47     """
       
    48     if name in ('md5', 'MD5'):
       
    49         return _md5.new(string)
       
    50     if name in ('sha1', 'SHA1'):
       
    51         return _sha1.new(string)
       
    52     if not _md4:
       
    53         raise ValueError('unsupported hash type')
       
    54     if name in ('md4', 'MD4'):
       
    55         return _md4.new(string)
       
    56     if name in ('sha256', 'SHA256') and SHA256:
       
    57         return SHA256.new(string)
       
    58     raise ValueError('unsupported hash type')