Ejemplo n.º 1
0
        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];
            }
        }
Ejemplo n.º 2
0
 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));
 }