@@ -55,11 +55,9 @@ public override long Position
5555 }
5656
5757 /// <summary>
58- /// Constructs a new offset stream on the given base stream with the given offset and length .
58+ /// Constructs a new protected file stream from the given base stream.
5959 /// </summary>
6060 /// <param name="package">The base stream</param>
61- /// <param name="offset">Offset into the base stream where this stream starts</param>
62- /// <param name="length">Number of bytes in this stream</param>
6361 public ProtectedFileStream ( Stream package )
6462 {
6563 this . pkg = package ;
@@ -68,7 +66,7 @@ public ProtectedFileStream(Stream package)
6866 package . Seek ( - size , SeekOrigin . End ) ;
6967 var metadata = new byte [ size ] ;
7068 package . Read ( metadata , 0 , size ) ;
71- initialKey = init_prot_data ( metadata ) ;
69+ initialKey = CalculateKeyByte ( metadata ) ;
7270
7371 data_offset = 0 ;
7472 Length = package . Length - size ;
@@ -131,7 +129,7 @@ public override long Seek(long offset, SeekOrigin origin)
131129 return _position ;
132130 }
133131
134- private static uint rol ( uint value , int count )
132+ private static uint RotL ( uint value , int count )
135133 {
136134 const int bits = 32 ;
137135 count %= bits ;
@@ -147,7 +145,7 @@ private static byte BYTE(int num, uint value)
147145 return ( byte ) ( value >> ( num * 8 ) ) ;
148146 }
149147
150- private static uint mangle ( byte [ ] bytes , int offset , int count )
148+ private static uint Mangle ( byte [ ] bytes , int offset , int count )
151149 {
152150 var mangled = 0U ;
153151 for ( var i = 0 ; i < count ; i ++ )
@@ -157,22 +155,22 @@ private static uint mangle(byte[] bytes, int offset, int count)
157155 return mangled ;
158156 }
159157
160- private static uint collapse ( uint value )
158+ private static uint Fold ( uint value )
161159 {
162160 return ( uint ) ( BYTE ( 0 , value ) + BYTE ( 1 , value ) + BYTE ( 2 , value ) + BYTE ( 3 , value ) ) ;
163161 }
164162
165- public static uint do_hash ( byte [ ] key , int offset , long count )
163+ private static uint Hash ( byte [ ] key , int offset , long count )
166164 {
167165 uint tmp ;
168166
169167 byte counter = 0 ;
170168 var seed = 0xE3AFEC21 ;
171169 for ( var i = 0L ; i < count ; i ++ )
172170 {
173- tmp = ( key [ offset + i ] ^ collapse ( seed ) ) ;
171+ tmp = ( key [ offset + i ] ^ Fold ( seed ) ) ;
174172 key [ offset + i ] = ( byte ) tmp ;
175- seed = rol ( ( tmp | ( ( tmp | ( ( tmp | ( tmp << 8 ) ) << 8 ) ) << 8 ) ) + rol ( seed , ( int ) ( tmp & 0x1F ) ) , 1 ) ;
173+ seed = RotL ( ( tmp | ( ( tmp | ( ( tmp | ( tmp << 8 ) ) << 8 ) ) << 8 ) ) + RotL ( seed , ( int ) ( tmp & 0x1F ) ) , 1 ) ;
176174 if ( counter > 16 )
177175 {
178176 seed = ( 2 * seed ) ;
@@ -183,22 +181,22 @@ public static uint do_hash(byte[] key, int offset, long count)
183181 return seed ;
184182 }
185183
186- public static byte init_prot_data ( byte [ ] metadata )
184+ private static byte CalculateKeyByte ( byte [ ] metadata )
187185 {
188186 var word_0xE = BitConverter . ToUInt16 ( metadata , 0xE ) ;
189187
190- byte mangled = ( byte ) collapse (
191- mangle ( metadata , 4 , 9 ) +
192- mangle ( metadata , 0 , 4 ) +
193- mangle ( metadata , 13 , 1 ) +
194- mangle ( metadata , 16 , 4 ) +
195- ( word_0xE == 0 ? 0 : mangle ( metadata , 24 , word_0xE ) ) ) ;
196-
197- do_hash ( metadata , 24 , word_0xE ) ;
198- do_hash ( metadata , 13 , 1 ) ;
199- do_hash ( metadata , 16 , 4 ) ;
200- do_hash ( metadata , 0 , 4 ) ;
201- do_hash ( metadata , 4 , 9 ) ;
188+ byte mangled = ( byte ) Fold (
189+ Mangle ( metadata , 4 , 9 ) +
190+ Mangle ( metadata , 0 , 4 ) +
191+ Mangle ( metadata , 13 , 1 ) +
192+ Mangle ( metadata , 16 , 4 ) +
193+ Mangle ( metadata , 24 , word_0xE ) ) ;
194+
195+ Hash ( metadata , 24 , word_0xE ) ;
196+ Hash ( metadata , 13 , 1 ) ;
197+ Hash ( metadata , 16 , 4 ) ;
198+ Hash ( metadata , 0 , 4 ) ;
199+ Hash ( metadata , 4 , 9 ) ;
202200
203201 return ( byte ) ( metadata [ 5 ] ^ mangled ) ;
204202 }
0 commit comments