/*	TestKon2.c	*/
/*	Copyright (C) 2002, 2003, 2004 by J. David Sexton. All rights reserved.	*/

#include <stdio.h>
#include <stdlib.h>
#include "Konton2.h"

		int		main (int argc, char **argv);
	Kon1ByteInt	MyEqualData (const void *dataA, const void *dataB,
						size_t theLength);

Kon1ByteInt		gData [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Kon1ByteInt		gOrigData [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
#if (KONCRYPTSTRENGTH == 8 )
Kon1ByteInt		gEncData [10] = {182, 110, 235, 142, 115, 11, 214, 71, 9, 174};
#elif (KONCRYPTSTRENGTH == 7 )
Kon1ByteInt		gEncData [10] = {73, 159, 212, 243, 63, 190, 9, 127, 175, 84};
#elif (KONCRYPTSTRENGTH == 6 )
Kon1ByteInt		gEncData [10] = {97, 208, 249, 227, 52, 22, 54, 36, 243, 2};
#elif (KONCRYPTSTRENGTH == 5 )
Kon1ByteInt		gEncData [10] = {169, 53, 127, 245, 199, 99, 180, 224, 227, 112};
#elif (KONCRYPTSTRENGTH == 4 )
Kon1ByteInt		gEncData [10] = {11, 129, 227, 80, 42, 46, 188, 100, 133, 74};
#elif (KONCRYPTSTRENGTH == 3 )
Kon1ByteInt		gEncData [10] = {62, 225, 73, 214, 34, 86, 231, 86, 126, 187};
#elif (KONCRYPTSTRENGTH == 2 )
Kon1ByteInt		gEncData [10] = {28, 33, 132, 40, 120, 99, 252, 92, 150, 29};
#else
Kon1ByteInt		gEncData [10] = {87, 102, 252, 226, 40, 109, 97, 134, 90, 20};
#endif
KonEnvStruct	gKonEnv;

		int		main (int argc, char **argv)
		
			{Kon1ByteInt	everythingIsOK;
		
			if (argc != 1)
				{printf ("\nThis program uses no command-line arguments.\n\n\a");
				return (EXIT_FAILURE);}
			KonSetCryptKey (&gKonEnv, (void *) 0, 0);
			KonEncryptData (&gKonEnv, gData, sizeof (gData));
			if ((everythingIsOK = MyEqualData (gData, gEncData, sizeof (gData))))
				{KonInitCrypt (&gKonEnv);
				KonDecryptData (&gKonEnv, gData, sizeof (gData));
				everythingIsOK = MyEqualData (gData, gOrigData,
					sizeof (gData));
				if (everythingIsOK)
					{KonInitCrypt (&gKonEnv);
					KonCryptSynch (&gKonEnv, gData, sizeof (gData));
					KonInitCrypt (&gKonEnv);
					KonEncryptASCII (&gKonEnv, gData, sizeof (gData));
					KonInitCrypt (&gKonEnv);
					KonEncryptText (&gKonEnv, gData, sizeof (gData));
					KonInitCrypt (&gKonEnv);
					KonDecryptText (&gKonEnv, gData, sizeof (gData));
					KonInitCrypt (&gKonEnv);
					KonDecryptASCII (&gKonEnv, gData, sizeof (gData));
					KonInitCrypt (&gKonEnv);
					KonCryptSynch (&gKonEnv, gData, sizeof (gData));
					everythingIsOK = MyEqualData (gData, gOrigData,
						sizeof (gData));}}
			if (everythingIsOK)
				{printf ("\nKonton2 appears to have compiled correctly.\n");
				printf ("It encrypted and decrypted correctly.\n\n");
				return (EXIT_SUCCESS);}
			printf ("\nKonton2 appears to have compiled incorrectly.\n");
			printf ("It encrypted and decrypted incorrectly.\n\n\a");
			return (EXIT_FAILURE);}

	Kon1ByteInt	MyEqualData (const void *dataA, const void *dataB,
						size_t theLength)

			{size_t			theIndex;
			Kon1ByteInt		isEqual;
	const	Kon1ByteInt		*dataAPtr, *dataBPtr;

			dataAPtr = dataA;
			dataBPtr = dataB;
			theIndex = theLength;
			isEqual = 1;
			do
				{if (*(dataAPtr++) != *(dataBPtr++))
					{isEqual = 0;
					break;}}
			while (--theIndex);
			return (isEqual);}
