summaryrefslogtreecommitdiffstats
path: root/Doc/library/crypt.rst
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2012-09-29 18:14:19 (GMT)
committerBenjamin Peterson <benjamin@python.org>2012-09-29 18:14:19 (GMT)
commit14fb44e1bab9db128770f1d91d244916a669e7c3 (patch)
tree278d9ccc8f819b05f8114c3154087c70b88ed69c /Doc/library/crypt.rst
parent1764c80925795b6f059e961c5a352c5ece5a7fff (diff)
parent99a247fd01c1cd780c0c3ee1116657627f1ee744 (diff)
downloadcpython-14fb44e1bab9db128770f1d91d244916a669e7c3.zip
cpython-14fb44e1bab9db128770f1d91d244916a669e7c3.tar.gz
cpython-14fb44e1bab9db128770f1d91d244916a669e7c3.tar.bz2
merge mostly from default
Diffstat (limited to 'Doc/library/crypt.rst')
-rw-r--r--Doc/library/crypt.rst10
1 files changed, 7 insertions, 3 deletions
diff --git a/Doc/library/crypt.rst b/Doc/library/crypt.rst
index 1ba2ed3..b4c90cd 100644
--- a/Doc/library/crypt.rst
+++ b/Doc/library/crypt.rst
@@ -121,11 +121,14 @@ The :mod:`crypt` module defines the following functions:
Examples
--------
-A simple example illustrating typical use::
+A simple example illustrating typical use (a constant-time comparison
+operation is needed to limit exposure to timing attacks.
+:func:`hmac.compare_digest` is suitable for this purpose)::
import pwd
import crypt
import getpass
+ from hmac import compare_digest as compare_hash
def login():
username = input('Python login: ')
@@ -134,7 +137,7 @@ A simple example illustrating typical use::
if cryptedpasswd == 'x' or cryptedpasswd == '*':
raise ValueError('no support for shadow passwords')
cleartext = getpass.getpass()
- return crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd
+ return compare_hash(crypt.crypt(cleartext, cryptedpasswd), cryptedpasswd)
else:
return True
@@ -142,7 +145,8 @@ To generate a hash of a password using the strongest available method and
check it against the original::
import crypt
+ from hmac import compare_digest as compare_hash
hashed = crypt.crypt(plaintext)
- if hashed != crypt.crypt(plaintext, hashed):
+ if not compare_hash(hashed, crypt.crypt(plaintext, hashed)):
raise ValueError("hashed version doesn't validate against original")