private void RebuildBinaryFile(IArchiveBinaryFile sourceFile, IArchiveDirectory destinationDirectory, RageArchiveEncryption7 archiveEncryption) { foreach (var handler in BinaryFileHandlers) { if (handler.CanRebuild(sourceFile)) { handler.Rebuild(sourceFile, destinationDirectory, archiveEncryption); return; } } var ms = new MemoryStream(); sourceFile.Export(ms); ms.Position = 0; var buf = new byte[ms.Length]; ms.Position = 0; ms.Read(buf, 0, buf.Length); var newF = destinationDirectory.CreateBinaryFile(); newF.Name = sourceFile.Name; newF.Import(new MemoryStream(buf)); newF.IsEncrypted = sourceFile.IsEncrypted; if (sourceFile.IsCompressed) { newF.IsCompressed = sourceFile.IsCompressed; newF.UncompressedSize = sourceFile.UncompressedSize; } }
public static byte[] GetBinaryFileData(IArchiveBinaryFile file, RageArchiveEncryption7 encryption) { using (var ms = new MemoryStream()) { file.Export(ms); byte[] data = ms.ToArray(); if (file.IsEncrypted) { if (encryption == RageArchiveEncryption7.AES) { data = GTA5Crypto.DecryptAES(data); } else // if(encryption == RageArchiveEncryption7.NG) { data = GTA5Crypto.DecryptNG(data, file.Name, (uint)file.UncompressedSize); } } if (file.IsCompressed) { using (var dfls = new DeflateStream(new MemoryStream(data), CompressionMode.Decompress)) { using (var outstr = new MemoryStream()) { dfls.CopyTo(outstr); data = outstr.ToArray(); } } } return(data); } }