Source code for M2Crypto.util

from __future__ import absolute_import
"""
    M2Crypto utility routines.

    Copyright (c) 1999-2004 Ng Pheng Siong. All rights reserved.

    Portions created by Open Source Applications Foundation (OSAF) are
    Copyright (C) 2004 OSAF. All Rights Reserved.
"""

import binascii
import logging
import sys

# This means "Python 2.7 or higher" so it is True for py3k as well
py27plus = sys.version_info[:2] > (2, 6)  # type: bool

from M2Crypto import m2, six
if py27plus:
    from typing import AnyStr, Tuple, Union  # noqa
    # see https://github.com/python/typeshed/issues/222
    AddrType = Union[Tuple[str, int], str]

log = logging.getLogger('util')


[docs]class UtilError(Exception): pass
m2.util_init(UtilError)
[docs]def pkcs5_pad(data, blklen=8): # type: (str, int) -> str pad = (8 - (len(data) % 8)) return data + chr(pad) * pad
[docs]def pkcs7_pad(data, blklen): # type: (str, int) -> str if blklen > 255: raise ValueError('illegal block size') pad = (blklen - (len(data) % blklen)) return data + chr(pad) * pad # before the introduction of py3{bytes,str}, python2 code # was just using args as-is
if six.PY2: def py3bytes(x): # type: (AnyStr) -> Optional[bytes,bytearray] if isinstance(x, unicode): return x.encode('utf8') elif isinstance(x, (bytearray, str)): return x else: raise TypeError('No string argument provided') def py3str(x): # type: (Optional[str,bytearray]) -> str if isinstance(x, bytearray): return str(x) elif isinstance(x, (str, unicode)): return x else: raise TypeError('No string argument provided') else:
[docs] def py3bytes(x): # type: (AnyStr) -> Optional[bytes,bytearray] if isinstance(x, str): return bytes(x, encoding='utf8') elif isinstance(x, (bytes, bytearray)): return x else: raise TypeError('No string argument provided')
[docs] def py3str(x): # type: (Optional[AnyStr,bytearray]) -> str if isinstance(x, (bytes, bytearray)): return x.decode('utf8') elif isinstance(x, str): return x else: raise TypeError('No string argument provided')
[docs]def bin_to_hex(b): # type: (bytes) -> str return py3str(binascii.b2a_base64(b)[:-1])
[docs]def octx_to_num(x): # type: (bytes) -> int return int(binascii.hexlify(x), 16)
[docs]def genparam_callback(p, n, out=sys.stdout): # type: (int, Any, file) -> None ch = ['.', '+', '*', '\n'] out.write(ch[p]) out.flush()
[docs]def quiet_genparam_callback(p, n, out): # type: (Any, Any, Any) -> None pass
[docs]def passphrase_callback(v, prompt1='Enter passphrase:', prompt2='Verify passphrase:'): # type: (bool, str, str) -> Optional[str] from getpass import getpass while 1: try: p1 = getpass(prompt1) if v: p2 = getpass(prompt2) if p1 == p2: break else: break except KeyboardInterrupt: return None return p1
[docs]def no_passphrase_callback(*args): # type: (List[Any]) -> str return ''