From 6c877497a5ef3fe0e42ddd9ff148b0b6a903f4a3 Mon Sep 17 00:00:00 2001 From: Hawkynt Date: Fri, 23 Oct 2026 15:12:23 +0200 Subject: [PATCH 1/3] + EGG: bzip2, AZO, LZMA, solid archives, ZIP 2.0/AES/LEA encryption The reader handled store and deflate only and misread real ALZip archives in two places: # the filename field's size counts the name only; the code page and parent-path id ALZip puts in front of it are not counted, so names were cut short; # a comment record between a file header and its blocks (and at the top level) stopped the parse. * the writer no longer emits a zero-size block for an empty file; ALZip writes none and EggDotNet cannot read that entry otherwise. Rung 1: EggDotNet (akolman/EggDotNet master, MIT) converted for AZO (Compression.Core/Dictionary/Azo) and the EGG encryption headers (WinZip-style AES, LEA in CTR mode); notices sit beside the code. Nothing permissive above it covers AZO or LEA. Verified against EggDotNet's ALZip-written corpus (15 archives, each block CRC-32 checked) and the other way: EggDotNet reads our writer's ours.egg with valid CRCs (eggdotnet-listing.txt); the writer output is pinned byte for byte. Split archives stay refused. --- Compression.Core/Dictionary/Azo/AzoDecoder.cs | 450 ++++++++++++++++++ .../Azo/THIRD-PARTY-NOTICE.EggDotNet.txt | 29 ++ Compression.Tests/Compression.Tests.csproj | 4 + Compression.Tests/Egg/EggReferenceTests.cs | 154 ++++++ Compression.Tests/Egg/EggTests.cs | 6 +- .../Egg/ReferenceVectors/.gitattributes | 2 + .../Egg/ReferenceVectors/README.md | 24 + .../Egg/ReferenceVectors/azonumbers.egg | Bin 0 -> 142809 bytes .../Egg/ReferenceVectors/azoshort_txt.egg | Bin 0 -> 206 bytes .../Egg/ReferenceVectors/directories.egg | Bin 0 -> 128 bytes .../ReferenceVectors/eggdotnet-listing.txt | 3 + .../Egg/ReferenceVectors/globalcomment.egg | Bin 0 -> 148 bytes .../ReferenceVectors/lorem_long_aes128.egg | Bin 0 -> 4918 bytes .../ReferenceVectors/lorem_long_aes256.egg | Bin 0 -> 4926 bytes .../lorem_long_store_lea128.egg | Bin 0 -> 15373 bytes .../lorem_long_store_lea256.egg | Bin 0 -> 15381 bytes .../ReferenceVectors/lorem_long_zipEnc.egg | Bin 0 -> 4909 bytes .../Egg/ReferenceVectors/lzma_simple.egg | Bin 0 -> 5926 bytes .../Egg/ReferenceVectors/ours.egg | Bin 0 -> 562 bytes .../Egg/ReferenceVectors/posix_small.egg | Bin 0 -> 124 bytes .../Egg/ReferenceVectors/small_kor.egg | Bin 0 -> 110 bytes .../Egg/ReferenceVectors/small_shift.egg | Bin 0 -> 112 bytes .../Egg/ReferenceVectors/solid.egg | Bin 0 -> 493 bytes .../Egg/ReferenceVectors/zeros.egg | Bin 0 -> 434 bytes .../FileFormats/FileFormat.Egg/EggCrypto.cs | 233 +++++++++ .../FileFormats/FileFormat.Egg/EggEntry.cs | 3 + .../FileFormat.Egg/EggFormatDescriptor.cs | 8 +- .../FileFormats/FileFormat.Egg/EggReader.cs | 174 +++++-- .../FileFormats/FileFormat.Egg/EggWriter.cs | 4 +- .../THIRD-PARTY-NOTICE.EggDotNet.txt | 29 ++ docs/catalogue/reference-formats.csv | 2 +- 31 files changed, 1075 insertions(+), 50 deletions(-) create mode 100644 Compression.Core/Dictionary/Azo/AzoDecoder.cs create mode 100644 Compression.Core/Dictionary/Azo/THIRD-PARTY-NOTICE.EggDotNet.txt create mode 100644 Compression.Tests/Egg/EggReferenceTests.cs create mode 100644 Compression.Tests/Egg/ReferenceVectors/.gitattributes create mode 100644 Compression.Tests/Egg/ReferenceVectors/README.md create mode 100644 Compression.Tests/Egg/ReferenceVectors/azonumbers.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/azoshort_txt.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/directories.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/eggdotnet-listing.txt create mode 100644 Compression.Tests/Egg/ReferenceVectors/globalcomment.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lorem_long_aes128.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lorem_long_aes256.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea128.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea256.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lorem_long_zipEnc.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/lzma_simple.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/ours.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/posix_small.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/small_kor.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/small_shift.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/solid.egg create mode 100644 Compression.Tests/Egg/ReferenceVectors/zeros.egg create mode 100644 Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggCrypto.cs create mode 100644 Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/THIRD-PARTY-NOTICE.EggDotNet.txt diff --git a/Compression.Core/Dictionary/Azo/AzoDecoder.cs b/Compression.Core/Dictionary/Azo/AzoDecoder.cs new file mode 100644 index 000000000..ca208add4 --- /dev/null +++ b/Compression.Core/Dictionary/Azo/AzoDecoder.cs @@ -0,0 +1,450 @@ +// AZO decoding, converted from EggDotNet (https://github.com/akolman/EggDotNet, MIT, Copyright (c) 2026 +// Andrew Kolman). See THIRD-PARTY-NOTICE.EggDotNet.txt. + +using System.Buffers.Binary; + +namespace Compression.Core.Dictionary.Azo; + +/// +/// ESTsoft's AZO compression (EGG method 3): independent blocks, each an LZ77 parse coded with an +/// adaptive binary arithmetic coder — literal and length models predicted from context, a distance +/// history, a small dictionary of recent matches. +/// +/// +/// Stream layout: a 2-byte header ('1', filter), then blocks introduced by three big-endian UInt32 — +/// uncompressed size, compressed size, and their XOR — until a block with a zero size. A block whose +/// compressed size is not at least 8 bytes smaller than its uncompressed size is stored. +/// +public static class AzoDecoder { + private const byte PrivateVersion = 0x31; // '1' + private const uint ReduceMinSize = 8; + + /// Decodes an AZO stream into exactly bytes. + public static byte[] Decompress(ReadOnlySpan data, long expectedSize) { + if (expectedSize > int.MaxValue) + throw new NotSupportedException("AZO members larger than 2 GiB are not supported."); + if (data.Length < 2 || data[0] != PrivateVersion) + throw new InvalidDataException("Missing or invalid AZO header."); + var output = new byte[expectedSize]; + var produced = 0; + var pos = 2; + while (true) { + if (pos + 12 > data.Length) + throw new InvalidDataException("Truncated AZO block header."); + var blockSize = BinaryPrimitives.ReadUInt32BigEndian(data[pos..]); + var compressSize = BinaryPrimitives.ReadUInt32BigEndian(data[(pos + 4)..]); + var check = BinaryPrimitives.ReadUInt32BigEndian(data[(pos + 8)..]); + pos += 12; + if (blockSize < compressSize || (blockSize ^ compressSize) != check) + throw new InvalidDataException("AZO block size check failed."); + if (blockSize == 0 || compressSize == 0) + break; + if (compressSize > data.Length - pos) + throw new InvalidDataException("AZO block overruns the stream."); + if (blockSize > output.Length - produced) + throw new InvalidDataException("AZO stream holds more data than the member declares."); + var block = output.AsSpan(produced, (int)blockSize); + DecodeBlock(data.Slice(pos, (int)compressSize), block); + pos += (int)compressSize; + produced += (int)blockSize; + if (produced == output.Length && pos + 12 > data.Length) + break; // some writers omit the terminating empty block + } + if (produced != output.Length) + throw new InvalidDataException($"AZO stream produced {produced} bytes, the member declares {expectedSize}."); + return output; + } + + private static void DecodeBlock(ReadOnlySpan input, Span output) { + if (input.Length + ReduceMinSize > output.Length) { + if (input.Length != output.Length) + throw new InvalidDataException("Corrupt AZO stored block."); + input.CopyTo(output); + return; + } + var buffer = new byte[output.Length]; + var entropy = new EntropyCode(input.ToArray()); + if (!new BlockCode(buffer).Code(entropy) || entropy.ConsumedBytes != input.Length) + throw new InvalidDataException("Corrupt AZO block."); + buffer.CopyTo(output); + } + + // ── constants ──────────────────────────────────────────────────────────── + + private const uint AlphaSize = 1 << 8; + private const uint MatchLengthCodeSize = 1 << 7; + private const uint MatchDistCodeSize = 1 << 7; + private const uint MatchDistSgap = 16; + private const uint MatchDistGap = 4; + private const uint MatchMinLength = 2; + private const uint MatchMinDist = 1; + private const uint DistanceHistorySize = 1 << 1; + private const uint DictionarySize = 1 << 7; + private const uint DictionaryHistorySize = 2; + private const int AlphaPredictShift = 5; + private const int LengthPredictShift = 4; + private const int BoolStateBits = 8; + + private static readonly uint[] MatchLengthCodeTable = [ + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 50, 52, 54, 56, 58, 62, 66, 70, 74, 78, + 82, 86, 90, 98, 106, 114, 122, 130, 138, 146, 154, 170, 186, 202, 218, 234, 250, 266, 282, 314, 346, 378, + 410, 442, 474, 506, 538, 602, 666, 730, 794, 858, 922, 986, 1050, 1178, 1306, 1434, 1562, 1690, 1818, 1946, + 2074, 2330, 2586, 2842, 3098, 3354, 3610, 3866, 4122, 4634, 5146, 5658, 6170, 6682, 7194, 7706, 8218, 9242, + 10266, 11290, 12314, 13338, 14362, 15386, 16410, 18458, 20506, 22554, 24602, 26650, 28698, 30746, + ]; + + private static readonly uint[] MatchDistCodeTable = [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 27, 29, 33, 37, 41, 45, + 53, 61, 69, 77, 93, 109, 125, 141, 173, 205, 237, 269, 333, 397, 461, 525, 653, 781, 909, 1037, 1293, 1549, + 1805, 2061, 2573, 3085, 3597, 4109, 5133, 6157, 7181, 8205, 10253, 12301, 14349, 16397, 20493, 24589, 28685, + 32781, 40973, 49165, 57357, 65549, 81933, 98317, 114701, 131085, 163853, 196621, 229389, 262157, 327693, + 393229, 458765, 524301, 655373, 786445, 917517, 1048589, 1310733, 1572877, 1835021, 2097165, 2621453, + 3145741, 3670029, 4194317, 5242893, 6291469, 7340045, 8388621, 10485773, 12582925, 14680077, 16777229, + 20971533, 25165837, 29360141, 33554445, 41943053, 50331661, 58720269, 67108877, 83886093, 100663309, + 117440525, 134217741, 167772173, 201326605, 234881037, 268435469, 335544333, 402653197, 469762061, + 536870925, 671088653, 805306381, 939524109, + ]; + + private static readonly uint[] MatchLengthExtraBits = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, + 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, + 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, + ]; + + private static readonly uint[] MatchDistExtraBits = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, + 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, + 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, + 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, + 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, + ]; + + /// log2 as the reference computes it (double division), so rounding matches its integer casts. + private static double Log2(uint x) => Math.Log(x) / Math.Log(2); + + private static uint MatchDistCode(uint value) { + value -= MatchMinDist; + if (value < MatchDistSgap) + return value; + value -= MatchDistSgap; + var extraBit = (int)Log2(value / MatchDistGap + 1); + return (uint)(MatchDistSgap + extraBit * MatchDistGap + (value - ((1u << extraBit) - 1) * MatchDistGap) / (1u << extraBit)); + } + + // ── bit input and arithmetic decoder ──────────────────────────────────── + + private sealed class BitCode(byte[] input) { + private readonly uint _totalBits = (uint)input.Length * 8; + private uint _index; + private uint _remain = 8; + private uint _read; + + public uint ReadBits => this._read; + + public byte Read8() { + // all callers read whole bytes from a byte boundary (initialisation) + if (this._totalBits < this._read + 8) + return 0; + this._read += 8; + return input[this._index++]; + } + + public bool ReadBit() { + if (this._totalBits == this._read) + return false; + ++this._read; + --this._remain; + if (this._index >= input.Length) + return false; + var v = (input[this._index] & (1u << (int)this._remain)) != 0; + if (this._remain == 0) { + ++this._index; + this._remain = 8; + } + return v; + } + } + + private sealed class EntropyCode { + private const uint Msb = 0x80000000; + private const uint SecondMsb = 0x40000000; + private readonly BitCode _bits; + private uint _low; + private uint _up = uint.MaxValue; + private uint _tag; + + public EntropyCode(byte[] input) { + this._bits = new BitCode(input); + for (var i = 0; i < 4; ++i) + this._tag |= (uint)this._bits.Read8() << ((3 - i) * 8); + } + + public long ConsumedBytes => (this._bits.ReadBits + 7) / 8; + + private void Rescale() { + while ((this._low & Msb) == (this._up & Msb)) { + this._tag = (this._tag << 1) | (this._bits.ReadBit() ? 1u : 0); + this._low <<= 1; + this._up = (this._up << 1) | 1; + } + while ((this._low & SecondMsb) != 0 && (this._up & SecondMsb) == 0) { + this._tag = ((this._tag << 1) | (this._bits.ReadBit() ? 1u : 0)) ^ Msb; + this._low = (this._low << 1) & (Msb - 1); + this._up = (this._up << 1) | 1 | Msb; + } + } + + private uint Step(int totalBit) => this._low == 0 && this._up == uint.MaxValue + ? 1u << (32 - totalBit) + : (this._up - this._low + 1) >> totalBit; + + /// A value of equiprobable bits. + public uint DecodeUniform(uint totalBit) { + var t = this.Step((int)totalBit); + var v = (this._tag - this._low) / t; + this._up = this._low + t * (v + 1) - 1; + this._low += t * v; + this.Rescale(); + return v; + } + + /// One binary decision whose zero side has probability / 2^. + public bool Decode(uint cumCount, int totalBit) { + var t = this.Step(totalBit); + var v = (this._tag - this._low) / t; + if (v >= cumCount) + this._low += t * cumCount; + else + this._up = this._low + t * cumCount - 1; + this.Rescale(); + return v >= cumCount; + } + } + + // ── adaptive models ────────────────────────────────────────────────────── + + private sealed class BoolState { + private const int TotalBit = 12; + private const uint TotalCount = 1u << TotalBit; + private const uint ArrayN = 1u << BoolStateBits; + private readonly uint[] _prob = [.. Enumerable.Repeat(TotalCount / 2, (int)ArrayN)]; + private uint _state; + + public bool Decode(EntropyCode entropy) { + var b = entropy.Decode(this._prob[this._state], TotalBit); + const int shift = TotalBit - 6; + ref var p = ref this._prob[this._state]; + if (!b) p += (TotalCount - p) >> shift; + else p -= p >> shift; + this._state = ((this._state << 1) & (ArrayN - 1)) | (b ? 1u : 0); + return b; + } + } + + private sealed class EntropyBitProb { + private const int TotalBit = 10; + private const uint TotalCount = 1u << TotalBit; + private readonly int _bitN; + private readonly uint[] _prob; + + public EntropyBitProb(uint n) { + this._bitN = (int)Log2(n - 1) + 1; + this._prob = [.. Enumerable.Repeat(TotalCount / 2, 1 << this._bitN)]; + } + + public uint Decode(EntropyCode entropy) { + uint value = 0, pre = 1; + for (var i = this._bitN - 1; i >= 0; --i) { + var v = entropy.Decode(this._prob[pre], TotalBit); + if (v) value |= 1u << i; + pre = (pre << 1) | (v ? 1u : 0); + } + this.Update(value); + return value; + } + + public void Update(uint value) { + uint pre = 1; + for (var i = this._bitN - 1; i >= 0; --i) { + var v = (value >> i) & 1; + const int shift = TotalBit - 6; + ref var p = ref this._prob[pre]; + if (v == 0) p += (TotalCount - p) >> shift; + else p -= p >> shift; + pre = (pre << 1) | v; + } + } + + /// Which of two models gave the higher probability (sign of the comparison). + public int Compare(EntropyBitProb other, uint value) { + uint prob1 = 1, prob2 = 1, pre = 1; + for (var i = this._bitN - 1; i >= 0; --i) { + var p1 = this._prob[pre]; + var p2 = other._prob[pre]; + var v = ((value >> i) & 1) != 0; + if (((prob1 | prob2) & (((1u << TotalBit) - 1) << (32 - TotalBit))) != 0) { + prob1 >>= TotalBit; + prob2 >>= TotalBit; + } + prob1 *= v ? TotalCount - p1 : p1; + prob2 *= v ? TotalCount - p2 : p2; + pre = (pre << 1) | (v ? 1u : 0); + } + return prob1.CompareTo(prob2); + } + } + + private sealed class PredictProb { + private readonly int _shift; + private readonly EntropyBitProb[] _prob1; + private readonly EntropyBitProb[] _prob2; + private readonly int[] _lucky; + + public PredictProb(uint key, uint n, int shift) { + this._shift = shift; + this._prob1 = [.. Enumerable.Range(0, (int)key).Select(_ => new EntropyBitProb(n))]; + this._prob2 = [.. Enumerable.Range(0, (int)key >> shift).Select(_ => new EntropyBitProb(n))]; + this._lucky = new int[key]; + } + + public uint Decode(EntropyCode entropy, uint pre) { + var p1 = this._prob1[pre]; + var p2 = this._prob2[pre >> this._shift]; + uint v; + if (this._lucky[pre] >= 0) { + v = p1.Decode(entropy); + p2.Update(v); + } else { + v = p2.Decode(entropy); + p1.Update(v); + } + var r = p1.Compare(p2, v); + if (r > 0) ++this._lucky[pre]; + else if (r < 0) --this._lucky[pre]; + return v; + } + } + + private sealed class HistoryList { + private readonly uint[] _rep; + private readonly BoolState _state = new(); + private readonly EntropyBitProb _prob; + + public HistoryList(uint init, uint n) { + this._rep = [.. Enumerable.Range(0, (int)n).Select(i => init + (uint)i)]; + this._prob = new EntropyBitProb(n); + } + + public void Add(uint value) => this.Add(value, (uint)this._rep.Length - 1); + + private void Add(uint value, uint delIdx) { + Array.Copy(this._rep, 0, this._rep, 1, delIdx); + this._rep[0] = value; + } + + public bool TryDecode(EntropyCode entropy, out uint value) { + value = 0; + if (!this._state.Decode(entropy)) + return false; + var idx = this._prob.Decode(entropy); + if (idx >= this._rep.Length) + throw new InvalidDataException("Corrupt AZO history index."); + value = this._rep[idx]; + this.Add(value, idx); + return true; + } + } + + private sealed class SymbolCode(uint n, uint historyN) { + private readonly HistoryList _history = new(0, historyN); + private readonly EntropyBitProb _prob = new(n); + + public uint Decode(EntropyCode entropy) { + if (this._history.TryDecode(entropy, out var ret)) + return ret; + ret = this._prob.Decode(entropy); + this._history.Add(ret); + return ret; + } + } + + private sealed class DictionaryTable { + private readonly (uint Position, uint Length)[] _data = [.. Enumerable.Range(0, (int)DictionarySize).Select(i => (0u, MatchMinLength + (uint)i))]; + private readonly BoolState _findState = new(); + private readonly SymbolCode _prob = new(DictionarySize, DictionaryHistorySize); + + public bool TryDecode(EntropyCode entropy, out uint pos, out uint len) { + pos = len = 0; + if (!this._findState.Decode(entropy)) + return false; + var n = this._prob.Decode(entropy); + if (n >= DictionarySize) + return false; + (pos, len) = this._data[n]; + Array.Copy(this._data, 0, this._data, 1, n); + this._data[0] = (pos, len); + return true; + } + + public void Add(uint pos, uint length) { + Array.Copy(this._data, 0, this._data, 1, this._data.Length - 1); + this._data[0] = (pos, length); + } + } + + private sealed class BlockCode(byte[] buffer) { + private readonly BoolState _matchState = new(); + private readonly PredictProb _alpha = new(AlphaSize, AlphaSize, AlphaPredictShift); + private readonly DictionaryTable _dictionary = new(); + private readonly HistoryList _distHistory = new(MatchMinDist, DistanceHistorySize); + private readonly EntropyBitProb _distProb = new(MatchDistCodeSize); + private readonly PredictProb _lenProb = new(MatchDistCodeSize, MatchLengthCodeSize, LengthPredictShift); + + private uint DecodeDistance(EntropyCode entropy) { + if (this._distHistory.TryDecode(entropy, out var dist)) + return dist; + var idx = this._distProb.Decode(entropy); + if (idx >= MatchDistCodeTable.Length) + throw new InvalidDataException("Corrupt AZO distance code."); + dist = MatchDistCodeTable[idx] + entropy.DecodeUniform(MatchDistExtraBits[idx]); + this._distHistory.Add(dist); + return dist; + } + + private uint DecodeLength(EntropyCode entropy, uint distCode) { + if (distCode >= MatchDistCodeSize) + throw new InvalidDataException("Corrupt AZO distance code."); + var lenCode = this._lenProb.Decode(entropy, distCode); + if (lenCode >= MatchLengthCodeTable.Length) + throw new InvalidDataException("Corrupt AZO length code."); + return MatchLengthCodeTable[lenCode] + entropy.DecodeUniform(MatchLengthExtraBits[lenCode]); + } + + public bool Code(EntropyCode entropy) { + buffer[0] = (byte)this._alpha.Decode(entropy, 0); + for (uint i = 1; i < buffer.Length;) { + if (!this._matchState.Decode(entropy)) { + buffer[i] = (byte)this._alpha.Decode(entropy, buffer[i - 1]); + ++i; + continue; + } + uint dist, length; + if (this._dictionary.TryDecode(entropy, out var dictPos, out length)) + dist = i - dictPos; + else { + dist = this.DecodeDistance(entropy); + length = this.DecodeLength(entropy, MatchDistCode(dist)); + this._dictionary.Add(i, length); + } + if (i < dist || i + length > buffer.Length || length == 0) + return false; + for (var k = 0u; k < length; ++k) + buffer[i + k] = buffer[i - dist + k]; + i += length; + } + return true; + } + } +} diff --git a/Compression.Core/Dictionary/Azo/THIRD-PARTY-NOTICE.EggDotNet.txt b/Compression.Core/Dictionary/Azo/THIRD-PARTY-NOTICE.EggDotNet.txt new file mode 100644 index 000000000..5970171eb --- /dev/null +++ b/Compression.Core/Dictionary/Azo/THIRD-PARTY-NOTICE.EggDotNet.txt @@ -0,0 +1,29 @@ +The AZO decoder (Compression.Core/Dictionary/Azo/AzoDecoder.cs) and the EGG encryption code +(Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggCrypto.cs: ZIP 2.0, AES and LEA variants and +the LEA block cipher) are converted to C# from EggDotNet; the EGG test archives under +Compression.Tests/Egg/ReferenceVectors come from its test corpus: + + Upstream: https://github.com/akolman/EggDotNet (master, fetched 2026-10-23) + Licence: MIT + +MIT License + +Copyright (c) 2026 Andrew Kolman (akolman) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Compression.Tests/Compression.Tests.csproj b/Compression.Tests/Compression.Tests.csproj index 7bba71ab0..301282bcb 100644 --- a/Compression.Tests/Compression.Tests.csproj +++ b/Compression.Tests/Compression.Tests.csproj @@ -118,6 +118,10 @@ ZfsVectors.%(Filename)%(Extension) + + + EggVectors.%(Filename)%(Extension) + DarVectors.%(Filename)%(Extension) diff --git a/Compression.Tests/Egg/EggReferenceTests.cs b/Compression.Tests/Egg/EggReferenceTests.cs new file mode 100644 index 000000000..f5a0e275e --- /dev/null +++ b/Compression.Tests/Egg/EggReferenceTests.cs @@ -0,0 +1,154 @@ +using System.Reflection; +using System.Text; +using FileFormat.Egg; + +namespace Compression.Tests.Egg; + +/// +/// EGG archives ALZip wrote, from EggDotNet's test corpus (MIT). Each data block carries the CRC-32 +/// ALZip computed, which the reader verifies, so a member that decodes is byte-exact; the content +/// assertions are the ones EggDotNet's own tests make. See ReferenceVectors/README.md. +/// +[TestFixture] +public class EggReferenceTests { + private const string Password = "password12345!"; + + private static byte[] Vector(string name) { + using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream($"EggVectors.{name}") + ?? throw new FileNotFoundException($"Embedded EGG vector '{name}' is missing from the test assembly."); + using var ms = new MemoryStream(); + stream.CopyTo(ms); + return ms.ToArray(); + } + + private static EggReader Open(string name) => new(new MemoryStream(Vector(name))); + + [TestCase("azoshort_txt.egg", "AZO")] + [TestCase("azonumbers.egg", "AZO")] + [TestCase("lzma_simple.egg", "LZMA")] + [Category("ThirdPartyVector")] + public void Given_CompressedMember_When_Extracted_Then_AlZipCrcHolds(string vector, string method) { + using var r = Open(vector); + var files = r.Entries.Where(e => !e.IsDirectory).ToList(); + Assert.That(files.Select(e => e.MethodName), Has.Some.EqualTo(method)); + foreach (var e in files) + Assert.That(r.Extract(e), Has.Length.EqualTo(e.UncompressedSize), e.Name); + } + + [Test, Category("ThirdPartyVector")] + public void Given_LzmaArchive_When_Extracted_Then_SizesMatchEggDotNet() { + using var r = Open("lzma_simple.egg"); + var e = r.Entries.Single(x => x.Name == "lorem_ipsum.txt"); + Assert.That(e.CompressedSize, Is.EqualTo(5723)); + Assert.That(r.Extract(e), Has.Length.EqualTo(34446)); + } + + [TestCase("lorem_long_zipEnc.egg")] + [TestCase("lorem_long_aes128.egg")] + [TestCase("lorem_long_aes256.egg")] + [TestCase("lorem_long_store_lea128.egg")] + [TestCase("lorem_long_store_lea256.egg")] + [Category("ThirdPartyVector")] + public void Given_EncryptedArchive_When_Decrypted_Then_LoremText(string vector) { + using var r = Open(vector); + var e = r.Entries.Single(x => !x.IsDirectory); + Assert.That(e.IsEncrypted, Is.True); + var text = Encoding.UTF8.GetString(r.Extract(e, Password)); + Assert.That(text, Has.Length.EqualTo(15_238)); + Assert.That(text, Does.StartWith("Lorem ipsum dolor sit amet")); + Assert.That(text, Does.EndWith("sed faucibus orci ligula eu nisi.")); + } + + [TestCase("lorem_long_zipEnc.egg")] + [TestCase("lorem_long_aes256.egg")] + [TestCase("lorem_long_store_lea128.egg")] + [Category("EdgeCase")] + public void Given_EncryptedArchive_When_WrongOrNoPassword_Then_Refused(string vector) { + using var r = Open(vector); + var e = r.Entries.Single(x => !x.IsDirectory); + Assert.Throws(() => r.Extract(e)); + Assert.Throws(() => r.Extract(e, "badpassword")); + } + + [Test, Category("ThirdPartyVector")] + public void Given_SolidArchive_When_Extracted_Then_FirstEqualsLast() { + using var r = Open("solid.egg"); + Assert.That(r.IsSolid, Is.True); + var files = r.Entries.Where(e => !e.IsDirectory).ToList(); + Assert.That(r.Extract(files[^1]), Is.EqualTo(r.Extract(files[0]))); + } + + [TestCase("small_kor.egg", "작은.txt")] + [TestCase("small_shift.egg", "小さい.txt")] + [Category("ThirdPartyVector")] + public void Given_CodePageName_When_Read_Then_DecodedAndHelloWorld(string vector, string name) { + System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); + using var r = Open(vector); + var e = r.Entries.First(); + Assert.That(e.Name, Is.EqualTo(name)); + Assert.That(Encoding.UTF8.GetString(r.Extract(e)), Is.EqualTo("Hello, world!")); + } + + [Test, Category("ThirdPartyVector")] + public void Given_NestedDirectories_When_Listed_Then_DeepFilePresent() { + using var r = Open("directories.egg"); + Assert.That(r.Entries.Select(e => e.Name), Has.Some.EqualTo("dir1/dir2/dir3/test.txt")); + } + + [Test, Category("ThirdPartyVector")] + public void Given_LargeMember_When_Listed_Then_SizesMatchEggDotNet() { + using var r = Open("zeros.egg"); + var e = r.Entries.Single(); + Assert.That(e.CompressedSize, Is.EqualTo(338)); + Assert.That(e.UncompressedSize, Is.EqualTo(197_540_460)); + } + + [TestCase("posix_small.egg")] + [TestCase("globalcomment.egg")] + [Category("ThirdPartyVector")] + public void Given_Archive_When_EveryMemberExtracted_Then_CrcHolds(string vector) { + using var r = Open(vector); + foreach (var e in r.Entries.Where(e => !e.IsDirectory)) + Assert.That(r.Extract(e), Has.Length.EqualTo(e.UncompressedSize), e.Name); + } + + [Test, Category("EdgeCase")] + public void Given_CorruptAzoBlock_When_Extracted_Then_InvalidData() { + var bytes = Vector("azoshort_txt.egg"); + using var probe = new EggReader(new MemoryStream(bytes)); + var e = probe.Entries.Single(); + bytes[bytes.Length - 20] ^= 0x5A; + using var r = new EggReader(new MemoryStream(bytes)); + Assert.Throws(() => r.Extract(r.Entries.Single())); + } + + private static byte[] OursText() => + Encoding.ASCII.GetBytes(string.Concat(Enumerable.Range(0, 300).Select(i => $"EGG line {i % 17}\r\n"))); + + private static byte[] OursRaw() => [.. Enumerable.Range(0, 3000).Select(i => (byte)(i * 7))]; + + // ours.egg is what our writer produced for these three inputs; EggDotNet read it back + // (ReferenceVectors/eggdotnet-listing.txt: both members Deflate, CRC valid, SHA-256 as below). + [Test, Category("ThirdPartyVector")] + public void Given_SameInputs_When_Written_Then_BytesEqualTheEggDotNetAcceptedFixture() { + using var ms = new MemoryStream(); + new EggFormatDescriptor().Create(ms, [ + Compression.Registry.ArchiveInputInfo.InMemory("docs/text.txt", OursText()), + Compression.Registry.ArchiveInputInfo.InMemory("empty.txt", []), + Compression.Registry.ArchiveInputInfo.InMemory("raw.bin", OursRaw()), + ], new Compression.Registry.FormatCreateOptions()); + Assert.That(ms.ToArray(), Is.EqualTo(Vector("ours.egg"))); + } + + [Test, Category("ThirdPartyVector")] + public void Given_OurFixture_When_Read_Then_MatchesEggDotNetListing() { + using var r = Open("ours.egg"); + Assert.That(r.Entries.Select(e => e.Name), Is.EqualTo(new[] { "docs/text.txt", "empty.txt", "raw.bin" })); + var text = r.Extract(r.Entries.Single(e => e.Name == "docs/text.txt")); + Assert.That(Convert.ToHexStringLower(System.Security.Cryptography.SHA256.HashData(text)), + Is.EqualTo("53ff0c178b3267b2dffbdd59979fba67927f8cc7cc60a4eb209b7c06e92096c9")); + Assert.That(text, Is.EqualTo(OursText())); + Assert.That(r.Extract(r.Entries.Single(e => e.Name == "raw.bin")), Is.EqualTo(OursRaw())); + Assert.That(r.Extract(r.Entries.Single(e => e.Name == "empty.txt")), Is.Empty); + } +} diff --git a/Compression.Tests/Egg/EggTests.cs b/Compression.Tests/Egg/EggTests.cs index 7cfc870d5..da22946ac 100644 --- a/Compression.Tests/Egg/EggTests.cs +++ b/Compression.Tests/Egg/EggTests.cs @@ -183,14 +183,14 @@ public void Writer_LongUtf8Filename_UsesExtendedExtraFieldLength() { [Test, Category("HappyPath")] public void UnsupportedMethod_ListsButThrowsOnExtract() { var payload = "ignored"u8.ToArray(); - // Algorithm 4 = LZMA — listed, but extraction must throw rather than fake bytes. - var archive = BuildStoreOrRaw("movie.lzma", payload, payload, algorithm: 4); + // Algorithm 9 is not an EGG method — listed, but extraction must throw rather than fake bytes. + var archive = BuildStoreOrRaw("movie.lzma", payload, payload, algorithm: 9); var d = new EggFormatDescriptor(); using var ms = new MemoryStream(archive); var entries = d.List(ms, null); Assert.That(entries, Has.Count.EqualTo(1)); - Assert.That(entries[0].Method, Is.EqualTo("LZMA")); + Assert.That(entries[0].Method, Is.EqualTo("Method9")); ms.Position = 0; Assert.Throws(() => diff --git a/Compression.Tests/Egg/ReferenceVectors/.gitattributes b/Compression.Tests/Egg/ReferenceVectors/.gitattributes new file mode 100644 index 000000000..7c0f24129 --- /dev/null +++ b/Compression.Tests/Egg/ReferenceVectors/.gitattributes @@ -0,0 +1,2 @@ +# Fixture bytes are the test: never let a checkout rewrite line endings. +*.egg -text diff --git a/Compression.Tests/Egg/ReferenceVectors/README.md b/Compression.Tests/Egg/ReferenceVectors/README.md new file mode 100644 index 000000000..e08121b62 --- /dev/null +++ b/Compression.Tests/Egg/ReferenceVectors/README.md @@ -0,0 +1,24 @@ +# EGG reference vectors + +All files come unmodified from EggDotNet's test corpus (`src/EggDotNet.Tests/test_files/`, +akolman/EggDotNet master, MIT, fetched 2026-10-23); they were written by ALZip. + +| File | Exercises | +| --- | --- | +| `azoshort_txt.egg`, `azonumbers.egg` | AZO compression | +| `lzma_simple.egg` | LZMA (34 446 bytes in 5 723) | +| `solid.egg` | solid mode (first and last member identical) | +| `lorem_long_zipEnc.egg`, `lorem_long_aes128.egg`, `lorem_long_aes256.egg` | ZIP 2.0, AES-128 and AES-256 encryption (password `password12345!`) | +| `lorem_long_store_lea128.egg`, `lorem_long_store_lea256.egg` | LEA-128 and LEA-256 encryption (same password) | +| `small_kor.egg`, `small_shift.egg` | CP949 and Shift-JIS file names | +| `directories.egg` | nested directories | +| `zeros.egg` | a 197 540 460-byte member (listed, not extracted) | +| `posix_small.egg`, `globalcomment.egg` | POSIX file information, archive comment | + +Each data block stores the CRC-32 ALZip computed, and the reader checks it, so every member these +tests extract is byte-exact; the content assertions repeat EggDotNet's own. + +`ours.egg` is our writer's output (`docs/text.txt`, an empty `empty.txt`, `raw.bin`; Deflate). +EggDotNet (same revision, a net10.0 console that opens each member and checks its CRC) read it +back as recorded in `eggdotnet-listing.txt`. The empty member has no block, as ALZip writes it, so +EggDotNet lists it without opening it. diff --git a/Compression.Tests/Egg/ReferenceVectors/azonumbers.egg b/Compression.Tests/Egg/ReferenceVectors/azonumbers.egg new file mode 100644 index 0000000000000000000000000000000000000000..c5bc3400c3b02489adf8f1e4d007c751533e3e03 GIT binary patch literal 142809 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

%Wy$T!Bt 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 (f6{sFV#Hp=|?`DEt$lL0iDK|`$tL*5b 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 z

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 J3E6_x0swY+C9D7d literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/eggdotnet-listing.txt b/Compression.Tests/Egg/ReferenceVectors/eggdotnet-listing.txt new file mode 100644 index 000000000..e1f5af848 --- /dev/null +++ b/Compression.Tests/Egg/ReferenceVectors/eggdotnet-listing.txt @@ -0,0 +1,3 @@ +ours.egg docs/text.txt 3720 53ff0c178b3267b2dffbdd59979fba67927f8cc7cc60a4eb209b7c06e92096c9 Deflate crc=True +ours.egg empty.txt 0 (no block) +ours.egg raw.bin 3000 7291514d2492fd7ff49e10ba7df95d19d31d199b89d74bcb62cebdee1bc1a498 Deflate crc=True diff --git a/Compression.Tests/Egg/ReferenceVectors/globalcomment.egg b/Compression.Tests/Egg/ReferenceVectors/globalcomment.egg new file mode 100644 index 0000000000000000000000000000000000000000..33f7387837f446338e2796dbd084d64079d592df GIT binary patch literal 148 zcmZ>DcXwo9)c$bYfB^`UnjUdHp3uq#V#|RDAXqaI$md`vNi8nXE2${qp4z6vz{$YC zQk1b;{1zivi!jetCPpTZ1_dDgZ@oDLWYA}ivnNl6Yn=4Z^$I<)Hspl&8Q;(oI$;H8 jyfwXauQM|gnH^(c;A3#l$xlkmQAp0u%}vcK0civP$d4^g literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/lorem_long_aes128.egg b/Compression.Tests/Egg/ReferenceVectors/lorem_long_aes128.egg new file mode 100644 index 0000000000000000000000000000000000000000..176d9358b1260fcf2d1e20ef74f810d8ffee17d8 GIT binary patch literal 4918 zcmV-66UppFM@K;b0X}id82|tP03w3o2;-223IG5A0ERmN000000IZRP3IG%UY;SU9 zZC`0{b9HTBY;SI7E_8TwayG^U03!fYXlZjGW@&6?AZc?TWo~0~d2n=PWFU2OX>MmA zK}AzBGB^vBhAaRH000YmS6DjQ0RRt2(Fgz)00C#Q764)zM^W^@2yIezX`w_aY`7wV z;s_HAwE_VIhC2WNSrPyM?mpjPB7))w5DTTQvM&5}{RzEQBo(oDh2)J#XThoPx+Cr@ zm)~Bx)p%H+0ezzK@nP$YPP6tlY!lw^2VEU5ZW0lakAOgRz0T|~tAekfQf&{~T-ZHx z7@cJiKv}uwCdJ-kOaLz}gjt!b?lmfiIZEIv;3_sYyegtZn$o11hi%o%jv>z-L5InM zLvcds+-r?^)e2xhiFa3K75`893ABp!il*?HFF@*eUZ;q~3maj}#)%p)t{ga6+ooBT zDFxAm?ISv!r}c7$s#o7CD?kSTYx#c%Q-CrF1}%B@pIZ z&FDgcUmftf4PNk0E?fd_0Gsj)Rp>-vuvKnIf3!GEVKwCz1ID$;V2cI14hb6LZGrF& z7HaF|M-9_yUpfqY1k6Q_*GS>U2$XLIVa-1OXqsao2E5gLzhk8me{|=Jxj06=T*^zK z!L)nmJt2zfoSoYoT31Zp{7f31yCa6eTyOU_wQCDX`Uwd{s+muz6pXYjUMpm9!hePe z=CE4>nq}DB%TA%I)(>N<^ImjO3xUI-GFC_-&CPpqCevF61 zrM6Ds+VCnvzO$$1%8*G9G%cP3Qx_(Agxp|Z410dJyd zV*i0)c61FVv3qO5Qs7jXCM1aS*`S7>^*>>E$Q@q-^V`yo_DA)$eleX;#0KqwiMn~E zlY2#N_D$B@zson47#^sr1#(Y`EES(87yglI3`gq%)*_+W07u(9H}uOUz24rXfLc{d zcqI*8(w)>AbTXFrmENCpgs>yDxFMNvJja$mi2@p<*Ekcg0$1J;j7Cg%`!wK3&ceDa z{W^5exGRme!ZC=}at$ep(b|FHy~*=mG&Q;Eh#wA~(g7Jeo-2})OjUzkGGv4aazcTM zab)MGYUr)PyHGTD-apBj>XjfKk}}PXiuAX=NnMCX#KBu+;;FiaWTP}ydFHYhO*60% z7vNjMJh8(7=InX(d-}>21pq?RQKKo*Cq9Oe*cjiyrN;PdGN_a=)ct*L&unu_Fn*gJ z*f2nm%y__5WpMJLQZ_kfiDRCRSmgn^=g|$;9jQ`fZgwmzxS6bT@k?Y7E)TtUhu7+f zhpTd@Nwh|WnX8qG^Kig@_Eop5-abQzelv|mM^gE4Dw=cO5i%_3zaw1iGtuBeK{!)C;{ zd>$!QLFRD1>r(sGE^R#ZZf_QCfp{IAw=_nY{% zUa;}iY>cF+*wFKCF?KA5@8MVm`UkK3H!>oQOq@ke@k$<93o8XNw!cdevZydl(WS9> zWq@GtRlGxmm)+iIgBeSUcI(y|Jhm<^^j`BcnSqoNN;xhslPQrRSZ#qfuVq8N6sEGL z7GYAc{5xGiXAnQe56e!%F)O)%~E(Tk$`^zn@`*S=2MRLs=L;V!MMc5n>KFz zrlgLPYZE@-L67!BBw(0aI#IJ}3;}Omd?1;K&Z#?SBXQg5W@abVv#SUBlS8hHR#7xm zE+@||paAYi@9b39aWYyutjm6+SY*B)S*Wcaw*tG`&EZU;#3#W(EPEwI7JABJ&>)+~ zvj@_kufG%og5JGvXm+JxgZTrsD8XF?U82}dE#r>5ORqCrq1uH_IvC!%aMhJu*Q0M1 zyHd`sH;D5XMss^S{u?onCWnN%GfSV3;RM;TGEAx1HY-=JvzGPoJu_K$^j;P z%+We}3)i<&2Aa>S1J2F>=8`GzGy1#F#&u|m0lDG%0wV_q%N#+m zWC{A9VI%}b5XjjK9Y*_#?1SUIlkEI4 zMLZ(=hfskGaTw5piBH1`a@vIYOXFx+yb#_d`4FbO%CZ5CY!El276 zVPm+Mc6v7j$<=u)u~`lrEsI8yMVN$qt19{nyL6i80G}@lgl3TL@lLJ^xsn5=n}J54 z%3-Yfok*;kUqu_~GJcHbcNxsV40os52Sj=`N=Gd-n1dGIC5yFOfzrQIipECB<^B6k zOBk)-KoO$TOl9Est4IUC6=mC7RHa2Xg4x3YFzEf0Vba0!jKc1^ac@AfT(y`en%$n_ zXv?red2-N0!%DH%MncDGKwtg7@PrJGSWje$oC&>e$wn2Wf8(9=k39a)b0X#0)H5EJ z5=gh0iT#b#SmEHF(lNfkK1$F+ADL7g6#}ee8O>S}Gx}&$@;169h{ba!45OW|H*5Yp z=a4`4V5zfX;y`>Y9!2fK!dMn^i<{gIoC7kNtYZI{q-8#NFe5CmE=I^6jnpUm-x{*{ z1C}%AURkse`c+j$kvp(B2c&xZ_;+4--S8K5!T>|X<)%-I{8S(2q%rW`M9|4XrpgKU zgX~eVH!{qM*%<%qXT3fngB~7%?<2A>Qu0u+&HDuPTqx5lg7+E(x^LoTH7Tw+m%_#G z%2!N@n4-r$k(?86D>653i9O~3mOu=J5k&lPx*|&Yq4Dz+vm;QrgwXGamuLF%SdP9J zrP6;v%qsrl39HX1X#U=&q*G4A39(FW{lV zZqNO-*HT1G`cj`-E;zG5{grPr)0(!=K_$w!S+XO=+#`aL3!8C+yf$>V7LiJ|Xdpf| zD_oEKglAP$g?;%<=8^(laY$9jM7HFgRiFftiSO^C{L7;FDnd8l z<1q0f|E9-rV;Q!!r=NkD;{0HIB@E3m3fW07fK97{u}$2JxHwU>6W2i{AG7YkXeW4u~-B^DOd3OOYiJ12N;widH^lU-dtiv}&+-gm^E)2waZJOURxNDh^EZf}+ zW7Z=zgV8uM0uhKQ`Jpb{`$?7=xX?+e_}$Eu)p?(6U0vt#N5>;cp}l+Dhr@@6HKuH> zB9l6QX&#<^h`OeEH5*t`xlvV6#(TUiGw!}4;Z z0ua2ePQ`gYmWrWHjH>4n?raDi*61S<&f>*$1)t#NY43nnjRJAkirqPGaeJ8o@&}8O zF>OL6oA^abNxMOt%AlF2?jvV{1bIk;rI9e>_DAM0Y$3$Q=Y<}dLA6IEwZu{@&A$?h z+l~TKYva?z{=oLvIv1{WKHJ(vA2f|)LPy1vtQ>_lepUix#ByGf-HS_Wd}h?n?5g>T z%D=&y9(NMUpaB4;6k%3rC$C%b$V*x4@97zl|Iy;SD6mZyKi&po;{U*BvsF5f)hv5> zPP;K9i8Lt-bC7qGDwuZU{Q%OoHqNR-)~JA~KeH`(ogQWNq)oeDkHh5ZdbPSt+?$lM z&Y)zlQvFlP8XUvdj~ytGW~U_zLx|Ie9W}uS=>V!wDkOuOP88W92GTkfBZNxX(}U*5 z6C_`{763S{aYRO%c~mIAe%ZV(cXFEPu-(;Eo!&+rjSuU25y1ySxo3Xu*QnqhyU2*VVK|c|Nr+xL1HbRfnsr z9Eei0p^A~Q#E({YWEQr?c95=t5WQn0;vVepFfws6WrxCroT6j`NAUftS^rVJIT`RW8`;od1T$nY z_lIuvOwdbcIxKuxFBQEfH^E+f_}uoGQmh`_YEVbspUtD&KC2S3t%b60R&)tyso{tC zuRvJ6)t)C5Vy~VKN!+L6`xb2J-YW3-1Wo9n=jU#@&dYUne)r_S>B#~Vr`r}^FaM&c zmt+KyEYoB6lPaj*dQ}2!CLaE_DO+07tjQyBA%7&=E>MalA&0xo3VJR}UY9nHbT>+! z_9JrcvjDao-`X;Q8q%Zz@_H~G{ZxbYqDw#FStNu>xx-&3uaHG6Rf0(6L|w0{Y!-@V zLb5Xd#zXjVb5;W!u><+={ofmhJ=#3J1kw2`CpxpS4e+~Fx|?|N#-Czp^rMH_Oj~vx zCQ=bT1`xFLW4=PK*io+;w(zm{9C#~0{3v2<)*0eaG3WVIPDsubd}bs4ldGHx0|VEJ z7JC=8;1e+2^1!MILna2*$to{J*8NIYe>B(}mt>>Kz!~yjsX07-Th$EiT6}2Smj;T2FJR zW1@@0(z$!5F?S%39fQD^bKV`821ebR|Y=LCNa@IUIv};G2pD`F(2I^;EBa4IlRR@O>MTkoJPMUi@0-{WL zWUEdm3392>_LIvl5P&yAhFwy35akrG?TOO@CmOA-7nC*5q!>vZ`m9!w&r}M*&%Q3f_=jumljtkX7$~Yc8IS@Z`uI}S-;%js- z=dxX#MQ|?@SCV%_NqM*ZQ~VleTUeSvsVIiP?5qq5Mbh`X=r(^Lzi}*x7w;RPq{KCR z_st1({1{Y;Ei_@% literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/lorem_long_aes256.egg b/Compression.Tests/Egg/ReferenceVectors/lorem_long_aes256.egg new file mode 100644 index 0000000000000000000000000000000000000000..4188e50940bbcf56e8a44997593e1ca2d6312b58 GIT binary patch literal 4926 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 literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea128.egg b/Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea128.egg new file mode 100644 index 0000000000000000000000000000000000000000..2490ee93981d34a6ebde7157b9b5d14714269b9b GIT binary patch literal 15373 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 literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea256.egg b/Compression.Tests/Egg/ReferenceVectors/lorem_long_store_lea256.egg new file mode 100644 index 0000000000000000000000000000000000000000..3f0d179be2e42f5f8a5dc74f0156f52280a91f10 GIT binary patch literal 15381 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 literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/lorem_long_zipEnc.egg b/Compression.Tests/Egg/ReferenceVectors/lorem_long_zipEnc.egg new file mode 100644 index 0000000000000000000000000000000000000000..18a110985a59a398cda735b3f479e9c7a11e4dd0 GIT binary patch literal 4909 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 CoL)Kr literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/ours.egg b/Compression.Tests/Egg/ReferenceVectors/ours.egg new file mode 100644 index 0000000000000000000000000000000000000000..0c19c089e4038cfd4533b7c41ec8ea4ed83c9f7a GIT binary patch literal 562 zcmZ>DcXwo9WMqHFpk{gTv*61|d&5|BD!o~=xb zU{&Ejg)>yFSU{q0&+q1J2w*sRA+CVk{ll;FhU2r3I0<~$U)!>y(REkJ!zod_U+?K( zmp}Vc*#+h*7ylQMdl!U%X}kCHS5GD1^@rAT+P@d*drne8LjT;W7(kAKITGY7u%kE` zQgaJRDq#)+sbK=j?cfHffU03$2Xw zm~U2o@|CYOzl?qP*K?1<F__TyE5<99D~|> ymrQ4u%i0wFyLDH6z5U-5iLd`x{CEFr|LT9>|NdX~SN<>lCl3;8Z}`s$3N8S%cmIq4 literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/posix_small.egg b/Compression.Tests/Egg/ReferenceVectors/posix_small.egg new file mode 100644 index 0000000000000000000000000000000000000000..c17e2275569c133089436f83597ad54bd1f219b3 GIT binary patch literal 124 zcmZ>DcXwo9{H0^;$p8dOO^-MpPiW-=u?0Z{5UiO9R literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/small_kor.egg b/Compression.Tests/Egg/ReferenceVectors/small_kor.egg new file mode 100644 index 0000000000000000000000000000000000000000..041a39db766a0c74b531fa92f3c8060f3381cb23 GIT binary patch literal 110 zcmZ>DcXwo9v=A>*V*moBrbir)C$w^b*t{SD2-Zw&<>KIA*vfq1_JLh`B^4#yQ`>YH uI2jspZe4QmxyuOFB+Rpw38Dq0?b)$suR%t6q~_%0>nN1x7v-cVf&>5~TOZT_ literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/small_shift.egg b/Compression.Tests/Egg/ReferenceVectors/small_shift.egg new file mode 100644 index 0000000000000000000000000000000000000000..762dc376f1af40d680726855f7b555b511e616ef GIT binary patch literal 112 zcmZ>DcXwo9v=A>*V*moBrbir)C$w^b*t{SD2-Zw&<>KICSi;=DrfGB2BE6D|67H#O wIt-i)4LP?ix%k{=1ZxxK*~$db1k(8I*t6Fl!#q-Ra`JT)%JYkIQWQY~08@z|L;wH) literal 0 HcmV?d00001 diff --git a/Compression.Tests/Egg/ReferenceVectors/solid.egg b/Compression.Tests/Egg/ReferenceVectors/solid.egg new file mode 100644 index 0000000000000000000000000000000000000000..bb99ca46e3cc6aa455011ba724ea9e2c99d6247f GIT binary patch literal 493 zcmZ>DcXwo9TpXGb#sCBf3!bU~DW#@I9FHfoa)E?+nLs21!sXGwU{qfD4y^WLBByFC;y5^Cv-7c-v38$7G-+tm_ zPjJf{hFKF&#`4r0?o8{v{bS*YUpb*%MOSw;dCye+`sn*F^}Lzg$2Bke7Htn)dgg)N zwCtwhxZlpVTJn!C?YG({-_?_o`g#gS(41(lgNK~i?CDcXwo9EK;^EV*moBrbir)C$w^b*g00mxIy%qi9kLlLse=~ez9IjMG5!RHXR_p zL1Si!xXdj^upVKatxQZTARR%BKrQ!X{sEcf6qR9O=oqOM9BDmcjv9lBNC(3K1_llV z27?A)H-}ZCE16b=kII9>XPRx)Oopt>9SsK +/// The encryption field of an EGG file header: method 0 ZIP 2.0 ("standard"), 1/2 AES-128/256 and +/// 5/6 LEA-128/256, with the per-method header (salt + password check) and footer (MAC or CRC part). +/// +internal sealed record EggEncryption(byte Method, byte[] Header, byte[] Footer) { + public const byte Standard = 0, Aes128 = 1, Aes256 = 2, Lea128 = 5, Lea256 = 6; + + public static EggEncryption Parse(ReadOnlySpan field) { + if (field.IsEmpty) + throw new InvalidDataException("Empty EGG encryption field."); + var method = field[0]; + var (headerLength, footerLength) = method switch { + Standard => (12, 4), + Aes128 or Lea128 => (10, 10), + Aes256 or Lea256 => (18, 10), + _ => throw new NotSupportedException($"EGG encryption method {method} is unknown."), + }; + if (field.Length < 1 + headerLength + footerLength) + throw new InvalidDataException("Truncated EGG encryption field."); + return new(method, field.Slice(1, headerLength).ToArray(), field.Slice(1 + headerLength, footerLength).ToArray()); + } + + public string MethodName => this.Method switch { + Standard => "ZIP 2.0", + Aes128 => "AES-128", + Aes256 => "AES-256", + Lea128 => "LEA-128", + Lea256 => "LEA-256", + _ => $"method {this.Method}", + }; + + ///

Decrypts a member's packed bytes; throws on a wrong password or MAC. + public byte[] Decrypt(byte[] data, string password) => this.Method switch { + Standard => DecryptStandard(data, password), + Aes128 or Aes256 => DecryptWinZipStyle(data, password, this.Method == Aes256 ? 256 : 128, lea: false), + Lea128 or Lea256 => DecryptWinZipStyle(data, password, this.Method == Lea256 ? 256 : 128, lea: true), + _ => throw new NotSupportedException($"EGG encryption method {this.Method} is unknown."), + }; + + // ── ZIP 2.0 ─────────────────────────────────────────────────────────── + + private byte[] DecryptStandard(byte[] data, string password) { + var keys = new ZipKeys(); + foreach (var c in password) + keys.Update((byte)c); + byte last = 0; + foreach (var b in this.Header) { + last = (byte)(b ^ keys.Stream()); + keys.Update(last); + } + if (last != this.Footer[^1]) + throw new InvalidDataException("Wrong EGG password."); + var output = (byte[])data.Clone(); + for (var i = 0; i < output.Length; ++i) { + var p = (byte)(output[i] ^ keys.Stream()); + keys.Update(p); + output[i] = p; + } + return output; + } + + private sealed class ZipKeys { + private static readonly uint[] Table = [.. Enumerable.Range(0, 256).Select(i => { + var c = (uint)i; + for (var j = 0; j < 8; ++j) + c = (c & 1) != 0 ? (c >> 1) ^ 0xEDB88320u : c >> 1; + return c; + })]; + private uint _k0 = 305419896, _k1 = 591751049, _k2 = 878082192; + + public void Update(byte b) { + this._k0 = Table[(this._k0 ^ b) & 0xFF] ^ (this._k0 >> 8); + this._k1 = (this._k1 + (this._k0 & 0xFF)) * 134775813 + 1; + this._k2 = Table[(this._k2 ^ (this._k1 >> 24)) & 0xFF] ^ (this._k2 >> 8); + } + + public byte Stream() { + var t = (this._k2 | 2) & 0xFFFF; + return (byte)((t * (t ^ 1)) >> 8); + } + } + + // ── AES / LEA (WinZip-style key derivation, CTR, HMAC-SHA1) ─────────── + + private byte[] DecryptWinZipStyle(byte[] data, string password, int bits, bool lea) { + var saltLength = bits == 256 ? 16 : 8; + var keyLength = bits / 8; + var macLength = lea ? (bits == 256 ? 32 : 16) : keyLength; + var salt = this.Header.AsSpan(0, saltLength); + var storedCheck = this.Header.AsSpan(saltLength, 2); + var derived = Rfc2898DeriveBytes.Pbkdf2(Encoding.UTF8.GetBytes(password), salt, 1000, HashAlgorithmName.SHA1, keyLength + macLength + 2); + var key = derived.AsSpan(0, keyLength); + var macKey = derived.AsSpan(keyLength, macLength); + var check = derived.AsSpan(keyLength + macLength, 2); + + var valid = lea + ? check.SequenceEqual(storedCheck) + : (short)(check[0] + check[1] * bits) == (short)(storedCheck[0] + storedCheck[1] * bits); + if (!valid) + throw new InvalidDataException("Wrong EGG password."); + + var mac = HMACSHA1.HashData(macKey, data); + if (!mac.AsSpan(0, 10).SequenceEqual(this.Footer)) + throw new InvalidDataException("EGG member failed its authentication code (wrong password or corrupt data)."); + + return lea ? LeaCtr(data, key.ToArray()) : AesCtrLittleEndian(data, key.ToArray()); + } + + /// AES in CTR mode with WinZip's counter: a little-endian block number starting at 1. + private static byte[] AesCtrLittleEndian(byte[] data, byte[] key) { + using var aes = Aes.Create(); + aes.Key = key; + var output = new byte[data.Length]; + var counter = new byte[16]; + var stream = new byte[16]; + ulong block = 1; + for (var pos = 0; pos < data.Length; pos += 16) { + BinaryPrimitives.WriteUInt64LittleEndian(counter, block++); + aes.EncryptEcb(counter, stream, PaddingMode.None); + var n = Math.Min(16, data.Length - pos); + for (var i = 0; i < n; ++i) + output[pos + i] = (byte)(data[pos + i] ^ stream[i]); + } + return output; + } + + /// LEA in CTR mode: zero IV, big-endian counter increment. + private static byte[] LeaCtr(byte[] data, byte[] key) { + var cipher = new Lea(key); + var output = new byte[data.Length]; + var counter = new byte[16]; + var stream = new byte[16]; + for (var pos = 0; pos < data.Length; pos += 16) { + cipher.EncryptBlock(counter, stream); + for (var i = 15; i >= 0; --i) + if (++counter[i] != 0) + break; + var n = Math.Min(16, data.Length - pos); + for (var i = 0; i < n; ++i) + output[pos + i] = (byte)(data[pos + i] ^ stream[i]); + } + return output; + } +} + +/// The LEA block cipher (128-bit blocks; 128-, 192- or 256-bit keys). +internal sealed class Lea { + private static readonly uint[] Delta = [0xc3efe9db, 0x44626b02, 0x79e27c8a, 0x78df30ec, 0x715ea49e, 0xc785da0a, 0xe04ef22a, 0xe5c40957]; + private readonly uint[,] _rk; + private readonly int _rounds; + + private static uint Rol(uint v, int n) => BitOperations.RotateLeft(v, n); + private static uint Ror(uint v, int n) => BitOperations.RotateRight(v, n); + + public Lea(byte[] key) { + if (key.Length is not (16 or 24 or 32)) + throw new ArgumentException("LEA keys are 16, 24 or 32 bytes.", nameof(key)); + this._rounds = (key.Length >> 1) + 16; + this._rk = new uint[this._rounds, 6]; + var t = new uint[8]; + for (var i = 0; i < key.Length / 4; ++i) + t[i] = BinaryPrimitives.ReadUInt32LittleEndian(key.AsSpan(i * 4)); + switch (key.Length) { + case 16: + for (var i = 0; i < 24; ++i) { + var temp = Rol(Delta[i & 3], i); + this._rk[i, 0] = t[0] = Rol(t[0] + temp, 1); + this._rk[i, 1] = this._rk[i, 3] = this._rk[i, 5] = t[1] = Rol(t[1] + Rol(temp, 1), 3); + this._rk[i, 2] = t[2] = Rol(t[2] + Rol(temp, 2), 6); + this._rk[i, 4] = t[3] = Rol(t[3] + Rol(temp, 3), 11); + } + break; + case 24: + for (var i = 0; i < 28; ++i) { + var temp = Rol(Delta[i % 6], i); + this._rk[i, 0] = t[0] = Rol(t[0] + temp, 1); + this._rk[i, 1] = t[1] = Rol(t[1] + Rol(temp, 1), 3); + this._rk[i, 2] = t[2] = Rol(t[2] + Rol(temp, 2), 6); + this._rk[i, 3] = t[3] = Rol(t[3] + Rol(temp, 3), 11); + this._rk[i, 4] = t[4] = Rol(t[4] + Rol(temp, 4), 13); + this._rk[i, 5] = t[5] = Rol(t[5] + Rol(temp, 5), 17); + } + break; + default: + for (var i = 0; i < 32; ++i) { + var temp = Rol(Delta[i & 7], i & 0x1f); + this._rk[i, 0] = t[(6 * i + 0) & 7] = Rol(t[(6 * i + 0) & 7] + temp, 1); + this._rk[i, 1] = t[(6 * i + 1) & 7] = Rol(t[(6 * i + 1) & 7] + Rol(temp, 1), 3); + this._rk[i, 2] = t[(6 * i + 2) & 7] = Rol(t[(6 * i + 2) & 7] + Rol(temp, 2), 6); + this._rk[i, 3] = t[(6 * i + 3) & 7] = Rol(t[(6 * i + 3) & 7] + Rol(temp, 3), 11); + this._rk[i, 4] = t[(6 * i + 4) & 7] = Rol(t[(6 * i + 4) & 7] + Rol(temp, 4), 13); + this._rk[i, 5] = t[(6 * i + 5) & 7] = Rol(t[(6 * i + 5) & 7] + Rol(temp, 5), 17); + } + break; + } + } + + public void EncryptBlock(ReadOnlySpan input, Span output) { + var b0 = BinaryPrimitives.ReadUInt32LittleEndian(input); + var b1 = BinaryPrimitives.ReadUInt32LittleEndian(input[4..]); + var b2 = BinaryPrimitives.ReadUInt32LittleEndian(input[8..]); + var b3 = BinaryPrimitives.ReadUInt32LittleEndian(input[12..]); + for (var i = 0; i < this._rounds; i += 4) { + b3 = Ror((b2 ^ this._rk[i, 4]) + (b3 ^ this._rk[i, 5]), 3); + b2 = Ror((b1 ^ this._rk[i, 2]) + (b2 ^ this._rk[i, 3]), 5); + b1 = Rol((b0 ^ this._rk[i, 0]) + (b1 ^ this._rk[i, 1]), 9); + b0 = Ror((b3 ^ this._rk[i + 1, 4]) + (b0 ^ this._rk[i + 1, 5]), 3); + b3 = Ror((b2 ^ this._rk[i + 1, 2]) + (b3 ^ this._rk[i + 1, 3]), 5); + b2 = Rol((b1 ^ this._rk[i + 1, 0]) + (b2 ^ this._rk[i + 1, 1]), 9); + b1 = Ror((b0 ^ this._rk[i + 2, 4]) + (b1 ^ this._rk[i + 2, 5]), 3); + b0 = Ror((b3 ^ this._rk[i + 2, 2]) + (b0 ^ this._rk[i + 2, 3]), 5); + b3 = Rol((b2 ^ this._rk[i + 2, 0]) + (b3 ^ this._rk[i + 2, 1]), 9); + b2 = Ror((b1 ^ this._rk[i + 3, 4]) + (b2 ^ this._rk[i + 3, 5]), 3); + b1 = Ror((b0 ^ this._rk[i + 3, 2]) + (b1 ^ this._rk[i + 3, 3]), 5); + b0 = Rol((b3 ^ this._rk[i + 3, 0]) + (b0 ^ this._rk[i + 3, 1]), 9); + } + BinaryPrimitives.WriteUInt32LittleEndian(output, b0); + BinaryPrimitives.WriteUInt32LittleEndian(output[4..], b1); + BinaryPrimitives.WriteUInt32LittleEndian(output[8..], b2); + BinaryPrimitives.WriteUInt32LittleEndian(output[12..], b3); + } +} diff --git a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggEntry.cs b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggEntry.cs index 1dc1a4da8..7a64af6a0 100644 --- a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggEntry.cs +++ b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggEntry.cs @@ -54,6 +54,9 @@ public sealed class EggEntry { _ => $"Method{PrimaryAlgorithm}", }; + /// The entry's encryption field, when it has one. + internal EggEncryption? Encryption { get; set; } + /// The physical data blocks that make up the entry, in order. internal List Blocks { get; } = []; } diff --git a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggFormatDescriptor.cs b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggFormatDescriptor.cs index e766308e9..f63c4364c 100644 --- a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggFormatDescriptor.cs +++ b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggFormatDescriptor.cs @@ -44,7 +44,7 @@ public sealed class EggFormatDescriptor : public FormatCapabilities Capabilities => FormatCapabilities.CanList | FormatCapabilities.CanExtract | FormatCapabilities.CanCreate | FormatCapabilities.CanTest | FormatCapabilities.SupportsMultipleEntries | - FormatCapabilities.SupportsDirectories; + FormatCapabilities.SupportsDirectories | FormatCapabilities.SupportsPassword; /// /// Gets the default extension. /// @@ -79,7 +79,7 @@ public sealed class EggFormatDescriptor : /// /// Gets the description. /// - public string Description => "ESTsoft ALZip EGG archive (Store/Deflate read + write)"; + public string Description => "ESTsoft ALZip EGG archive (reads stored/deflate/bzip2/AZO/LZMA, ZIP 2.0/AES/LEA encryption, solid; writes stored/deflate)"; /// + /// More than one non-metadata payload is supplied. public static FirmwareImage ImageFrom(IReadOnlyList inputs, string sourceFormat) { ArgumentNullException.ThrowIfNull(inputs); @@ -53,7 +54,9 @@ public static FirmwareImage ImageFrom(IReadOnlyList inputs, st } // Any other single input is the payload, whatever it is called: a caller // converting a .bin into a .hex should not have to rename it first. - payload ??= input.ReadContent(); + if (payload is not null) + throw new InvalidDataException($"{sourceFormat} represents one logical firmware payload; multiple payload inputs are ambiguous."); + payload = input.ReadContent(); } List<(uint Address, byte[] Data)> segments;
/// Lists the entries in the supplied container. @@ -102,7 +102,7 @@ public void Extract(Stream stream, string outputDir, string? password, string[]? CreateSafeDirectory(outputDir, e.Name); continue; } - WriteFile(outputDir, e.Name, r.Extract(e)); + WriteFile(outputDir, e.Name, r.Extract(e, password)); } } @@ -118,7 +118,7 @@ public Stream OpenEntry(Stream archive, string entryName, string? password) { foreach (var e in r.Entries) { if (e.IsDirectory) continue; if (!string.Equals(e.Name, entryName, StringComparison.OrdinalIgnoreCase)) continue; - var bytes = r.Extract(e); + var bytes = r.Extract(e, password); return new Compression.Registry.Streaming.BoundedEntryStream( new MemoryStream(bytes, writable: false), bytes.Length, leaveOpen: false); } diff --git a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggReader.cs b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggReader.cs index 72dd259a3..300babb05 100644 --- a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggReader.cs +++ b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggReader.cs @@ -93,7 +93,14 @@ public EggReader(Stream stream, bool leaveOpen = false) { public bool IsSplit { get; private set; } /// True when a global (archive-level) encryption header is present. - public bool IsGloballyEncrypted { get; private set; } + public bool IsGloballyEncrypted => this.GlobalEncryption != null; + + /// True when the members are compressed as one solid stream. + public bool IsSolid { get; private set; } + + internal EggEncryption? GlobalEncryption { get; private set; } + + private byte[]? _solidData; private void _ReadArchive() { _stream.Position = 0; @@ -107,11 +114,11 @@ private void _ReadArchive() { _ = _reader.ReadUInt32(); // reserved // EGG-header extra fields (split / solid / global encryption) up to the end-marker. - _SkipExtraFields((field, _, _, _) => { + _SkipExtraFields((field, _, size, dataStart) => { switch (field) { case SplitMagic: this.IsSplit = true; break; - case SolidMagic: break; - case EncryptMagic: this.IsGloballyEncrypted = true; break; + case SolidMagic: this.IsSolid = true; break; + case EncryptMagic: this.GlobalEncryption = EggEncryption.Parse(_ReadField(size, dataStart)); break; } }); @@ -120,6 +127,10 @@ private void _ReadArchive() { var token = _reader.ReadUInt32(); if (token == EndMarker) break; // end of archive + if (token == CommentMagic) { + this._SkipOneField(); // archive comment record + continue; + } if (token != FileHeaderMagic) throw new InvalidDataException($"Unexpected token 0x{token:X8} where a file header was expected."); @@ -139,7 +150,10 @@ private void _ReadArchive() { case FilenameMagic: _ParseFilename(bitFlag, size, dataStart, entry); break; case WindowsInfoMagic: _ParseWindowsInfo(entry); break; case PosixInfoMagic: _ParsePosixInfo(entry); break; - case EncryptMagic: entry.IsEncrypted = true; break; + case EncryptMagic: + entry.IsEncrypted = true; + entry.Encryption = EggEncryption.Parse(_ReadField(size, dataStart)); + break; } }); @@ -157,6 +171,10 @@ private void _ReadArchive() { private void _ReadBlocks(EggEntry entry) { while (_stream.Position + 4 <= _stream.Length) { var token = _reader.ReadUInt32(); + if (token == CommentMagic) { + this._SkipOneField(); // a comment record between the file header and its blocks + continue; + } if (token != BlockHeaderMagic) { _stream.Position -= 4; // belongs to the next file header or the archive end-marker break; @@ -185,57 +203,128 @@ private void _ReadBlocks(EggEntry entry) { } /// - /// Extracts and decompresses an entry into a byte array. Store and Deflate blocks - /// are decoded natively; any other algorithm, or an encrypted / split-volume entry, - /// raises rather than returning wrong bytes. - /// Every decoded block is checked against its declared size and CRC-32. + /// Extracts and decompresses an entry: stored, deflate, bzip2, AZO and LZMA blocks, ZIP 2.0 / AES / + /// LEA encryption, solid archives. Split (multi-volume) members raise + /// rather than returning wrong bytes. Every decoded block is + /// checked against its declared size and CRC-32. /// - public byte[] Extract(EggEntry entry) { + public byte[] Extract(EggEntry entry, string? password = null) { ArgumentNullException.ThrowIfNull(entry); - if (entry.IsDirectory) + if (entry.IsDirectory || entry.UncompressedSize == 0 && entry.Blocks.Count == 0 && !this.IsSolid) return []; if (this.IsSplit) throw new NotSupportedException("EGG split (multi-volume) archives are not supported for extraction."); - if (entry.IsEncrypted) - throw new NotSupportedException($"EGG entry '{entry.Name}' is encrypted; extraction is not supported."); + if (this.IsSolid) { + this._solidData ??= this._DecodeSolid(password); + var offset = 0L; + foreach (var e in this._entries) { + if (ReferenceEquals(e, entry)) + return this._solidData.AsSpan((int)offset, (int)e.UncompressedSize).ToArray(); + if (!e.IsDirectory) + offset += e.UncompressedSize; + } + throw new ArgumentException("Entry does not belong to this archive.", nameof(entry)); + } + + var encryption = entry.Encryption ?? this.GlobalEncryption; using var output = new MemoryStream(); - var crc = new Crc32(); - foreach (var block in entry.Blocks) { - if (block.CompressedSize > int.MaxValue) - throw new InvalidDataException($"EGG entry '{entry.Name}' has a block too large for in-memory extraction."); - _stream.Position = block.DataOffset; - var compressed = new byte[(int)block.CompressedSize]; - _ReadExactly(compressed); - - var plain = block.Algorithm switch { - 0 => compressed, // Store - 1 => DeflateDecompressor.Decompress(compressed), // Deflate (raw) - _ => throw new NotSupportedException( - $"EGG entry '{entry.Name}' uses unsupported compression '{new EggEntry { PrimaryAlgorithm = block.Algorithm }.MethodName}'."), - }; + foreach (var block in entry.Blocks) + output.Write(this._DecodeBlock(entry.Name, block, encryption, password)); - if (plain.LongLength != block.UncompressedSize) - throw new InvalidDataException( - $"EGG entry '{entry.Name}' block expands to {plain.LongLength} bytes; header declares {block.UncompressedSize}."); - crc.Reset(); - crc.Update(plain); - if (crc.Value != block.Crc32) - throw new InvalidDataException( - $"EGG entry '{entry.Name}' failed CRC-32 validation (stored 0x{block.Crc32:X8}, computed 0x{crc.Value:X8})."); + if (output.Length != entry.UncompressedSize) + throw new InvalidDataException( + $"EGG entry '{entry.Name}' expands to {output.Length} bytes; file header declares {entry.UncompressedSize}."); + return output.ToArray(); + } + + /// Decodes the one compressed stream of a solid archive (the blocks after the last file header). + private byte[] _DecodeSolid(string? password) { + var total = this._entries.Where(e => !e.IsDirectory).Sum(e => e.UncompressedSize); + var holder = this._entries.LastOrDefault(e => e.Blocks.Count > 0) + ?? throw new InvalidDataException("EGG solid archive has no data block."); + var encryption = this._entries.Select(e => e.Encryption).FirstOrDefault(e => e != null) ?? this.GlobalEncryption; + using var output = new MemoryStream(); + foreach (var block in holder.Blocks) + output.Write(this._DecodeBlock("solid stream", block, encryption, password)); + if (output.Length != total) + throw new InvalidDataException($"EGG solid stream expands to {output.Length} bytes; the file headers declare {total}."); + return output.ToArray(); + } - output.Write(plain, 0, plain.Length); + private byte[] _DecodeBlock(string name, EggBlock block, EggEncryption? encryption, string? password) { + if (block.CompressedSize > int.MaxValue || block.UncompressedSize > int.MaxValue) + throw new NotSupportedException($"EGG entry '{name}' has a block too large for in-memory extraction."); + _stream.Position = block.DataOffset; + var packed = new byte[(int)block.CompressedSize]; + _ReadExactly(packed); + + if (encryption != null) { + if (string.IsNullOrEmpty(password)) + throw new InvalidOperationException($"EGG entry '{name}' is encrypted ({encryption.MethodName}); a password is required."); + packed = encryption.Decrypt(packed, password); } - if (output.Length != entry.UncompressedSize) + byte[] plain; + try { + plain = block.Algorithm switch { + 0 => packed, + 1 => DeflateDecompressor.Decompress(packed), + 2 => _Bzip2(packed), + 3 => Compression.Core.Dictionary.Azo.AzoDecoder.Decompress(packed, block.UncompressedSize), + 4 => _Lzma(packed, block.UncompressedSize), + _ => throw new NotSupportedException($"EGG entry '{name}' uses unknown compression method {block.Algorithm}."), + }; + } catch (Exception e) when (e is not (NotSupportedException or InvalidDataException or InvalidOperationException)) { + throw new InvalidDataException($"EGG entry '{name}': corrupt compressed data.", e); + } + + if (plain.LongLength != block.UncompressedSize) throw new InvalidDataException( - $"EGG entry '{entry.Name}' expands to {output.Length} bytes; file header declares {entry.UncompressedSize}."); + $"EGG entry '{name}' block expands to {plain.LongLength} bytes; header declares {block.UncompressedSize}."); + if (Crc32.Compute(plain) != block.Crc32) + throw new InvalidDataException( + $"EGG entry '{name}' failed CRC-32 validation{(encryption != null ? " (wrong password?)" : "")}."); + return plain; + } + + private static byte[] _Bzip2(byte[] packed) { + using var input = new MemoryStream(packed, writable: false); + using var bz = new FileFormat.Bzip2.Bzip2Stream(input, Compression.Core.Streams.CompressionStreamMode.Decompress); + using var output = new MemoryStream(); + bz.CopyTo(output); return output.ToArray(); } + /// EGG's LZMA block: 4 bytes (version and property size), the 5 LZMA properties, then raw LZMA. + private static byte[] _Lzma(byte[] packed, long size) { + if (packed.Length < 9) + throw new InvalidDataException("Truncated EGG LZMA block."); + using var input = new MemoryStream(packed, 9, packed.Length - 9, writable: false); + return new Compression.Core.Dictionary.Lzma.LzmaDecoder(input, packed[4..9], size).Decode(); + } + + private byte[] _ReadField(long size, long dataStart) { + if (size > 1 << 20) + throw new InvalidDataException("EGG extra field too large."); + _stream.Position = dataStart; + var data = new byte[size]; + _ReadExactly(data); + return data; + } + // ── Extra-field iteration ──────────────────────────────────────────────── + /// Skips one record whose magic was just read: flag byte, 2- or 4-byte size, data. + private void _SkipOneField() { + var bitFlag = _reader.ReadByte(); + long size = (bitFlag & 0x01) != 0 ? _reader.ReadUInt32() : _reader.ReadUInt16(); + if (_stream.Position > _stream.Length - size) + throw new InvalidDataException("EGG record extends beyond the input stream."); + _stream.Position += size; + } + private void _SkipExtraFields(Action? onField) { while (true) { if (_stream.Position + 4 > _stream.Length) @@ -252,12 +341,15 @@ private void _SkipExtraFields(Action? onField) { throw new InvalidDataException("EGG archive ends inside an extra-field size."); var size = sizeWidth == 4 ? _reader.ReadUInt32() : _reader.ReadUInt16(); var dataStart = _stream.Position; - if (dataStart > _stream.Length - size) + // A filename field's size counts the name only; the code page (flag 0x08) and the parent-path + // id (flag 0x10) precede it uncounted, as ALZip writes them (and EggDotNet reads them). + var uncounted = field == FilenameMagic ? ((bitFlag & 0x08) != 0 ? 2 : 0) + ((bitFlag & 0x10) != 0 ? 4 : 0) : 0; + if (dataStart > _stream.Length - size - uncounted) throw new InvalidDataException($"EGG extra field 0x{field:X8} extends beyond the input stream."); onField?.Invoke(field, bitFlag, size, dataStart); - _stream.Position = dataStart + size; // resync to the field end regardless of handling + _stream.Position = dataStart + size + uncounted; // resync to the field end regardless of handling } } @@ -281,7 +373,7 @@ private void _ParseFilename(byte bitFlag, long size, long dataStart, EggEntry en if (parentLen == 4) _ = _reader.ReadUInt32(); // parent-path id (relative-path linkage; not resolved here) - var nameLen = size - localeLen - parentLen; + var nameLen = size; if (nameLen < 0 || nameLen > int.MaxValue) throw new InvalidDataException("EGG filename field has an invalid length."); var nameBytes = _reader.ReadBytes((int)nameLen); diff --git a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggWriter.cs b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggWriter.cs index eaab0d30e..3104858be 100644 --- a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggWriter.cs +++ b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggWriter.cs @@ -103,7 +103,9 @@ public void Finish() { WriteWindowsInfo(writer, entry.LastModifiedUtc, entry.IsDirectory); writer.Write(EggReader.EndMarker); // end of file sub-headers - if (!entry.IsDirectory) + // ALZip writes no block for a directory or an empty file, and readers (EggDotNet among them) + // only look for blocks when the file header announces a non-zero size. + if (!entry.IsDirectory && entry.Data.Length > 0) WriteBlock(writer, entry.Data, entry.Method, entry.Level); } diff --git a/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/THIRD-PARTY-NOTICE.EggDotNet.txt b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/THIRD-PARTY-NOTICE.EggDotNet.txt new file mode 100644 index 000000000..5970171eb --- /dev/null +++ b/Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/THIRD-PARTY-NOTICE.EggDotNet.txt @@ -0,0 +1,29 @@ +The AZO decoder (Compression.Core/Dictionary/Azo/AzoDecoder.cs) and the EGG encryption code +(Hawkynt.FileFormats.Archives/FileFormats/FileFormat.Egg/EggCrypto.cs: ZIP 2.0, AES and LEA variants and +the LEA block cipher) are converted to C# from EggDotNet; the EGG test archives under +Compression.Tests/Egg/ReferenceVectors come from its test corpus: + + Upstream: https://github.com/akolman/EggDotNet (master, fetched 2026-10-23) + Licence: MIT + +MIT License + +Copyright (c) 2026 Andrew Kolman (akolman) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/catalogue/reference-formats.csv b/docs/catalogue/reference-formats.csv index ab231c065..dbbdfe8cf 100644 --- a/docs/catalogue/reference-formats.csv +++ b/docs/catalogue/reference-formats.csv @@ -42,7 +42,7 @@ zoo,zoo,archive,,,R,,R,x-fmt/269,Y,4,https://en.wikipedia.org/wiki/Zoo_(file_for LBR (CP/M library),lbr;lqr;lzr,archive,,,R,,R,,Y,3,https://en.wikipedia.org/wiki/LBR_(file_format),Lbr,Y,Y,Y,OK,, LBR (Commodore library),lbr,archive,,,,,,,Y,1,,,,,,MISSING,, ALZip,alz,archive,,,R,,R,,RW,3,https://en.wikipedia.org/wiki/ALZip,AlZip,Y,Y,Y,PARTIAL,,store and deflate only (AlZipReader.cs) -EGG (ALZip),egg,archive,,,R,,,,,1,https://en.wikipedia.org/wiki/ALZip,Egg,Y,Y,,PARTIAL,,"store and deflate only; bzip2/LZMA/AZO, encryption and split archives unsupported (EggReader.cs)" +EGG (ALZip),egg,archive,,,R,,,,,1,https://en.wikipedia.org/wiki/ALZip,Egg,Y,Y,,PARTIAL,,"reads store/deflate/bzip2/AZO/LZMA, solid, ZIP 2.0/AES/LEA encryption (EggDotNet corpus); writer store/deflate only (EggDotNet reads it back); split (multi-volume) archives unsupported (EggReader.cs)" StuffIt (classic + 5),sit;sea,archive,,,R,,R,fmt/1459;fmt/1460;fmt/639,RW,4,https://en.wikipedia.org/wiki/StuffIt,StuffIt,Y,Y,Y,PARTIAL,,store and RLE only; LZW/Huffman/LZAH/Arsenic/DES methods throw (StuffItReader.cs) StuffIt X,sitx,archive,,,R,,R,fmt/399,RW,4,https://en.wikipedia.org/wiki/StuffIt,StuffItX,Y,Y,,PARTIAL,,stored and deflate only; Brimstone/Cyanide/Darkhorse/Iron throw (StuffItXReader.cs) DiskDoubler,dd,archive,,,R,,,,Y,2,https://en.wikipedia.org/wiki/DiskDoubler,DiskDoubler,Y,Y,,PARTIAL,,stored only; compressed members are returned as raw compressed bytes without an error (DiskDoublerReader.cs) From fc0f68c47c35059cbcc0c3bb8a9863f3cdf92aec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 14:34:25 +0000 Subject: [PATCH 2/3] * refresh the application screenshot --- screenshots/main-window.png | Bin 66235 -> 65657 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshots/main-window.png b/screenshots/main-window.png index a9ceb7f7ce233693ac240e941d4af64380209648..e3795c0d04a8041389e0aaa3edc8cc5c89e36820 100644 GIT binary patch literal 65657 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

J-t(C?D*vNbSd$Mpldw%6G^3`$t6)P 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 O*JNyHeySLKDeAvN*8HCU literal 66235 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 From 67c60ff225f5aed5a07414ee0d318d803a6c9716 Mon Sep 17 00:00:00 2001 From: Hawkynt Date: Wed, 28 Oct 2026 06:49:48 +0100 Subject: [PATCH 3/3] # reject ambiguous firmware payloads before writing an image Adding a second named payload to Intel HEX could silently discard a file because the shared image builder kept only the first payload in filesystem enumeration order. Reject multiple non-metadata payloads, including an empty first payload, before any output is written. Tests verify creation refusal and byte-preserving add refusal. Verified all three regressions fail before the fix and pass after it, 93 focused tests, 34280 required tests with 1582 skips and no failures, and three package documentation checks. --- .../FirmwareHex/FirmwareHexPayloadTests.cs | 37 +++++++++++++++++++ .../FirmwareHexWriter.cs | 5 ++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Compression.Tests/FirmwareHex/FirmwareHexPayloadTests.cs diff --git a/Compression.Tests/FirmwareHex/FirmwareHexPayloadTests.cs b/Compression.Tests/FirmwareHex/FirmwareHexPayloadTests.cs new file mode 100644 index 000000000..bbbc898af --- /dev/null +++ b/Compression.Tests/FirmwareHex/FirmwareHexPayloadTests.cs @@ -0,0 +1,37 @@ +using Compression.Registry; +using FileFormat.FirmwareHex; + +namespace Compression.Tests.FirmwareHex; + +[TestFixture] +public sealed class FirmwareHexPayloadTests { + [TestCase(false)] + [TestCase(true)] + public void Create_RejectsMultiplePayloadsWithoutWritingOutput(bool emptyFirst) { + var descriptor = new IntelHexFormatDescriptor(); + using var output = new MemoryStream(); + var inputs = new[] { + ArchiveInputInfo.InMemory("first.bin", emptyFirst ? [] : [1, 2, 3]), + ArchiveInputInfo.InMemory("second.bin", [9, 8, 7]), + }; + + Assert.Throws(() => + ((IArchiveCreatable)descriptor).Create(output, inputs, new FormatCreateOptions())); + Assert.That(output.Length, Is.Zero); + } + + [Test] + public void Add_RejectsAnotherPayloadWithoutChangingTheArchive() { + var descriptor = new IntelHexFormatDescriptor(); + using var archive = new MemoryStream(); + ((IArchiveCreatable)descriptor).Create(archive, + [ArchiveInputInfo.InMemory("firmware.bin", [1, 2, 3])], new FormatCreateOptions()); + var original = archive.ToArray(); + archive.Position = 0; + + Assert.Throws(() => ((IArchiveModifiable)descriptor).Add(archive, + [ArchiveInputInfo.InMemory("ADD.BIN", [9, 8, 7])])); + Assert.That(archive.ToArray(), Is.EqualTo(original)); + } + +} diff --git a/Hawkynt.FileFormats.FileSystems/FileFormats/FileFormat.FirmwareHex/FirmwareHexWriter.cs b/Hawkynt.FileFormats.FileSystems/FileFormats/FileFormat.FirmwareHex/FirmwareHexWriter.cs index 6c7d4b452..1c9e17266 100644 --- a/Hawkynt.FileFormats.FileSystems/FileFormats/FileFormat.FirmwareHex/FirmwareHexWriter.cs +++ b/Hawkynt.FileFormats.FileSystems/FileFormats/FileFormat.FirmwareHex/FirmwareHexWriter.cs @@ -33,6 +33,7 @@ public static class FirmwareHexWriter { /// one the reader rendered. An input list with no payload describes an image /// with no data, which both formats can write. ///