2026-04-06 00:20:51 -05:00

33 lines
1.2 KiB
C++

#pragma once
#include <windows.h>
#include "ApiDefines.h"
class DnsCodec {
public:
// Constants
static const ULONG kSeqXorMask = 0x39913991;
static const ULONG kMaxLabelSize = 63;
static const ULONG kBase32BufSize = 2048;
// Encoding
static ULONG Base32Encode(const BYTE* src, ULONG srcLen, CHAR* dst, ULONG dstSize);
static ULONG Base32Decode(const CHAR* src, ULONG srcLen, BYTE* dst, ULONG dstSize);
static int Base64Decode(const CHAR* src, int srcLen, BYTE* dst, int dstMax);
// DNS Name building
static void ToHex32(ULONG value, CHAR out[9]);
static void BuildQName(const CHAR* sid, const CHAR* op, ULONG seq, ULONG idx, const CHAR* dataLabel, const CHAR* domain, CHAR* out, ULONG outSize);
static int EncodeName(const CHAR* host, BYTE* buf, int bufSize);
static BOOL BuildDataLabels(const BYTE* src, ULONG srcLen, ULONG labelSize, CHAR* out, ULONG outSize);
// Compression (miniz)
static BOOL Compress(const BYTE* inBuf, ULONG inLen, BYTE** outBuf, ULONG* outLen);
static BOOL Decompress(const BYTE* inBuf, ULONG inLen, BYTE** outBuf, ULONG expectedLen);
private:
static const CHAR kBase32Alphabet[];
static const int kBase64DecodeTable[];
};