public EncryptedStream(Stream output, NpaEntry entry, EncryptionScheme scheme, int arc_key) { m_read_mode = false; m_encrypted_length = GetEncryptedLength(entry, scheme.TitleId); int key = NpaOpener.GetKeyFromEntry(entry, scheme, arc_key); m_stream = output; m_encrypted = new Lazy <byte[]> (() => new byte[m_encrypted_length]); m_base_pos = m_stream.Position; byte[] decrypt_table = NpaOpener.GenerateKeyTable(scheme); byte[] encrypt_table = new byte[256]; for (int i = 0; i < 256; ++i) { encrypt_table[decrypt_table[i]] = (byte)i; } if (NpaTitleId.LAMENTO == scheme.TitleId) { Encrypt = (i, x) => encrypt_table[(x + key) & 0xff]; } else { Encrypt = (i, x) => encrypt_table[(x + key + i) & 0xff]; } }
public NpaArchive(ArcView arc, ArchiveFormat impl, ICollection <Entry> dir, EncryptionScheme scheme, int key) : base(arc, impl, dir) { Scheme = scheme; Key = key; m_key_table = new Lazy <byte[]> (() => NpaOpener.GenerateKeyTable(scheme)); }