#!/usr/bin/python3

"""
* This file is part of the cryptlib test package
* File: python3-encrypt
* Version  : 1.2
* License  : BSD
*
*
* Copyright (c) 2016-2026
*	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 encryption for PYTHON 3"

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

cryptInit()

print( Text )
cryptUser = CRYPT_UNUSED

input = bytearray( b"Cryptlib 3.4.9" )
if os.path.isfile( "./infile" ):
    F = open ( "./infile", "rb" )
    input = bytearray ( F.read() )
    F.close()
output = bytearray(b' '*500)
key = bytearray( b"rumpelstielskin" )
print( "Data     : ", input.decode() )

Envelope = cryptCreateEnvelope( cryptUser, CRYPT_FORMAT_PGP )
cryptSetAttributeString( int(Envelope), CRYPT_ENVINFO_PASSWORD, key )
cryptSetAttribute( int(Envelope), CRYPT_ENVINFO_DATASIZE, len(input) ) 

# input must be modifiable Buffer
bytescopied = cryptPushData( int(Envelope), input )
print( "processed ", bytescopied, " bytes in ..." )
cryptFlushData( int(Envelope) )

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

print( "Cryptogram : ", output.hex() )
# write cryptogram to file
F = open( "./outfile", "wb" )
F.write( output  )
F.close()

cryptDestroyContext( int(Envelope) )

cryptEnd()
sys.exit( 0 )

