//---------------------------------------------------------------------------
// mc_blowfish.cpp
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// include header
#include "newblowfish.h"
#include "oldblowfish1.h"
#include "mc_blowfish.h"
#include <string.h>
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Proxies for deciding which algorithm to use based on a key prefix
// encrypt and decrypt
char *encrypt_string(char *key, char *str)
{
// Note: Returned string must be freed when done with it!
if (key!=0 && (strncmp(key,"cbc:",4)==0 || strncmp(key,"CBC:",4)==0 || strncmp(key,"cbc;",4)==0 || strncmp(key,"CBC;",4)==0))
{
// new method
return encrypt_string_new(key+4,str);
}
if (key!=0 && (strncmp(key,"mcps:",5)==0 || strncmp(key,"MCPS:",5)==0 || strncmp(key,"mcps;",5)==0 || strncmp(key,"MCPS;",5)==0))
{
// old method but remove prefix
return encrypt_string_oldecb(key+5,str);
}
// invoke old ecb method
return encrypt_string_oldecb(key,str);
}
char *decrypt_string(char *key, char *str)
{
// Note: Returned string must be freed when done with it!
if (key!=0 && (strncmp(key,"cbc:",4)==0 || strncmp(key,"CBC:",4)==0 || strncmp(key,"cbc;",4)==0 || strncmp(key,"CBC;",4)==0))
{
// new method
if (str[0]=='*')
return decrypt_string_new(key+4,str+1);
// it wasnt in cbc as expected, so use old method and warn user
char *cp=decrypt_string_oldecb(key,str);
char *cp2 = new char[strlen(cp)+15];
strcpy(cp2,"ERROR_NONCBC:");
strcat(cp2,cp);
delete cp;
return cp2;
}
else if ((strncmp(key,"mcps:",5)==0 || strncmp(key,"MCPS:",5)==0 || strncmp(key,"mcps;",5)==0 || strncmp(key,"MCPS;",5)==0))
{
// old style but remove key prefix
return decrypt_string_oldecb(key+5,str);
}
// invoke old ecb method
return decrypt_string_oldecb(key,str);
}
//---------------------------------------------------------------------------
syntax highlighted by Code2HTML, v. 0.9.1