#!/usr/bin/python2

"""
* This file is part of the cryptlib test package
* File: python2-decrypt
* Version  : 1.0
* License  : BSD
*
*
* Copyright (c) 2016-2017
*	Ralf Senderek, Ireland.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
*    must display the following acknowledgement:
*	   This product includes software developed by Ralf Senderek.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
"""

Text = "Cryptlib :  Performing  AES decryption for PYTHON 2"

import sys, os
from cryptlib_py import *
from binascii import *

cryptInit()

print Text
cryptUser = CRYPT_UNUSED

input = array('c',"" )
if os.path.isfile( "./outfile" ):
    F = open ( "./outfile", "r" )
    input.fromfile( F , 500 )
    F.close()
else:    
    print "There is no file to decrypt."
    sys.exit(1)

key = array( 'c', "rumpelstielskin" )
output = array( 'c', ' '*500 )
Envelope = cryptCreateEnvelope( cryptUser, CRYPT_FORMAT_AUTO )

# input must be modifiable Buffer
bytescopied = 0
try:
    bytescopied = cryptPushData( Envelope, input )
except CryptException as e:
    # catch the advisory exception, that the key is still missing
    status, message = e
    if status != CRYPT_ENVELOPE_RESOURCE:
        print "decryption error"
        sys.exit( 2 )

cryptSetAttributeString( Envelope, CRYPT_ENVINFO_PASSWORD, key )
cryptFlushData( Envelope )

# output must be modifiable Buffer
bytesout = cryptPopData( Envelope, output, 500 )
print "processed ", bytesout, " bytes out ..." 

print "Plain text :"
print output.tostring() 

cryptDestroyContext( Envelope )

cryptEnd()
sys.exit( 0 )

