aboutsummaryrefslogtreecommitdiff
path: root/python/olm/pk.py
diff options
context:
space:
mode:
authorDamir Jelić <poljar@termina.org.uk>2019-06-18 13:46:57 +0200
committerDamir Jelić <poljar@termina.org.uk>2019-06-18 13:50:46 +0200
commit2f5590bf38e5995a36f770c04cfbf31eb9070eca (patch)
tree299e68cd3b9ea33f212cd1a7c4fcf0bbbca4bfc8 /python/olm/pk.py
parente1a4e6ebf1568935a57ba8cec48e43dd7c1ebcd3 (diff)
olm: Allow decryption functions to define how to handle unicode decode errors.
This patch changes the decryption functions not to fail if there was an unicode decode error while converting the decrypted bytes plaintext into a native python string. Characters that cannot be decoded as unicode are now replaced with the unicode replacement character (U+FFFD). The old behaviour of raising an UnicodeDecodeError can be achieved by passing the "strict" error handling scheme to the decrypt function.
Diffstat (limited to 'python/olm/pk.py')
-rw-r--r--python/olm/pk.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/python/olm/pk.py b/python/olm/pk.py
index 193aba5..158c78d 100644
--- a/python/olm/pk.py
+++ b/python/olm/pk.py
@@ -40,7 +40,7 @@ from future.utils import bytes_to_native_str
from _libolm import ffi, lib # type: ignore
-from ._compat import URANDOM, to_bytearray
+from ._compat import URANDOM, to_bytearray, to_native_str
from ._finalize import track_for_finalization
@@ -313,8 +313,8 @@ class PkDecryption(object):
return obj
- def decrypt(self, message):
- # type (PkMessage) -> str
+ def decrypt(self, message, errors="replace"):
+ # type (PkMessage, str) -> str
"""Decrypt a previously encrypted Pk message.
Returns the decrypted plaintext.
@@ -322,6 +322,13 @@ class PkDecryption(object):
Args:
message(PkMessage): the pk message to decrypt.
+ unicode_errors(str, optional): The error handling scheme to use for
+ unicode decoding errors. The default is "replace" meaning that
+ the character that was unable to decode will be replaced with
+ the unicode replacement character (U+FFFD). Other possible
+ values are "strict", "ignore" and "xmlcharrefreplace" as well
+ as any other name registered with codecs.register_error that
+ can handle UnicodeEncodeErrors.
"""
ephemeral_key = to_bytearray(message.ephemeral_key)
ephemeral_key_size = len(ephemeral_key)
@@ -354,7 +361,7 @@ class PkDecryption(object):
# clear out copies of the plaintext
lib.memset(plaintext_buffer, 0, max_plaintext_length)
- return bytes_to_native_str(plaintext)
+ return to_native_str(plaintext, errors=errors)
def _clear_pk_signing(pk_struct):