protected LibIndexReader(ArcView file, IMalieDecryptor decryptor, byte[] header) { m_view = file.View; m_max_offset = file.MaxOffset; m_dec = decryptor; m_header = header; }
protected LibIndexReader(ArcView file, Camellia encryption, byte[] header) { m_view = file.View; m_max_offset = file.MaxOffset; m_enc = encryption; m_header = header; }
public DscDecoder(ArcView.Frame input) : base(new ArcViewStream(input, input.Offset + 0x20, input.Reserved - 0x20)) { m_magic = (uint)input.ReadUInt16(input.Offset) << 16; m_key = input.ReadUInt32(input.Offset + 0x10); m_dst_size = input.ReadUInt32(input.Offset + 0x14); m_dec_count = input.ReadUInt32(input.Offset + 0x18); m_output = new byte[m_dst_size]; }
static byte[] ReadBlock(ArcView.Frame view, INekoFormat enc, long offset, out int length) { uint hash = view.ReadUInt32(offset); length = view.ReadInt32(offset + 4); int aligned_size = (length + 7) & ~7; byte[] buffer = new byte[aligned_size]; length = view.Read(offset + 8, buffer, 0, (uint)length); if (0 != hash) { enc.Decrypt(hash, buffer, 0, aligned_size); } return(buffer); }
static byte[] ReadBlock(ArcView.Frame view, INekoEncryption enc, long offset, out int length) { uint hash = view.ReadUInt32(offset); length = view.ReadInt32(offset + 4); // parity check // if (CalcParity (((NekoEncryption32bit)enc).Parity, (uint)length) != hash) // throw new InvalidFormatException(); int aligned_size = (length + 7) & ~7; byte[] buffer = new byte[aligned_size]; length = view.Read(offset + 8, buffer, 0, (uint)length); if (0 != hash) { enc.Decrypt(hash, buffer, 0, aligned_size); } return(buffer); }
public override Stream OpenEntry(ArcFile arc, Entry entry) { var entry_offset = entry.Offset; var input = new ArcView.Frame(arc.File, entry_offset, entry.Size); try { if (entry.Size > 0x220 && input.AsciiEqual(entry_offset, "DSC FORMAT 1.00\0")) { using (var decoder = new DscDecoder(input)) { decoder.Unpack(); return(new BinMemoryStream(decoder.Output, entry.Name)); } } return(new ArcViewStream(input, entry_offset, entry.Size)); } catch (Exception X) { System.Diagnostics.Trace.WriteLine(X.Message, "BgiOpener"); return(arc.File.CreateStream(entry.Offset, entry.Size)); } }
private static int ReadEncrypted(ArcView.Frame view, IMalieDecryptor dec, long offset, byte[] buffer, int index, int length) { int offset_pad = (int)offset & 0xF; int aligned_len = (offset_pad + length + 0xF) & ~0xF; byte[] aligned_buf; int block = 0; if (aligned_len == length) { aligned_buf = buffer; block = index; } else { aligned_buf = new byte[aligned_len]; } int read = view.Read(offset - offset_pad, aligned_buf, block, (uint)aligned_len); if (read < offset_pad) { return(0); } for (int block_count = aligned_len / 0x10; block_count > 0; --block_count) { dec.DecryptBlock(offset, aligned_buf, block); block += 0x10; offset += 0x10; } if (aligned_buf != buffer) { Buffer.BlockCopy(aligned_buf, offset_pad, buffer, index, length); } return(Math.Min(length, read - offset_pad)); }
public EncryptedStream(ArcView mmap, Camellia encryption) { m_view = mmap.CreateFrame(); m_enc = encryption; m_max_offset = mmap.MaxOffset; }
public EncryptedViewStream(ArcView mmap, byte[] key) { m_view = mmap.CreateFrame(); m_key = key; m_max_offset = mmap.MaxOffset; }
public Reader(ArcView file) { m_view = file.View; }
public EncryptedStream(ArcView mmap, IMalieDecryptor decryptor) { m_view = mmap.CreateFrame(); m_dec = decryptor; m_max_offset = mmap.MaxOffset; }
public CsafStream(CsafArchive arc) { m_length = arc.File.MaxOffset; m_view = arc.File.CreateFrame(); m_encryption = arc.Encryption; }
public ViewStreamBase(ArcView mmap) { m_view = mmap.CreateFrame(); m_max_offset = mmap.MaxOffset; }