Advertisement
Guest User

DuckTales: Remastered

a guest
Oct 31st, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. "
  2. Security:
  3. -> Custom Checksum
  4.   -> Offset: 0
  5.   -> Calculation Start: 16
  6.   -> Calculation Length: 0x400
  7. "
  8.  
  9. private ulong CalculateChecksum(byte[] data, int offset, int size) {
  10.     uint  r1, r2, r3, r4, r5, r6, r7, r8;
  11.  
  12.     r4 = (uint) size + 0xDEADC3C1;
  13.     r6 = r4 + 0x162E;
  14.     r5 = r4;
  15.                
  16.     if (size > 12) {
  17.         for (int i = size / 12; i > 0; --i) {
  18.             r7 =  (uint) (data[offset++] + (data[offset++] << 8) + (data[offset++] << 16) + (data[offset++] << 24));
  19.             r4 += (uint) (data[offset++] + (data[offset++] << 8) + (data[offset++] << 16) + (data[offset++] << 24));
  20.             r6 += (uint) (data[offset++] + (data[offset++] << 8) + (data[offset++] << 16) + (data[offset++] << 24));  
  21.                  
  22.             r5 = (r5 + r7 - r6) ^ ((r6 << 4) | (r6 >> 28));
  23.             r2 = r4 - r5;                      
  24.             r4 += r6;
  25.             r6 = r2 ^ ((r5 << 6) | (r5 >> 26));
  26.             r5 += r4;        
  27.             r3 = r4 - r6;                  
  28.             r4 = r6 + r5;
  29.             r6 = r3 ^ ((r6 << 8) | (r6 >> 24));                                  
  30.             r3 = r4 + r6;
  31.             r6 = (r5 - r6) ^ ((r6 << 16) | (r6 >> 16));                                  
  32.             r5 = r3 + r6;
  33.             r6 = (r4 - r6) ^ ((r6 >> 13) | (r6 << 19));      
  34.             r4 = r5 + r6;
  35.             r6 = (r3 - r6) ^ ((r6 <<  4) | (r6 >> 28));      
  36.         }
  37.  
  38.         for (int i = 0; i < 4; ++i)
  39.             r5 += (uint) data[offset++] << (i * 8);
  40.  
  41.         uint x0, x1;
  42.         r3 = (r6 ^ r4) - ((r4 << 14) | (r4 >> 18));    
  43.         r1 = (r5 ^ r3) - ((r3 << 11) | (r3 >> 21));        
  44.         r4 = (r4 ^ r1) - ((r1 >>  7) | (r1 << 25));
  45.         r6 = (r3 ^ r4) - ((r4 >> 16) | (r4 << 16));
  46.         r8 = (r1 ^ r6) - ((r6 <<  4) | (r6 >> 28));
  47.         r5 = (r4 ^ r8) - ((r8 << 14) | (r8 >> 18));
  48.         x1 = (r6 ^ r5) - ((r5 >>  8) | (r5 << 24));
  49.         x0 = r5;
  50.                
  51.         return ((ulong) x1 << 32) | x0;
  52.     }
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement