CAuthFileUtils.cpp [plain text]
#include "CAuthFileUtils.h"
#define kFixedDESChunk 8
CAuthFileUtils::CAuthFileUtils()
{
}
CAuthFileUtils::~CAuthFileUtils()
{
}
void
CAuthFileUtils::getGMTime(struct tm *inOutGMT)
{
time_t theTime;
struct tm gmt;
::time(&theTime);
::gmtime_r(&theTime, &gmt);
memcpy( inOutGMT, &gmt, sizeof(struct tm) );
}
long
CAuthFileUtils::slotToOffset(long slot)
{
return sizeof(PWFileHeader) + (slot - 1) * sizeof(PWFileEntry);
}
void
CAuthFileUtils::passwordRecRefToString(PWFileEntry *inPasswordRec, char *outRefStr)
{
sprintf( outRefStr, "0x%.8lx%.8lx%.8lx%.8lx",
inPasswordRec->time,
inPasswordRec->rnd,
inPasswordRec->sequenceNumber,
inPasswordRec->slot );
}
int
CAuthFileUtils::stringToPasswordRecRef(const char *inRefStr, PWFileEntry *outPasswordRec)
{
char tempStr[9];
const char *sptr;
int result = false;
outPasswordRec->slot = 0;
if ( strncmp( inRefStr, "0x", 2 ) == 0 && strlen(inRefStr) == 2+8*4 )
{
sptr = inRefStr + 2;
memcpy( tempStr, sptr, 8 );
tempStr[8] = 0;
sscanf( tempStr, "%lx", &outPasswordRec->time );
sptr += 8;
memcpy( tempStr, sptr, 8 );
tempStr[8] = 0;
sscanf( tempStr, "%lx", &outPasswordRec->rnd );
sptr += 8;
memcpy( tempStr, sptr, 8 );
tempStr[8] = 0;
sscanf( tempStr, "%lx", &outPasswordRec->sequenceNumber );
sptr += 8;
memcpy( tempStr, sptr, 8 );
tempStr[8] = 0;
sscanf( tempStr, "%lx", &outPasswordRec->slot );
result = true;
}
return result;
}
#pragma mark -
#pragma mark ¥DES ACCESSORS¥
#pragma mark -
void
CAuthFileUtils::DESEncode(const void *key, void *data, unsigned long inDataLen)
{
KeysArray theKeyArray;
char *tptr = (char *)data;
KeySched((const EncryptBlk *)key, theKeyArray, kDESVersion2);
while ( inDataLen > 0 )
{
Encode(theKeyArray, kFixedDESChunk, tptr);
tptr += kFixedDESChunk;
inDataLen -= kFixedDESChunk;
}
}
void
CAuthFileUtils::DESDecode(const void *key, void *data, unsigned long inDataLen)
{
KeysArray theKeyArray;
char *tptr = (char *)data;
KeySched((const EncryptBlk *)key, theKeyArray, kDESVersion2);
while ( inDataLen > 0 )
{
Decode(theKeyArray, kFixedDESChunk, tptr);
tptr += kFixedDESChunk;
inDataLen -= kFixedDESChunk;
}
}
void
CAuthFileUtils::DESAutoDecode(const void *key, void *data)
{
PWFileEntry anEntry;
unsigned long offset;
unsigned char *dataPtr;
for ( offset = 0; offset <= sizeof(anEntry.passwordStr) - kFixedDESChunk; offset += kFixedDESChunk )
{
dataPtr = (unsigned char *)data + offset;
DESDecode( key, dataPtr, kFixedDESChunk );
if ( dataPtr[0] == 0 || dataPtr[1] == 0 || dataPtr[2] == 0 ||
dataPtr[3] == 0 || dataPtr[4] == 0 || dataPtr[5] == 0 ||
dataPtr[6] == 0 || dataPtr[7] == 0 )
break;
}
}