utils compiles with python 3
This commit is contained in:
2
VERSION
2
VERSION
@@ -1 +1 @@
|
||||
Version 2.2.1 (2012-10-23 10:13:13) stable
|
||||
Version 2.2.1 (2012-10-23 10:17:19) stable
|
||||
|
||||
@@ -19,22 +19,37 @@ import random
|
||||
import time
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import logging
|
||||
import socket
|
||||
import cPickle
|
||||
import base64
|
||||
import zlib
|
||||
|
||||
python_version = sys.version_info[0]
|
||||
|
||||
if python_version == 2:
|
||||
import cPickle as pickle
|
||||
else:
|
||||
import pickle
|
||||
|
||||
|
||||
try:
|
||||
from Crypto.Cipher import AES
|
||||
except ImportError:
|
||||
from contrib import aes as AES
|
||||
try:
|
||||
from .aes import AES
|
||||
except ImportError:
|
||||
from contrib.aes import AES
|
||||
|
||||
try:
|
||||
from contrib.pbkdf2 import pbkdf2_hex
|
||||
HAVE_PBKDF2 = True
|
||||
except ImportError:
|
||||
HAVE_PBKDF2 = False
|
||||
try:
|
||||
from .pbkdf2 import pbkdf2_hex
|
||||
HAVE_PBKDF2 = True
|
||||
except (ImportError, ValueError):
|
||||
HAVE_PBKDF2 = False
|
||||
|
||||
logger = logging.getLogger("web2py")
|
||||
|
||||
@@ -115,7 +130,7 @@ def pad(s, n=32, padchar='.'):
|
||||
def secure_dumps(data, encryption_key, hash_key=None, compression_level=None):
|
||||
if not hash_key:
|
||||
hash_key = hashlib.sha1(encryption_key).hexdigest()
|
||||
dump = cPickle.dumps(data)
|
||||
dump = pickle.dumps(data)
|
||||
if compression_level:
|
||||
dump = zlib.compress(dump, compression_level)
|
||||
key = pad(encryption_key[:32])
|
||||
@@ -141,8 +156,8 @@ def secure_loads(data, encryption_key, hash_key=None, compression_level=None):
|
||||
data = data.rstrip(' ')
|
||||
if compression_level:
|
||||
data = zlib.decompress(data)
|
||||
return cPickle.loads(data)
|
||||
except (TypeError, cPickle.UnpicklingError):
|
||||
return pickle.loads(data)
|
||||
except (TypeError, pickle.UnpicklingError):
|
||||
return None
|
||||
|
||||
### compute constant CTOKENS
|
||||
@@ -173,7 +188,10 @@ def initialize_urandom():
|
||||
# try to add process-specific entropy
|
||||
frandom = open('/dev/urandom', 'wb')
|
||||
try:
|
||||
frandom.write(''.join(chr(t) for t in ctokens))
|
||||
if python_version == 2:
|
||||
frandom.write(''.join(chr(t) for t in ctokens)) # python 2
|
||||
else:
|
||||
frandom.write(bytes([]).join(bytes([t]) for t in ctokens)) # python 3
|
||||
finally:
|
||||
frandom.close()
|
||||
except IOError:
|
||||
@@ -185,8 +203,11 @@ def initialize_urandom():
|
||||
"""Cryptographically secure session management is not possible on your system because
|
||||
your system does not provide a cryptographically secure entropy source.
|
||||
This is not specific to web2py; consider deploying on a different operating system.""")
|
||||
unpacked_ctokens = struct.unpack('=QQ', string.join(
|
||||
(chr(x) for x in ctokens), ''))
|
||||
if python_version == 2:
|
||||
packed = ''.join(chr(x) for x in ctokens) # python 2
|
||||
else:
|
||||
packed = bytes([]).join(bytes([x]) for x in ctokens) # python 3
|
||||
unpacked_ctokens = struct.unpack('=QQ', packed)
|
||||
return unpacked_ctokens, have_urandom
|
||||
UNPACKED_CTOKENS, HAVE_URANDOM = initialize_urandom()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user