# -*- coding: utf-8 -*-
-u"""Password hashing functions and constants for the mudpy engine."""
+"""Password hashing functions and constants for the mudpy engine."""
-# Copyright (c) 2004-2011 Jeremy Stanley <fungi@yuggoth.org>. Permission
+# Copyright (c) 2004-2012 Jeremy Stanley <fungi@yuggoth.org>. Permission
# to use, copy, modify, and distribute this software is granted under
# terms provided in the LICENSE file distributed with this software.
import base64
return base64.b64encode(
byte_sequence,
- u"./".encode(u"ascii")
- ).rstrip(u"=")
+ "./".encode("ascii")
+ ).rstrip("=")
def _generate_salt(salt_len=2):
return _bytes_to_text(_pack_bytes(salt))[:salt_len]
-def upgrade_legacy_hash(legacy_hash, salt, sep=u"$"):
+def upgrade_legacy_hash(legacy_hash, salt, sep="$"):
"""
This utility function is meant to provide a migration path for users
of mudpy's legacy account-name-salted MD5 hexdigest password hashes.
returned.
"""
import re
- assert re.match(u"^[0-9a-f]{32}$",
+ assert re.match("^[0-9a-f]{32}$",
legacy_hash), "Not a valid MD5 hexdigest"
# this needs to be declared as b"" in 2to3
collapsed = ""
for i in xrange(16):
# this needs to become a byte() call in 2to3
collapsed += chr(int(legacy_hash[2 * i:2 * i + 2], 16))
- return u"%s%s%s%s%s%s%s%s" % (
+ return "%s%s%s%s%s%s%s%s" % (
sep,
MD5,
sep,
algorithm=SHA1,
rounds=4,
salt_len=2,
- sep=u"$"
+ sep="$"
):
"""
The meat of the module, this function takes a provided password and
hashed = algorithms[algorithm](hashed).digest()
# concatenate the output fields, coercing into text form as needed
- return u"%s%s%s%s%s%s%s%s" % (
+ return "%s%s%s%s%s%s%s%s" % (
sep, algorithm, sep, rounds, sep, salt, sep, _bytes_to_text(hashed)
)
comes out the same as the encoded_hash.
"""
sep = encoded_hash[0]
- algorithm, rounds, salt, hashed = encoded_hash[1:].split(sep)
+ import mudpy.misc
+ algorithm, rounds, salt, hashed = encoded_hash.split(sep)[1:]
if encoded_hash == create(
password=password,
salt=salt,