#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#if defined(_WIN32) && !defined(__MINGW32__)
#include "config-msvc.h"
#else
#include "config.h"
#endif
#include <spatialite/sqlite.h>
#include <spatialite/gaiaaux.h>
#include "md5.h"
GAIAAUX_DECLARE void *
gaiaCreateMD5Checksum (void)
{
MD5_CTX *md5 = malloc (sizeof (MD5_CTX));
splite_MD5_Init (md5);
return md5;
}
GAIAAUX_DECLARE void
gaiaFreeMD5Checksum (void *p_md5)
{
unsigned char result[32];
MD5_CTX *md5 = (MD5_CTX *) p_md5;
if (md5 == NULL)
return;
splite_MD5_Final (result, md5);
free (md5);
}
GAIAAUX_DECLARE void
gaiaUpdateMD5Checksum (void *p_md5, const unsigned char *blob, int blob_len)
{
MD5_CTX *md5 = (MD5_CTX *) p_md5;
if (md5 == NULL || blob == NULL)
return;
splite_MD5_Update (md5, (void *)blob, blob_len);
}
GAIAAUX_DECLARE char *
gaiaFinalizeMD5Checksum (void *p_md5)
{
int i;
char *hex;
char hex_byte[8];
unsigned char result[32];
MD5_CTX *md5 = (MD5_CTX *) p_md5;
if (md5 == NULL)
return NULL;
splite_MD5_Final (result, md5);
splite_MD5_Init (md5);
hex = malloc (33);
*hex = '\0';
for (i = 0; i < 16; i++)
{
sprintf (hex_byte, "%02x", result[i]);
strcat (hex, hex_byte);
}
return hex;
}