Issue 10924: Fixed mksalt() to use a RNG that is suitable for cryptographic purpose
This commit is contained in:
parent
39b1e5dff3
commit
afa2973d7a
15
Lib/crypt.py
15
Lib/crypt.py
|
@ -1,15 +1,16 @@
|
||||||
"""Wrapper to the POSIX crypt library call and associated functionality."""
|
"""Wrapper to the POSIX crypt library call and associated functionality."""
|
||||||
|
|
||||||
import _crypt
|
import _crypt
|
||||||
import string
|
import string as _string
|
||||||
from random import choice
|
from random import SystemRandom as _SystemRandom
|
||||||
from collections import namedtuple
|
from collections import namedtuple as _namedtuple
|
||||||
|
|
||||||
|
|
||||||
_saltchars = string.ascii_letters + string.digits + './'
|
_saltchars = _string.ascii_letters + _string.digits + './'
|
||||||
|
_sr = _SystemRandom()
|
||||||
|
|
||||||
|
|
||||||
class _Method(namedtuple('_Method', 'name ident salt_chars total_size')):
|
class _Method(_namedtuple('_Method', 'name ident salt_chars total_size')):
|
||||||
|
|
||||||
"""Class representing a salt method per the Modular Crypt Format or the
|
"""Class representing a salt method per the Modular Crypt Format or the
|
||||||
legacy 2-character crypt method."""
|
legacy 2-character crypt method."""
|
||||||
|
@ -18,7 +19,6 @@ class _Method(namedtuple('_Method', 'name ident salt_chars total_size')):
|
||||||
return '<crypt.METHOD_{}>'.format(self.name)
|
return '<crypt.METHOD_{}>'.format(self.name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def mksalt(method=None):
|
def mksalt(method=None):
|
||||||
"""Generate a salt for the specified method.
|
"""Generate a salt for the specified method.
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ def mksalt(method=None):
|
||||||
if method is None:
|
if method is None:
|
||||||
method = methods[0]
|
method = methods[0]
|
||||||
s = '${}$'.format(method.ident) if method.ident else ''
|
s = '${}$'.format(method.ident) if method.ident else ''
|
||||||
s += ''.join(choice(_saltchars) for _ in range(method.salt_chars))
|
s += ''.join(_sr.sample(_saltchars, method.salt_chars))
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,3 +60,4 @@ for _method in (METHOD_SHA512, METHOD_SHA256, METHOD_MD5):
|
||||||
methods.append(_method)
|
methods.append(_method)
|
||||||
methods.append(METHOD_CRYPT)
|
methods.append(METHOD_CRYPT)
|
||||||
del _result, _method
|
del _result, _method
|
||||||
|
|
||||||
|
|
10
Misc/NEWS
10
Misc/NEWS
|
@ -7,6 +7,16 @@ What's New in Python 3.3.0 Beta 2?
|
||||||
|
|
||||||
*Release date: xx-xxx-2012*
|
*Release date: xx-xxx-2012*
|
||||||
|
|
||||||
|
Core and Builtins
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
|
||||||
|
Library
|
||||||
|
-------
|
||||||
|
|
||||||
|
- Issue 10924: Fixed mksalt() to use a RNG that is suitable for cryptographic
|
||||||
|
purpose.
|
||||||
|
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue