#!/usr/bin/python2

"""
* This file is part of the cryptlib test package
* File: python2-test
* Version  : 1.0
* License  : BSD
*
*
* Copyright (c) 2016
*	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 a basic hash test for PYTHON"
Text2 = "cryptlib"

import sys
from cryptlib_py import *
from base64 import *
from binascii import *

cryptInit()

# Calls to cryptlib routines

print Text
cryptUser=CRYPT_UNUSED
hashContext =  cryptCreateContext(cryptUser,CRYPT_ALGO_SHA1)
print "Hash algo: ",hashContext.CRYPT_CTXINFO_NAME_ALGO 

hashedData = array( 'c', Text2 )
nullData = array( 'c', '')
print "Data     : ", hashedData

# hashedData must be modifiable Buffer
hashedBytes =  cryptEncrypt( hashContext, hashedData )
# end the operation with null bytes input
hashedBytes2 =  cryptEncrypt( hashContext, nullData )

hash =  hashContext.CRYPT_CTXINFO_HASHVALUE 
print "Base64:", b64encode(hash)
print "Hex   :", hexlify(hash)
if hexlify(hash) != "6dabb4f4a33f91cd45eb9c4c6f6bca08967615c7" :
     print "ERROR: sha1 hash failed."
     sys.exit(2)
else:
     print "SUCCESS: sha1 hash succeeded."

cryptDestroyContext( hashContext )
cryptEnd()
sys.exit(0)

