From 4938226071fb330ee535626a0398d965ecb0f988 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 17 Oct 2015 20:35:37 -0400 Subject: [PATCH] crc/whirlpool for archives --- src/main/java/net/runelite/cache/fs/Archive.java | 2 +- src/main/java/net/runelite/cache/fs/DataFile.java | 8 +++++--- .../java/net/runelite/cache/fs/DataFileWriteResult.java | 2 ++ src/main/java/net/runelite/cache/fs/Index.java | 3 +++ 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/runelite/cache/fs/Archive.java b/src/main/java/net/runelite/cache/fs/Archive.java index 1790638ef5..0a6843b462 100644 --- a/src/main/java/net/runelite/cache/fs/Archive.java +++ b/src/main/java/net/runelite/cache/fs/Archive.java @@ -55,7 +55,7 @@ public class Archive { return false; } - if (!Arrays.equals(this.whirlpool, other.whirlpool)) + if (this.whirlpool != null && other.whirlpool != null && !Arrays.equals(this.whirlpool, other.whirlpool)) { return false; } diff --git a/src/main/java/net/runelite/cache/fs/DataFile.java b/src/main/java/net/runelite/cache/fs/DataFile.java index 8521aae30e..dfdd37466d 100644 --- a/src/main/java/net/runelite/cache/fs/DataFile.java +++ b/src/main/java/net/runelite/cache/fs/DataFile.java @@ -180,8 +180,8 @@ public class DataFile implements Closeable int sector; int startSector; - data = ByteBuffer.wrap(this.compress(data.array(), compression, revision)); - int dataLen = data.remaining(); + byte[] compressedData = this.compress(data.array(), compression, revision); + data = ByteBuffer.wrap(compressedData); //XTEA encrypt here? @@ -270,7 +270,9 @@ public class DataFile implements Closeable DataFileWriteResult res = new DataFileWriteResult(); res.sector = startSector; - res.compressedLength = dataLen; + res.compressedLength = compressedData.length; + res.crc = CRC32HGenerator.getHash(compressedData, compressedData.length - 2); + res.whirlpool = Whirlpool.getHash(compressedData, 0, compressedData.length - 2); return res; } diff --git a/src/main/java/net/runelite/cache/fs/DataFileWriteResult.java b/src/main/java/net/runelite/cache/fs/DataFileWriteResult.java index 6fa07179ef..8b946289f8 100644 --- a/src/main/java/net/runelite/cache/fs/DataFileWriteResult.java +++ b/src/main/java/net/runelite/cache/fs/DataFileWriteResult.java @@ -3,4 +3,6 @@ package net.runelite.cache.fs; public class DataFileWriteResult { public int sector, compressedLength; + public int crc; // crc of compressed data + public byte[] whirlpool; } diff --git a/src/main/java/net/runelite/cache/fs/Index.java b/src/main/java/net/runelite/cache/fs/Index.java index 615c77c335..c5b30599f8 100644 --- a/src/main/java/net/runelite/cache/fs/Index.java +++ b/src/main/java/net/runelite/cache/fs/Index.java @@ -351,6 +351,9 @@ public class Index implements Closeable // XXX old data is just left there in the file? DataFileWriteResult res = data.write(this.id, a.getArchiveId(), ByteBuffer.wrap(fileData), 0, this.revision); this.index.write(new IndexEntry(this.index, a.getArchiveId(), res.sector, res.compressedLength)); + + a.setCrc(res.crc); + a.setWhirlpool(res.whirlpool); } }