Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def pkcs7_pad(data, blocksize=16):
- padlen = blocksize - len(data) % blocksize
- return data + bytes([padlen]) * padlen
- def pkcs7_unpad(data, blocksize=16):
- if data:
- padlen = data[-1]
- if 0 < padlen < blocksize:
- if data.endswith(bytes([padlen]) * padlen):
- return data[:-padlen]
- raise ValueError('incorrect padding')
- if __name__ == '__main__':
- #~ import pdb; pdb.set_trace()
- p = pkcs7_pad(b'')
- assert p == b'\x10' * 16, p
- test = b'1234567890abc'
- p = pkcs7_pad(test)
- assert p == test + b'\3\3\3', p
- p = pkcs7_pad(test * 3)
- assert p == test * 3 + b'\x09' * 9, p
- p = pkcs7_unpad(test + b'\3\3\3')
- assert p == test, p
- p = pkcs7_unpad(test * 3 + b'\x09' * 9)
- assert p == test * 3, p
- try: pkcs7_unpad(test)
- except ValueError: pass
- else: assert False, 'exception not raised'
- try: pkcs7_unpad(b'x' + b'\x05' * 3)
- except ValueError: pass
- else: assert False, 'exception not raised'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement