| Index: third_party/twisted_8_1/twisted/python/randbytes.py
|
| diff --git a/third_party/twisted_8_1/twisted/python/randbytes.py b/third_party/twisted_8_1/twisted/python/randbytes.py
|
| deleted file mode 100644
|
| index 319363d86f97d2af08d6e508757bd536e60d9c0b..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/python/randbytes.py
|
| +++ /dev/null
|
| @@ -1,177 +0,0 @@
|
| -# -*- test-case-name: twisted.test.test_randbytes -*-
|
| -# Copyright (c) 2007 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -"""
|
| -Cryptographically secure random implementation, with fallback on normal random.
|
| -"""
|
| -
|
| -# System imports
|
| -import warnings, os, random
|
| -
|
| -getrandbits = getattr(random, 'getrandbits', None)
|
| -
|
| -try:
|
| - from Crypto.Util import randpool
|
| -except ImportError:
|
| - randpool = None
|
| -
|
| -
|
| -
|
| -class SecureRandomNotAvailable(RuntimeError):
|
| - """
|
| - Exception raised when no secure random algorithm is found.
|
| - """
|
| -
|
| -
|
| -
|
| -class SourceNotAvailable(RuntimeError):
|
| - """
|
| - Internal exception used when a specific random source is not available.
|
| - """
|
| -
|
| -
|
| -
|
| -class RandomFactory(object):
|
| - """
|
| - Factory providing L{secureRandom} and L{insecureRandom} methods.
|
| -
|
| - You shouldn't have to instantiate this class, use the module level
|
| - functions instead: it is an implementation detail and could be removed or
|
| - changed arbitrarily.
|
| -
|
| - @ivar randomPool: pool of random data.
|
| - @type randomPool: C{randpool.RandomPool}
|
| -
|
| - @cvar randomSources: list of file sources used when os.urandom is not
|
| - available.
|
| - @type randomSources: C{tuple}
|
| - """
|
| - randpool = randpool
|
| - randomPool = None
|
| - randomSources = ('/dev/urandom',)
|
| - getrandbits = getrandbits
|
| -
|
| -
|
| - def _osUrandom(self, nbytes):
|
| - """
|
| - Wrapper around C{os.urandom} that cleanly manage its absence.
|
| - """
|
| - try:
|
| - return os.urandom(nbytes)
|
| - except (AttributeError, NotImplementedError), e:
|
| - raise SourceNotAvailable(e)
|
| -
|
| -
|
| - def _fileUrandom(self, nbytes):
|
| - """
|
| - Wrapper around random file sources.
|
| -
|
| - This method isn't meant to be call out of the class and could be
|
| - removed arbitrarily.
|
| - """
|
| - for src in self.randomSources:
|
| - try:
|
| - f = file(src, 'rb')
|
| - except (IOError, OSError):
|
| - pass
|
| - else:
|
| - bytes = f.read(nbytes)
|
| - f.close()
|
| - return bytes
|
| - raise SourceNotAvailable("File sources not available: %s" %
|
| - (self.randomSources,))
|
| -
|
| -
|
| - def _cryptoRandom(self, nbytes):
|
| - """
|
| - Wrapper around Crypo random pool.
|
| - """
|
| - if self.randpool is not None:
|
| - if self.randomPool is None:
|
| - self.randomPool = self.randpool.RandomPool()
|
| - self.randomPool.stir()
|
| - return self.randomPool.get_bytes(nbytes)
|
| - raise SourceNotAvailable("PyCrypto isn't installed")
|
| -
|
| -
|
| - def secureRandom(self, nbytes, fallback=False):
|
| - """
|
| - Return a number of secure random bytes.
|
| -
|
| - @param nbytes: number of bytes to generate.
|
| - @type nbytes: C{int}.
|
| - @param fallback: whether the function should fallback on non secure
|
| - random or not. Default to C{false}.
|
| - @type fallback: C{bool}
|
| -
|
| - @return: a string of random bytes.
|
| - @rtype: C{str}.
|
| - """
|
| - for src in ("_osUrandom", "_fileUrandom", "_cryptoRandom"):
|
| - try:
|
| - return getattr(self, src)(nbytes)
|
| - except SourceNotAvailable:
|
| - pass
|
| - if fallback:
|
| - warnings.warn(
|
| - "Neither PyCrypto nor urandom available - "
|
| - "proceeding with non-cryptographically secure random source",
|
| - category=RuntimeWarning,
|
| - stacklevel=2
|
| - )
|
| - return self.insecureRandom(nbytes)
|
| - else:
|
| - raise SecureRandomNotAvailable("No secure random source available")
|
| -
|
| -
|
| - def _randBits(self, nbytes):
|
| - """
|
| - Wrapper around C{os.getrandbits}.
|
| - """
|
| - if self.getrandbits is not None:
|
| - n = self.getrandbits(nbytes * 8)
|
| - hexBytes = ("%%0%dx" % (nbytes * 2)) % n
|
| - return hexBytes.decode('hex')
|
| - raise SourceNotAvailable("random.getrandbits is not available")
|
| -
|
| -
|
| - def _randRange(self, nbytes):
|
| - """
|
| - Wrapper around C{random.randrange}.
|
| - """
|
| - bytes = ""
|
| - for i in xrange(nbytes):
|
| - bytes += chr(random.randrange(0, 255))
|
| - return bytes
|
| -
|
| -
|
| - def insecureRandom(self, nbytes):
|
| - """
|
| - Return a number of non secure random bytes.
|
| -
|
| - @param nbytes: number of bytes to generate.
|
| - @type nbytes: C{int}.
|
| -
|
| - @return: a string of random bytes.
|
| - @rtype: C{str}.
|
| - """
|
| - for src in ("_randBits", "_randRange"):
|
| - try:
|
| - return getattr(self, src)(nbytes)
|
| - except SourceNotAvailable:
|
| - pass
|
| -
|
| -
|
| -
|
| -factory = RandomFactory()
|
| -
|
| -secureRandom = factory.secureRandom
|
| -
|
| -insecureRandom = factory.insecureRandom
|
| -
|
| -del factory
|
| -
|
| -
|
| -__all__ = ["secureRandom", "insecureRandom", "SecureRandomNotAvailable"]
|
| -
|
|
|