electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit cc71dfea863cce0a1f497a8524141e76cad824e2
parent de1123e4a04933867908e19b61dbec8000a65947
Author: ThomasV <thomasv@gitorious>
Date:   Mon,  1 Sep 2014 15:37:38 +0200

check all bytes in strip_pkcs7_padding

Diffstat:
Mlib/bitcoin.py | 13++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/lib/bitcoin.py b/lib/bitcoin.py @@ -45,6 +45,17 @@ MIN_RELAY_TX_FEE = 1000 EncodeAES = lambda secret, s: base64.b64encode(aes.encryptData(secret,s)) DecodeAES = lambda secret, e: aes.decryptData(secret, base64.b64decode(e)) +def strip_PKCS7_padding(s): + """return s stripped of PKCS7 padding""" + if len(s)%16 or not s: + raise ValueError("String of len %d can't be PCKS7-padded" % len(s)) + numpads = ord(s[-1]) + if numpads > 16: + raise ValueError("String ending with %r can't be PCKS7-padded" % s[-1]) + if s[-numpads:] != numpads*chr(numpads): + raise ValueError("Invalid PKCS7 padding") + return s[:-numpads] + def aes_encrypt_with_iv(key, iv, data): mode = aes.AESModeOfOperation.modeOfOperation["CBC"] @@ -66,7 +77,7 @@ def aes_decrypt_with_iv(key, iv, data): data = map(ord, data) moo = aes.AESModeOfOperation() decr = moo.decrypt(data, None, mode, key, keysize, iv) - decr = aes.strip_PKCS7_padding(decr) + decr = strip_PKCS7_padding(decr) return decr