mirror of
https://github.com/tribes2/engine.git
synced 2026-01-19 19:24:45 +00:00
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
//-----------------------------------------------------------------------------
|
|
// V12 Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#include "crypt/cryptMGF.h"
|
|
#include "crypt/cryptSHA1.h"
|
|
|
|
bool MGF1(const U8* seed, const U32 seedLen,
|
|
U8* mask, const U32 maskLen)
|
|
{
|
|
AssertFatal(seed != NULL, "Error, no seed!");
|
|
AssertFatal(mask != NULL && maskLen != 0, "No mask pointer or maskLen == 0");
|
|
|
|
U32 upper = (maskLen + SHA1Context::csmHashLenBytes - 1) / SHA1Context::csmHashLenBytes;
|
|
U8* maskBuffer = new U8[upper * SHA1Context::csmHashLenBytes];
|
|
|
|
U8* catBuffer = new U8[seedLen + 4];
|
|
dMemcpy(catBuffer, seed, seedLen);
|
|
|
|
SHA1Context hashContext;
|
|
for (U32 i = 0; i < upper; i++) {
|
|
catBuffer[seedLen + 0] = (i >> 24) & 0xFF;
|
|
catBuffer[seedLen + 1] = (i >> 16) & 0xFF;
|
|
catBuffer[seedLen + 2] = (i >> 8) & 0xFF;
|
|
catBuffer[seedLen + 3] = (i >> 0) & 0xFF;
|
|
|
|
hashContext.init();
|
|
hashContext.hashBytes(catBuffer, seedLen + 4);
|
|
hashContext.finalize();
|
|
|
|
hashContext.getHash(maskBuffer + (SHA1Context::csmHashLenBytes * i));
|
|
}
|
|
|
|
dMemcpy(mask, maskBuffer, maskLen);
|
|
|
|
delete [] catBuffer;
|
|
delete [] maskBuffer;
|
|
|
|
return true;
|
|
}
|
|
|