/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ /***************************************************************************** * * $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtCrypt.h * ***/ #ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTCRYPT_H #error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtCrypt.h included more than once" #endif #define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTCRYPT_H /***************************************************************************** * * Types and constants * ***/ struct CryptKey; enum ECryptAlgorithm { kCryptSha, kCryptSha1, kCryptMd5, kCryptRc4, kCryptRsa, kNumCryptAlgorithms }; struct ShaDigest { dword data[5]; }; /***************************************************************************** * * Digest functions * ***/ void CryptDigest ( ECryptAlgorithm algorithm, void * dest, // must be sized to the algorithm's digest size const unsigned sourceBytes, const void * sourceData ); void CryptDigest ( ECryptAlgorithm algorithm, void * dest, // must be sized to the algorithm's digest size unsigned sourceCount, const unsigned sourceBytes[], // [sourceCount] const void * sourcePtrs[] // [sourceCount] ); /***************************************************************************** * * Key generation * ***/ CryptKey * CryptKeyCreate ( ECryptAlgorithm algorithm, unsigned bytes, const void * data ); void CryptKeyClose ( CryptKey * key ); void CryptKeyGenerate ( ECryptAlgorithm algorithm, unsigned keyBits, // used for algorithms with variable key strength unsigned randomBytes, const void * randomData, ARRAY(byte) * privateData, ARRAY(byte) * publicData // only for public key cryptography ); unsigned CryptKeyGetBlockSize ( CryptKey * key ); void CryptCreateRandomSeed ( unsigned bytes, byte * data ); void CryptHashPassword ( const wchar username[], const wchar password[], ShaDigest * namePassHash ); void CryptHashPasswordChallenge ( unsigned clientChallenge, unsigned serverChallenge, const ShaDigest & namePassHash, ShaDigest * challengeHash ); void CryptCreateFastWeakChallenge ( unsigned * challenge, unsigned val1, unsigned val2 ); /***************************************************************************** * * Encryption and Decryption * ***/ void CryptEncrypt ( CryptKey * key, ARRAY(byte) * dest, unsigned sourceBytes, const void * sourceData ); void CryptEncrypt ( CryptKey * key, unsigned bytes, void * data ); void CryptDecrypt ( CryptKey * key, ARRAY(byte) * dest, // padded out to the algorithm's block size unsigned sourceBytes, const void * sourceData ); void CryptDecrypt ( CryptKey * key, unsigned bytes, void * data );