rendered paste body#include "algorithm.h"
/*char * KeyGen(int AppsId)
{
static char * serial = 0;
int a, b, c, d;
if(!serial)
serial = (char *)malloc(25);
do
{
a = rand() % 100000;
b = rand() % 100000;
c = rand() % 100000;
d = rand() % 100000;
}
while(((a - b) + (c - d)) != AppsId);
sprintf(serial, "%05d-%05d-%05d-%05d", a, c, b, d);
return serial;
}
*/
char * KeyGen(char* Appschar)
{
static char * serial = NULL;
static char * xbuffer = NULL;
static char * mdstring = NULL;
int a, b, c, d;
int AppL, SerL;
char k;
md5_state_t state;
md5_byte_t digest[16];
if (!serial)
serial = (char *)malloc(60);
memset(serial, '\0', 0x60);
if(!xbuffer)
xbuffer = (char *)malloc(0x150);
memset(xbuffer, '\0', 0x150);
if(!mdstring)
mdstring = (char *)malloc(35);
memset(mdstring, '\0', 0x35);
a = rand();
b = rand() % 0x10000;
c = rand() % 0x10000;
d = rand() % 0x100;
sprintf(serial,"%08X-%04X-%04X-%01X",a,b,c,d);
SerL = strlen(serial);
xbuffer[0] = '1';
AppL = strlen(Appschar);
for (k = 0 ; k < AppL ; k++)
{
if (k % 2 == 0)
{
xbuffer[k+1] = k;
}
else
{
xbuffer[k+1] = Appschar[k];
}
}
for (k = 0 ; k < AppL ; k++)
{
if (k % 2 == 1)
{
xbuffer[k+1+AppL] = k;
}
else
{
xbuffer[k+1+AppL] = Appschar[k];
}
}
strcat(xbuffer,"00");
strcat(xbuffer,serial);
strcat(xbuffer,Appschar);
md5_init(&state);
md5_append(&state, (const md5_byte_t *)xbuffer, strlen(xbuffer));
md5_finish(&state, digest);
for (k = 0 ; k < 16 ; k++)
sprintf(mdstring + 2*k, "%02x", digest[k]);
for (k = 0 ; k < 35 ; k++)
{
if (k % 8 != 0)
{
if (k % 2 != 0)
{
serial[SerL+k/2] = mdstring[k];
}
}
else
{
serial[SerL+k/2] = '-';
k++;
}
}
return serial;
}