522c48f27e
- ricompilate versioni a 32bit con v141_xp (VisualStudio 2017 C++ per XP) - eliminate le correzioni introdotte per compilare con VS2013.
58 lines
2.2 KiB
C++
58 lines
2.2 KiB
C++
|
|
|
|
#include "Common/Platform/NMR_EncryptionHeader.h"
|
|
#include "Common/NMR_ErrorConst.h"
|
|
#include "Common/NMR_Exception.h"
|
|
|
|
#include "Common/Platform/NMR_ImportStream.h"
|
|
#include "Common/Platform/NMR_ExportStream.h"
|
|
|
|
#include "Common/NMR_Architecture_Utils.h"
|
|
#include <cstring>
|
|
namespace NMR {
|
|
|
|
CEncryptionHeader::CEncryptionHeader(std::vector<nfByte> const & additionalData)
|
|
:m_rgAdditionalData(additionalData)
|
|
{
|
|
}
|
|
|
|
size_t CEncryptionHeader::readFrom(PImportStream from) {
|
|
uEncryptedFileHeader header = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
|
|
from->readIntoBuffer(header.bytes, sizeof(header), true);
|
|
if (isBigEndian()) {
|
|
header.Header.Length.length = swapBytes(header.Header.Length.length);
|
|
}
|
|
constexpr size_t sigSize = sizeof(header.Header.Signature.bytes);
|
|
if (strncmp((char *)header.Header.Signature.bytes, "%3McF", sigSize) != 0)
|
|
throw CNMRException(NMR_ERROR_COULDNOTREADENCRYPTEDSTREAM);
|
|
if (header.Header.majorVersion != 0 || header.Header.minorVersion != 0)
|
|
throw CNMRException(NMR_ERROR_ENCRYPTEDCONTENTVERSIONUNSUPPORTED);
|
|
constexpr size_t headerSize = sizeof(header);
|
|
nfUint32 remainingBytes = header.Header.Length.length - headerSize;
|
|
if (remainingBytes > 0) {
|
|
m_rgAdditionalData.resize(remainingBytes, 0);
|
|
from->readIntoBuffer(m_rgAdditionalData.data(), remainingBytes, true);
|
|
}
|
|
m_nfHeaderSize = header.Header.Length.length;
|
|
return m_nfHeaderSize;
|
|
}
|
|
size_t CEncryptionHeader::writeTo(PExportStream to) {
|
|
uEncryptedFileHeader header = { { '%', '3', 'M', 'c', 'F', 0, 0, 0, 0, 0, 0, 0 } };
|
|
constexpr size_t headerSize = sizeof(header);
|
|
m_nfHeaderSize = (nfUint32)(headerSize + m_rgAdditionalData.size());
|
|
header.Header.Length.length = (nfUint32)m_nfHeaderSize;
|
|
if (isBigEndian()) {
|
|
header.Header.Length.length = swapBytes(header.Header.Length.length);
|
|
}
|
|
to->writeBuffer(header.bytes, headerSize);
|
|
if (m_rgAdditionalData.size() > 0)
|
|
to->writeBuffer(m_rgAdditionalData.data(), m_rgAdditionalData.size());
|
|
return m_nfHeaderSize;
|
|
}
|
|
std::vector<nfByte> const & CEncryptionHeader::additionalData() const {
|
|
return m_rgAdditionalData;
|
|
}
|
|
nfUint64 CEncryptionHeader::headerSize() const {
|
|
return m_nfHeaderSize;
|
|
}
|
|
} |