URI: 
       tcrypto: more type annotations - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit aceb022f9df7c778856debecc53eaeaa49dfbfaa
   DIR parent a6a003a345e2fc2e8de709190a4a6d0ecd531c64
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Sat, 10 Nov 2018 13:30:34 +0100
       
       crypto: more type annotations
       
       Diffstat:
         M electrum/crypto.py                  |      54 ++++++++++++++++---------------
       
       1 file changed, 28 insertions(+), 26 deletions(-)
       ---
   DIR diff --git a/electrum/crypto.py b/electrum/crypto.py
       t@@ -44,13 +44,13 @@ class InvalidPadding(Exception):
            pass
        
        
       -def append_PKCS7_padding(data):
       +def append_PKCS7_padding(data: bytes) -> bytes:
            assert_bytes(data)
            padlen = 16 - (len(data) % 16)
            return data + bytes([padlen]) * padlen
        
        
       -def strip_PKCS7_padding(data):
       +def strip_PKCS7_padding(data: bytes) -> bytes:
            assert_bytes(data)
            if len(data) % 16 != 0 or len(data) == 0:
                raise InvalidPadding("invalid length")
       t@@ -63,7 +63,7 @@ def strip_PKCS7_padding(data):
            return data[0:-padlen]
        
        
       -def aes_encrypt_with_iv(key, iv, data):
       +def aes_encrypt_with_iv(key: bytes, iv: bytes, data: bytes) -> bytes:
            assert_bytes(key, iv, data)
            data = append_PKCS7_padding(data)
            if AES:
       t@@ -75,7 +75,7 @@ def aes_encrypt_with_iv(key, iv, data):
            return e
        
        
       -def aes_decrypt_with_iv(key, iv, data):
       +def aes_decrypt_with_iv(key: bytes, iv: bytes, data: bytes) -> bytes:
            assert_bytes(key, iv, data)
            if AES:
                cipher = AES.new(key, AES.MODE_CBC, iv)
       t@@ -90,36 +90,38 @@ def aes_decrypt_with_iv(key, iv, data):
                raise InvalidPassword()
        
        
       -def EncodeAES(secret, s):
       -    assert_bytes(s)
       +def EncodeAES(secret: bytes, msg: bytes) -> bytes:
       +    """Returns base64 encoded ciphertext."""
       +    assert_bytes(msg)
            iv = bytes(os.urandom(16))
       -    ct = aes_encrypt_with_iv(secret, iv, s)
       +    ct = aes_encrypt_with_iv(secret, iv, msg)
            e = iv + ct
            return base64.b64encode(e)
        
       -def DecodeAES(secret, e):
       -    e = bytes(base64.b64decode(e))
       +
       +def DecodeAES(secret: bytes, ciphertext_b64: Union[bytes, str]) -> bytes:
       +    e = bytes(base64.b64decode(ciphertext_b64))
            iv, e = e[:16], e[16:]
            s = aes_decrypt_with_iv(secret, iv, e)
            return s
        
       -def pw_encode(s, password):
       -    if password:
       -        secret = sha256d(password)
       -        return EncodeAES(secret, to_bytes(s, "utf8")).decode('utf8')
       -    else:
       -        return s
       -
       -def pw_decode(s, password):
       -    if password is not None:
       -        secret = sha256d(password)
       -        try:
       -            d = to_string(DecodeAES(secret, s), "utf8")
       -        except Exception:
       -            raise InvalidPassword()
       -        return d
       -    else:
       -        return s
       +
       +def pw_encode(data: str, password: Union[bytes, str]) -> str:
       +    if not password:
       +        return data
       +    secret = sha256d(password)
       +    return EncodeAES(secret, to_bytes(data, "utf8")).decode('utf8')
       +
       +
       +def pw_decode(data: str, password: Union[bytes, str]) -> str:
       +    if password is None:
       +        return data
       +    secret = sha256d(password)
       +    try:
       +        d = to_string(DecodeAES(secret, data), "utf8")
       +    except Exception:
       +        raise InvalidPassword()
       +    return d
        
        
        def sha256(x: Union[bytes, str]) -> bytes: