1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
=============================================
:mod:`passlib.utils` - Helper Functions
=============================================
.. module:: passlib.utils
:synopsis: internal helpers for implementing password hashes
.. warning::
This module is primarily used as an internal support module.
Its interface has not been finalized yet, and may be changed somewhat
between major releases of Passlib, as the internal code is cleaned up
and simplified.
This module primarily contains utility functions used internally by Passlib.
However, end-user applications may find some of the functions useful,
in particular:
* :func:`consteq`
* :func:`saslprep`
* :func:`generate_password`
Constants
=========
..
.. data:: sys_bits
Native bit size of host architecture (either 32 or 64 bit).
used for various purposes internally.
.. data:: unix_crypt_schemes
List of the names of all the hashes in :mod:`passlib.hash`
which are natively supported by :func:`crypt` on at least one operating
system.
For all hashes in this list, the expression
:samp:`passlib.hash.{alg}.has_backend("os_crypt")`
will return ``True`` if the host OS natively supports the hash.
This list is used by :data:`~passlib.hosts.host_context`
and :data:`~passlib.apps.ldap_context` to determine
which hashes are supported by the host.
.. seealso:: :ref:`mcf-identifiers` for a table of which OSes are known to support which hashes.
..
PYPY
JYTHON
rounds_cost_values
..
Decorators
==========
.. autofunction:: classproperty
Unicode Helpers
===============
.. function:: consteq(left, right)
Check two strings/bytes for equality.
This is functionally equivalent to ``left == right``,
but attempts to take constant time relative to the size of the righthand input.
The purpose of this function is to help prevent timing attacks
during digest comparisons: the standard ``==`` operator aborts
after the first mismatched character, causing its runtime to be
proportional to the longest prefix shared by the two inputs.
If an attacker is able to predict and control one of the two
inputs, repeated queries can be leveraged to reveal information about
the content of the second argument. To minimize this risk, :func:`!consteq`
is designed to take ``THETA(len(right))`` time, regardless
of the contents of the two strings.
It is recommended that the attacker-controlled input
be passed in as the left-hand value.
.. warning::
This function is *not* perfect. Various VM-dependant issues
(e.g. the VM's integer object instantiation algorithm, internal unicode representation, etc),
may still cause the function's run time to be affected by the inputs,
though in a less predictable manner.
*To minimize such risks, this function should not be passed* :class:`unicode`
*inputs that might contain non-* ``ASCII`` *characters*.
.. versionadded:: 1.6
.. versionchanged:: 1.7
This is an alias for stdlib's :func:`hmac.compare_digest` under Python 3.3 and up.
.. autofunction:: saslprep
Bytes Helpers
=============
.. autofunction:: xor_bytes
.. autofunction:: render_bytes
.. autofunction:: int_to_bytes
.. autofunction:: bytes_to_int
Encoding Helpers
================
.. autofunction:: is_same_codec
.. autofunction:: is_ascii_codec
.. autofunction:: is_ascii_safe
.. autofunction:: to_bytes
.. autofunction:: to_unicode
.. autofunction:: to_native_str
..
Host OS
=======
.. autofunction:: safe_crypt
.. autofunction:: tick
Randomness
==========
.. data:: rng
The random number generator used by Passlib to generate
salt strings and other things which don't require a
cryptographically strong source of randomness.
If :func:`os.urandom` support is available,
this will be an instance of :class:`!random.SystemRandom`,
otherwise it will use the default python PRNG class,
seeded from various sources at startup.
.. autofunction:: getrandbytes
.. autofunction:: getrandstr
.. autofunction:: generate_password(size=10, charset=<default charset>)
Interface Tests
===============
.. autofunction:: is_crypt_handler
.. autofunction:: is_crypt_context
.. autofunction:: has_rounds_info
.. autofunction:: has_salt_info
Submodules
==========
There are also a few sub modules which provide additional utility functions:
.. toctree::
:maxdepth: 1
passlib.utils.handlers
passlib.utils.binary
passlib.utils.des
passlib.utils.pbkdf2
..
passlib.utils.decor
passlib.utils.compat
|