aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/tools/crypto.py
diff options
context:
space:
mode:
authortilly-Q <nattilypigeonfowl@gmail.com>2013-08-20 12:21:13 -0400
committertilly-Q <nattilypigeonfowl@gmail.com>2013-08-20 12:21:13 -0400
commit9e204e49c9670b0e004dc9b62bf3b698b7534325 (patch)
tree452eab56add0e1b009b665f5b32d7b59b7545e82 /mediagoblin/tools/crypto.py
parente1561d048815e29b3b7c7e1c860d9cf0c4326f0a (diff)
parentc62d174437445565b55b220396e7571a323a159c (diff)
downloadmediagoblin-9e204e49c9670b0e004dc9b62bf3b698b7534325.tar.lz
mediagoblin-9e204e49c9670b0e004dc9b62bf3b698b7534325.tar.xz
mediagoblin-9e204e49c9670b0e004dc9b62bf3b698b7534325.zip
Merge branch 'master' into OPW-Moderation-Update
Conflicts: mediagoblin/db/models.py mediagoblin/decorators.py mediagoblin/routing.py mediagoblin/user_pages/views.py
Diffstat (limited to 'mediagoblin/tools/crypto.py')
-rw-r--r--mediagoblin/tools/crypto.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/mediagoblin/tools/crypto.py b/mediagoblin/tools/crypto.py
index 1379d21b..917e674c 100644
--- a/mediagoblin/tools/crypto.py
+++ b/mediagoblin/tools/crypto.py
@@ -14,6 +14,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import base64
+import string
import errno
import itsdangerous
import logging
@@ -24,6 +26,9 @@ from mediagoblin import mg_globals
_log = logging.getLogger(__name__)
+# produces base64 alphabet
+alphabet = string.ascii_letters + "-_"
+base = len(alphabet)
# Use the system (hardware-based) random number generator if it exists.
# -- this optimization is lifted from Django
@@ -111,3 +116,13 @@ def get_timed_signer_url(namespace):
assert __itsda_secret is not None
return itsdangerous.URLSafeTimedSerializer(__itsda_secret,
salt=namespace)
+
+def random_string(length):
+ """ Returns a URL safe base64 encoded crypographically strong string """
+ rstring = ""
+ for i in range(length):
+ n = getrandbits(6) # 6 bytes = 2^6 = 64
+ n = divmod(n, base)[1]
+ rstring += alphabet[n]
+
+ return rstring