Init
This commit is contained in:
54
Source/include/slikenet/crypto/securestring.h
Normal file
54
Source/include/slikenet/crypto/securestring.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2018-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 <cstddef> // required for size_t
|
||||
|
||||
namespace SLNet
|
||||
{
|
||||
namespace Experimental
|
||||
{
|
||||
namespace Crypto
|
||||
{
|
||||
// #med - consider CSecureMemoryBuffer and derive CSecureString from that class
|
||||
// difference would be implicit null-terminated buffer in string buffer (upon Decrypt calls)
|
||||
// document: document Decrypt/FlushUnencryptedData() requirements for most secure handling
|
||||
// i.e. emphasize that FlushUnencryptedData() must be called after having called Decrypt() ASAP once access to the unencrypted data
|
||||
// data is no longer required
|
||||
class CSecureString
|
||||
{
|
||||
// member variables
|
||||
private:
|
||||
bool m_UTF8Mode;
|
||||
bool m_wasFlushed;
|
||||
size_t m_EncryptedBufferSize; // size of the buffer for the encrypted string
|
||||
size_t m_numBufferSize; // size of the actual supported string buffer (excluding the trailing \0-terminator)
|
||||
size_t m_numBufferUsed; // size of the available buffer currently used
|
||||
size_t m_numEncryptedBufferUsed; // size of the encrypted buffer which is used and contains the encrypted data
|
||||
size_t m_UnencryptedBufferSize; // size of the buffer allocated to retrieve the decrypted string
|
||||
unsigned char* m_EncryptedMemory;
|
||||
char* m_UnencryptedBuffer;
|
||||
|
||||
// constructor / destructor
|
||||
public:
|
||||
CSecureString(const size_t maxBufferSize, const bool utf8Mode = false);
|
||||
~CSecureString();
|
||||
|
||||
// container methods
|
||||
public:
|
||||
size_t AddChar(char* character);
|
||||
bool RemoveLastChar();
|
||||
void Reset();
|
||||
|
||||
// decryption methods
|
||||
public:
|
||||
const char* Decrypt();
|
||||
void FlushUnencryptedData();
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user