(arcStrings.ArcEncryptedNotice);
+ return options.Password;
+ }
+
+ public override ResourceOptions GetDefaultOptions ()
+ {
+ return new NsaOptions { Password = Settings.Default.NSAPassword };
+ }
+
+ public override ResourceOptions GetOptions (object widget)
+ {
+ var w = widget as GUI.WidgetNSA;
+ if (null != w)
+ Settings.Default.NSAPassword = w.Password.Text;
+ return GetDefaultOptions();
+ }
+
+ public override object GetAccessWidget ()
+ {
+ return new GUI.WidgetNSA (KnownKeys);
+ }
+ }
+
+ internal class Ns2Stream : ViewStreamBase
+ {
+ byte[] m_key;
+
+ static readonly Cryptography.MD5 MD5 = new Cryptography.MD5();
+
+ const int BlockSize = 32;
+
+ public Ns2Stream (ArcView mmap, byte[] key) : base (mmap)
+ {
+ m_key = key;
+ }
+
+ byte[] m_seed = new byte[64];
+
+ protected override void DecryptBlock ()
+ {
+ int block_count = m_current_block_length / BlockSize;
+ var temp = new byte[32];
+ var hash = new byte[16];
+ for (int src = 0; src < m_current_block_length; src += BlockSize)
+ {
+ int src2 = src + 16;
+ int key1 = 0; // within m_key
+ int key2 = 48;
+
+ Buffer.BlockCopy (m_current_block, src2, m_seed, 0, 16);
+ Buffer.BlockCopy (m_key, key1, m_seed, 16, 48);
+
+ MD5.Initialize();
+ MD5.Update (m_seed, 0, m_seed.Length);
+ Buffer.BlockCopy (MD5.State, 0, hash, 0, 16);
+
+ for (int j = 0; j < 16; ++j)
+ {
+ temp[j] = m_seed[j] = (byte)(hash[j] ^ m_current_block[src + j]);
+ }
+
+ Buffer.BlockCopy (m_key, key2, m_seed, 16, 48);
+
+ MD5.Initialize();
+ MD5.Update (m_seed, 0, m_seed.Length);
+ Buffer.BlockCopy (MD5.State, 0, hash, 0, 16);
+
+ for (int j = 0; j < 16; ++j)
+ {
+ temp[16 + j] = m_seed[j] = (byte)(hash[j] ^ m_current_block[src2 + j]);
+ }
+
+ Buffer.BlockCopy (m_key, key1, m_seed, 16, 48);
+
+ MD5.Initialize();
+ MD5.Update (m_seed, 0, m_seed.Length);
+ Buffer.BlockCopy (MD5.State, 0, hash, 0, 16);
+
+ Buffer.BlockCopy (temp, 16, m_current_block, src, 16);
+ for (int j = 0; j < 16; ++j)
+ {
+ m_current_block[src + 16 + j] = (byte)(hash[j] ^ temp[j]);
+ }
+ }
+ }
+ }
+}
diff --git a/supported.html b/supported.html
index 2356eaac..3d2913cb 100644
--- a/supported.html
+++ b/supported.html
@@ -119,6 +119,7 @@ Arpeggio ~Kimi Iro no Melody~
Chikan Kizoku
Futagoza no Paradox
Happy Princess
+Idol ☆ Revolution
Narimono
Reconquista
White ~blanche comme la lune~
@@ -163,6 +164,7 @@ Ren'ai Jugyou ~Oshiego no Yuuwaku~
*.nsa *.sar | - | Yes | NScripter |
Binary Pot
+Chou Gedou Yuusha
Tsukihime
Umineko
|
@@ -305,15 +307,17 @@ Nanase Ren
Imouto ~Mitsutsubo Complete Edition~
| * | gra mas dif | No |
-| *.ald | - | No | Alice Soft |
+ |
| *.ald | - | No | Alice Soft |
Daiteikoku
Pastel Chime 3 Bind Seeker
Shaman's Sanctuary -Miko no Seiiki-
Tsuma Shibori
+Tsumamigui 3
|
| *.afa | AFAH | No |
| *.alk | ALK0 | No |
| *.qnt | QNT | No |
+| *.dcf | dcf | No |
*.pd *.pb | - | No | Discovery | Tsuma Tsuma |
| *.ifl | IFLS | No | Silky's |
Flutter of Birds
@@ -592,6 +596,7 @@ Thirua Panic
|
| *.acd | ACD 1.00 | No |
*.pk *.gpk *.tpk *.wpk
| - | No | U-Me Soft |
Fetish Omote no Kioku/Ura no Kioku series
+Kyonyuu Maid Nakadashi Tengoku!
|
| *.grx | GRX\x1a SGX\x1a | No |
| *.fpk | MFWY | No | Caligula |
@@ -987,6 +992,9 @@ Nukiani!! Sweet Home
Denpa no Dorei
Soushinjutsu Plus
|
+| *.ns2 | - | No | NScripter |
+Rakuin Hime Runed Princess
+ |
Non-encrypted only