MCPcopy Create free account
hub / github.com/Hiro420/NikkeTools / DecryptData

Method DecryptData

StaticData/NikkeStaticData/Program.cs:107–160  ·  view source on GitHub ↗
(byte[] encryptedData, byte[] key, bool ctr = false)

Source from the content-addressed store, hash-verified

105 }
106
107 private static byte[] DecryptData(byte[] encryptedData, byte[] key, bool ctr = false)
108 {
109 byte[] aesKey = key.Take(16).ToArray();
110 byte[] iv = key.Skip(key.Length - 16).ToArray();
111
112 if (!ctr)
113 {
114 using var aes = Aes.Create();
115 aes.KeySize = 128;
116 aes.BlockSize = 128;
117 aes.Key = aesKey;
118 aes.IV = iv;
119 aes.Mode = CipherMode.CBC;
120 aes.Padding = PaddingMode.None;
121
122 using var ms = new MemoryStream();
123 using var cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write);
124 cs.Write(encryptedData, 0, encryptedData.Length);
125 cs.FlushFinalBlock();
126 return ms.ToArray();
127 }
128 else
129 {
130 using var aes = Aes.Create();
131 aes.KeySize = 128;
132 aes.BlockSize = 128;
133 aes.Mode = CipherMode.ECB;
134 aes.Padding = PaddingMode.None;
135 aes.Key = aesKey;
136
137 using var encryptor = aes.CreateEncryptor();
138 using var ms = new MemoryStream();
139
140 byte[] counter = (byte[])iv.Clone();
141 byte[] buffer = new byte[16];
142 byte[] keystreamBlock = new byte[16];
143
144 for (int i = 0; i < encryptedData.Length; i += 16)
145 {
146 encryptor.TransformBlock(counter, 0, 16, keystreamBlock, 0);
147
148 int blockSize = Math.Min(16, encryptedData.Length - i);
149 for (int j = 0; j < blockSize; j++)
150 {
151 buffer[j] = (byte)(encryptedData[i + j] ^ keystreamBlock[j]);
152 }
153
154 ms.Write(buffer, 0, blockSize);
155 IncrementCounter(counter);
156 }
157
158 return ms.ToArray();
159 }
160 }
161
162 private static void IncrementCounter(byte[] counter)
163 {

Callers

nothing calls this directly

Calls 1

WriteMethod · 0.45

Tested by

no test coverage detected