rodecomp/Source/Archive/PakCipher.h
ragnarok-clanker 4a3f02a4d1 Maintenance: Add mandatory field offset markers /* XXXX */ and x86 assertions to Archive headers (PakEntry, PakRegistry, PakCipher)
Batch #1056 by ragnarok-clanker: no function's compiled code changes; checked with 5 compiled unit(s), including every includer of Source/Archive/GPak.h, Source/Archive/PakCipher.h, Source/Archive/PakRegistry.h.
2026-10-27 13:37:30 +00:00

29 lines
970 B
C++

#ifndef RAGNAROK_SOURCE_ARCHIVE_PAKCIPHER_H
#define RAGNAROK_SOURCE_ARCHIVE_PAKCIPHER_H
#include <cstdint>
namespace myGPack {
class PakCipher {
public:
PakCipher();
explicit PakCipher(const std::uint8_t* key);
~PakCipher();
int DecodeBlock(int rounds, const std::uint8_t* input, std::uint8_t* output) const;
int Decode(const std::uint8_t* input, int length, std::uint8_t* output, int* outputLength, int cycle) const;
int DecodePrefix(const std::uint8_t* input, int length, std::uint8_t* output, int* outputLength) const;
private:
/* 0000 */ std::uint8_t m_roundKeys[16][8];
};
static_assert(sizeof(PakCipher) == 128);
std::uint8_t* DerivePakKey(const char* name, std::uint8_t* key);
int InitialPermutation(std::uint8_t* block);
int FinalPermutation(std::uint8_t* block);
int EncodeBlock(int rounds, const std::uint8_t (*roundKeys)[8], std::uint32_t inputLow, std::uint32_t inputHigh, std::uint8_t* output);
}
#endif