mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
parent
036244fd29
commit
d38937e672
2 changed files with 17 additions and 4 deletions
|
@ -66,10 +66,18 @@ class Journal(object):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
util.prompt("ERROR: Your journal file seems to be corrupted. You do have a backup, don't you?")
|
util.prompt("ERROR: Your journal file seems to be corrupted. You do have a backup, don't you?")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
padding = " ".encode("utf-8")
|
|
||||||
if not plain.endswith(padding): # Journals are always padded
|
padding_length = ord(plain[-1])
|
||||||
|
if padding_length > AES.block_size and padding_length != 32:
|
||||||
|
# 32 is the space character and is kept for backwards compatibility
|
||||||
|
return None
|
||||||
|
elif padding_length == 32:
|
||||||
|
plain = plain.strip()
|
||||||
|
elif plain[-padding_length:] != util.int2byte(padding_length) * padding_length:
|
||||||
|
# Invalid padding!
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
|
plain = plain[:-padding_length]
|
||||||
return plain.decode("utf-8")
|
return plain.decode("utf-8")
|
||||||
|
|
||||||
def _encrypt(self, plain):
|
def _encrypt(self, plain):
|
||||||
|
@ -80,7 +88,8 @@ class Journal(object):
|
||||||
iv = Random.new().read(AES.block_size)
|
iv = Random.new().read(AES.block_size)
|
||||||
crypto = AES.new(self.key, AES.MODE_CBC, iv)
|
crypto = AES.new(self.key, AES.MODE_CBC, iv)
|
||||||
plain = plain.encode("utf-8")
|
plain = plain.encode("utf-8")
|
||||||
plain += b" " * (AES.block_size - len(plain) % AES.block_size)
|
padding_length = AES.block_size - len(plain) % AES.block_size
|
||||||
|
plain += util.int2byte(padding_length) * padding_length
|
||||||
return iv + crypto.encrypt(plain)
|
return iv + crypto.encrypt(plain)
|
||||||
|
|
||||||
def make_key(self, password):
|
def make_key(self, password):
|
||||||
|
|
|
@ -141,3 +141,7 @@ def slugify(string):
|
||||||
slug = re.sub(r'[-\s]+', '-', no_punctuation)
|
slug = re.sub(r'[-\s]+', '-', no_punctuation)
|
||||||
return u(slug)
|
return u(slug)
|
||||||
|
|
||||||
|
def int2byte(i):
|
||||||
|
"""Converts an integer to a byte.
|
||||||
|
This is equivalent to chr() in Python 2 and bytes((i,)) in Python 3."""
|
||||||
|
return chr(i) if PY2 else bytes((i,))
|
||||||
|
|
Loading…
Add table
Reference in a new issue