Files
SLikeNet/Source/include/slikenet/crypto/cryptomanager.h
2025-11-24 14:19:51 +05:30

48 lines
1.6 KiB
C++
Raw Permalink Blame History

/*
* Copyright (c) 2019, SLikeSoft UG (haftungsbeschr<68>nkt)
*
* This source code is licensed under the MIT-style license found in the license.txt
* file in the root directory of this source tree.
*/
#pragma once
#include <openssl/evp.h> // used for EVP_xxxx
namespace SLNet
{
namespace Experimental
{
namespace Crypto
{
class CCryptoManager
{
private:
// class members
// note: using distinct contexts for encryption/decryption to prevent potential for race conditions
// #med - consider moving to SessionEncrypter class
static EVP_CIPHER_CTX* m_decryptionContext;
static EVP_CIPHER_CTX* m_encryptionContext;
static unsigned char m_initializationVector[EVP_MAX_IV_LENGTH];
static unsigned char m_sessionKey[EVP_MAX_KEY_LENGTH];
static bool m_Initialized;
public:
// initialization
static bool Initialize();
public:
// session encryption
static bool EncryptSessionData(const unsigned char* plaintext, size_t dataLength, unsigned char* outBuffer, size_t& inOutBufferSize);
static bool DecryptSessionData(const unsigned char* encryptedtext, size_t dataLength, unsigned char* outBuffer, size_t& inOutBufferSize);
static bool GetRequiredEncryptionBufferSize(size_t& encryptionDataByteLength);
public:
// secure memory management methods
// #med - consider moving to separate class (SecureMemory/MemoryManager)
static void* AllocateSecureMemory(size_t size);
static void FreeSecureMemory(void* pointer, size_t size);
static void SecureClearMemory(void* pointer, size_t dataSize);
};
}
}
}