/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


		#include "binding_helpers.h"
		#include "hash/md5.h"
		#include "hash/nsha1.h"


//------------------------------------------------------------------------------
SQInteger		MD5(HSQUIRRELVM vm)
{
	__SQ_GETSTART(1)
	__SQ_GETSTRING(source)

	using namespace GS::MD5;

	Digest md5;

	md5_byte_t digest[16];
	md5.Append((const md5_byte_t *)source, GS::String::strlen(source));
	md5.Finish(digest);

	char md5_string[33];
	DigestToString(digest, md5_string);
	md5_string[32] = 0;

	__SQ_GETEND
	__SQ_RETURNSTRING(md5_string)
}
SQInteger		SHA1(HSQUIRRELVM vm)
{
	__SQ_GETSTART(1)
	__SQ_GETSTRING(source)
	GS::String hash = GS::SHA1::ComputeHexa(source);
	__SQ_GETEND
	__SQ_RETURNSTRING(hash.c_str())
}
//------------------------------------------------------------------------------

void			RegisterHashBinding(HSQUIRRELVM vm)
{
	using namespace GS::Script;

/*#
	Topic: Hash
#*/

/*#
	Section: Hashing
	Desc: Hashing
#*/
	/*#
		Func: MD5
		Proto: String:String source
		Desc: Compute a MD5 hexadecimal hash.
	#*/
	sq_register(vm, MD5, "MD5", _SC(".s"));
	/*#
		Func: SHA1
		Proto: String:String source
		Desc: Compute a SHA1 hexadecimal hash.
	#*/
	sq_register(vm, SHA1, "SHA1", _SC(".s"));
}
