def decrypt(ciphertext, secret, inital_vector, checksum=True, lazy=True):
secret = _lazysecret(secret) if lazy else secret<EOL>encobj = AES.new(secret, AES.MODE_CFB, inital_vector)<EOL>try:<EOL><INDENT>padded = ciphertext + ('<STR_LIT:=>' * (len(ciphertext) % <NUM_LIT:4>))<EOL>decoded = base64.urlsafe_b64decode(str(padded))<EOL>plaintext = encobj.decrypt(decoded)<EOL><DEDENT>except (TypeError, binascii.Error):<EOL><INDENT>raise InvalidKeyError("<STR_LIT>")<EOL><DEDENT>if checksum:<EOL><INDENT>try:<EOL><INDENT>crc, plaintext = (base64.urlsafe_b64decode(<EOL>plaintext[-<NUM_LIT:8>:]), plaintext[:-<NUM_LIT:8>])<EOL><DEDENT>except (TypeError, binascii.Error):<EOL><INDENT>raise CheckSumError("<STR_LIT>")<EOL><DEDENT>if not crc == _pack_crc(plaintext):<EOL><INDENT>raise CheckSumError("<STR_LIT>")<EOL><DEDENT><DEDENT>return plaintext<EOL>
Decrypts ciphertext with secret
    ciphertext     - encrypted content to decrypt
    secret         - secret to decrypt ciphertext
    inital_vector  - initial vector
    lazy           - pad secret if less than legal blocksize (default: True)
    checksum       - verify crc32 byte encoded checksum (default: True)
    returns plaintext