@@ -37,7 +37,7 @@ public class ProtectedFileStream : Stream
3737
3838 private Stream pkg ;
3939 private long data_offset ;
40- private byte [ ] metadata ;
40+ private byte initialKey ;
4141 private byte key ;
4242
4343 private long _position ;
@@ -66,9 +66,9 @@ public ProtectedFileStream(Stream package)
6666 package . Seek ( - 36 , SeekOrigin . End ) ;
6767 var size = package . ReadInt32LE ( ) ;
6868 package . Seek ( - size , SeekOrigin . End ) ;
69- metadata = new byte [ size ] ;
69+ var metadata = new byte [ size ] ;
7070 package . Read ( metadata , 0 , size ) ;
71- init_prot_data ( metadata ) ;
71+ initialKey = init_prot_data ( metadata ) ;
7272
7373 data_offset = 0 ;
7474 Length = package . Length - size ;
@@ -89,7 +89,7 @@ public override int Read(byte[] buffer, int offset, int count)
8989 {
9090 byte tmp = buffer [ offset + i ] ;
9191 buffer [ offset + i ] ^= key ;
92- key = ( byte ) ( ( metadata [ 5 ] ^ tmp ) - _position ) ;
92+ key = ( byte ) ( ( initialKey ^ tmp ) - _position ) ;
9393 _position ++ ;
9494 }
9595 return bytes_read ;
@@ -121,11 +121,11 @@ public override long Seek(long offset, SeekOrigin origin)
121121 if ( _position > 0 )
122122 {
123123 pkg . Position = data_offset + _position - 1 ;
124- key = ( byte ) ( ( metadata [ 5 ] ^ pkg . ReadByte ( ) ) - _position + 1 ) ;
124+ key = ( byte ) ( ( initialKey ^ pkg . ReadByte ( ) ) - _position + 1 ) ;
125125 }
126126 else if ( _position == 0 )
127127 {
128- key = metadata [ 5 ] ;
128+ key = initialKey ;
129129 }
130130
131131 return _position ;
@@ -183,35 +183,24 @@ public static uint do_hash(byte[] key, int offset, long count)
183183 return seed ;
184184 }
185185
186- public static void init_prot_data ( byte [ ] metadata )
186+ public static byte init_prot_data ( byte [ ] metadata )
187187 {
188188 var word_0xE = BitConverter . ToUInt16 ( metadata , 0xE ) ;
189- uint size = ( uint ) metadata . Length ;
190-
191- var mangled_24 = 0U ;
192- if ( word_0xE != 0 )
193- {
194- mangled_24 = mangle ( metadata , 24 , word_0xE ) ;
195- }
196189
197190 byte mangled = ( byte ) collapse (
198191 mangle ( metadata , 4 , 9 ) +
199192 mangle ( metadata , 0 , 4 ) +
200193 mangle ( metadata , 13 , 1 ) +
201- mangle ( metadata , 16 , 4 ) +
202- mangled_24 ) ;
194+ mangle ( metadata , 16 , 4 ) +
195+ ( word_0xE == 0 ? 0 : mangle ( metadata , 24 , word_0xE ) ) ) ;
203196
204197 do_hash ( metadata , 24 , word_0xE ) ;
205198 do_hash ( metadata , 13 , 1 ) ;
206199 do_hash ( metadata , 16 , 4 ) ;
207200 do_hash ( metadata , 0 , 4 ) ;
208201 do_hash ( metadata , 4 , 9 ) ;
209202
210- metadata [ 20 ] = BYTE ( 0 , size ) ;
211- metadata [ 21 ] = BYTE ( 1 , size ) ;
212- metadata [ 22 ] = BYTE ( 2 , size ) ;
213- metadata [ 23 ] = BYTE ( 3 , size ) ;
214- metadata [ 5 ] ^= mangled ;
203+ return ( byte ) ( metadata [ 5 ] ^ mangled ) ;
215204 }
216205
217206 #region Not Supported
0 commit comments