123456789101112131415161718192021222324252627282930313233343536373839 |
- import base64
- from hashlib import sha256
- from django.conf import settings
- try:
- import cPickle as pickle
- except ImportError:
- import pickle
- def _checksum(base):
- return sha256(('%s+%s' % (settings.SECRET_KEY, base)).encode()).hexdigest()[:14]
- def loads(dry):
- checksum = dry[:14]
- base = dry[14:]
- if _checksum(base) == checksum:
- return pickle.loads(base64.decodestring(base.encode()))
- else:
- raise ValueError("pickle checksum is invalid")
- def dumps(wet):
- from misago.core.deprecations import warn
- warn('misago.core.serializer is being replaced with json')
- base = base64.encodestring(pickle.dumps(wet, pickle.HIGHEST_PROTOCOL)).decode()
- checksum = _checksum(base)
- return '%s%s' % (checksum, base)
- def regenerate_checksum(dry):
- base = dry[14:]
- checksum = _checksum(base)
- return '%s%s' % (checksum, base)
|