crypto.pw_decode: fix one case of raising incorrect exception

This commit is contained in:
SomberNight 2020-04-08 12:49:50 +02:00
parent 789b78cab5
commit 1ea89af012
No known key found for this signature in database
GPG key ID: B33B5F232C6271E9
2 changed files with 9 additions and 1 deletions

View file

@ -229,7 +229,10 @@ def pw_decode(data: str, password: Union[bytes, str, None], *, version: int) ->
if password is None: if password is None:
return data return data
plaintext_bytes = pw_decode_bytes(data, password, version=version) plaintext_bytes = pw_decode_bytes(data, password, version=version)
plaintext_str = to_string(plaintext_bytes, "utf8") try:
plaintext_str = to_string(plaintext_bytes, "utf8")
except UnicodeDecodeError as e:
raise InvalidPassword() from e
return plaintext_str return plaintext_str

View file

@ -254,6 +254,11 @@ class Test_bitcoin(ElectrumTestCase):
enc = crypto.pw_encode(payload, password, version=version) enc = crypto.pw_encode(payload, password, version=version)
with self.assertRaises(InvalidPassword): with self.assertRaises(InvalidPassword):
crypto.pw_decode(enc, wrong_password, version=version) crypto.pw_decode(enc, wrong_password, version=version)
# sometimes the PKCS7 padding gets removed cleanly,
# but then UnicodeDecodeError gets raised (internally):
enc = 'smJ7j6ccr8LnMOlx98s/ajgikv9s3R1PQuG3GyyIMmo='
with self.assertRaises(InvalidPassword):
crypto.pw_decode(enc, wrong_password, version=1)
@needs_test_with_all_chacha20_implementations @needs_test_with_all_chacha20_implementations
def test_chacha20_poly1305_encrypt(self): def test_chacha20_poly1305_encrypt(self):