public static Bhd5BucketEntry Read(BinaryReader reader) { Bhd5BucketEntry result = new Bhd5BucketEntry(); result.FileNameHash = reader.ReadUInt32(); result.PaddedFileSize = reader.ReadUInt32(); result.FileOffset = reader.ReadInt64(); long saltedHashOffset = reader.ReadInt64(); long aesKeyOffset = reader.ReadInt64(); result.FileSize = reader.ReadInt64(); if (saltedHashOffset != 0) { long currentPosition = reader.GetPosition(); reader.Seek(saltedHashOffset, SeekOrigin.Begin); result.ShaHash = Bhd5SaltedShaHash.Read(reader); reader.Seek(currentPosition, SeekOrigin.Begin); } if (aesKeyOffset != 0) { long currentPosition = reader.GetPosition(); reader.Seek(aesKeyOffset, SeekOrigin.Begin); result.AesKey = Bhd5AesKey.Read(reader); reader.Seek(currentPosition, SeekOrigin.Begin); } return(result); }
public static Bhd5Bucket Read(BinaryReader reader, GameVersion version, int bhdVersion) { Bhd5Bucket result = new Bhd5Bucket(); int bucketEntryCount = reader.ReadInt32(); if (bhdVersion == 255) { reader.ReadInt32(); } int bucketOffset = reader.ReadInt32(); if (bhdVersion == 255) { reader.ReadInt32(); } long currentPosition = reader.GetPosition(); reader.Seek(bucketOffset, SeekOrigin.Begin); for (int i = 0; i < bucketEntryCount; i++) { result._entries.Add(Bhd5BucketEntry.Read(reader, version, bhdVersion)); } reader.Seek(currentPosition, SeekOrigin.Begin); return(result); }
public static Bhd5BucketEntry Read(BinaryReader reader, GameVersion version, int bhdVersion) { Bhd5BucketEntry result = new Bhd5BucketEntry(); result.FileNameHash = reader.ReadUInt32(); result.PaddedFileSize = reader.ReadUInt32(); result.FileOffset = reader.ReadInt64(); long saltedHashOffset = 0; long aesKeyOffset = 0; if (bhdVersion == 511) { saltedHashOffset = reader.ReadInt64(); aesKeyOffset = reader.ReadInt64(); switch (version) { case GameVersion.DarkSouls3: result.FileSize = reader.ReadInt64(); break; default: result.FileSize = result.PaddedFileSize; break; } } else { result.FileSize = result.PaddedFileSize; } if (saltedHashOffset != 0) { long currentPosition = reader.GetPosition(); reader.Seek(saltedHashOffset, SeekOrigin.Begin); result.ShaHash = Bhd5SaltedShaHash.Read(reader); reader.Seek(currentPosition, SeekOrigin.Begin); } if (aesKeyOffset != 0) { long currentPosition = reader.GetPosition(); reader.Seek(aesKeyOffset, SeekOrigin.Begin); result.AesKey = Bhd5AesKey.Read(reader); reader.Seek(currentPosition, SeekOrigin.Begin); } return(result); }