Gamebuster icon

Untitled

Gamebuster | PRO | 01/21/22 03:47:03 AM UTC (Edited) | 0 ⭐ | 1443 👁️ | Never ⏰ | []
Java |

2.83 KB

|

None

|

0 👍

/

0 👎

package com.gamebuster19901.excite.crc;
 
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
 
import org.apache.commons.io.IOUtils;
 
public class CRCTester {
    private final byte[] data;
    
    public CRCTester(InputStream inputStream) throws IOException {
        this(IOUtils.toByteArray(inputStream));
    }
    
    public CRCTester(byte[] data) {
        this.data = data;
    }
    
    public int test(final int seed) {
        
        ByteBuffer param1 = ByteBuffer.wrap(data);
        int length = data.length;
        
        byte pos1;
        byte pos2;
        byte pos3;
        byte pos4;
        byte pos5;
        byte pos6;
        
        byte bVar7;
        boolean bVar8;
        int leftoverBytes;
        int bytesEvaluated;
        @Unsigned int uVar11;
        @Unsigned int cyclesRemaining;
        
        uVar11 = seed;
        
        int dataPointer = 0;
        
        if(3 < length) {
            pos1 = param1.get(0);
            length = length - 4;
            pos2 = param1.get(1);
            bVar7 = pos1;
            pos3 = param1.get(2);
            
            param1.getInt();
            dataPointer = dataPointer + 4;
            
            uVar11 = ~(bVar7 << 0x18 | pos1 << 0x10 | pos2 << 8 | pos3);
        }
    
        bytesEvaluated = 0;
        if(0 < length) {
            if (8 < length) {
                bVar8 = false;
                if (-1 < length && length < 0x7fffffff) {
                    bVar8 = true;
                }
                cyclesRemaining = length - 1 >>> 3;
                if(bVar8 
                        && 0 < length - 8) { //this is almost certainty a for loop. Also cyclesRemaining = (maxLength - 1) / 8
                    do {
                        bytesEvaluated = bytesEvaluated + 8;
                        uVar11 = (uVar11 << 8 | param1.getInt(0)) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        pos1 = param1.get(dataPointer + 1);
                        pos2 = param1.get(dataPointer + 2);
                        pos3 = param1.get(dataPointer + 3);
                        uVar11 = (uVar11 << 8 | param1.getInt(1)) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        pos4 = param1.get(dataPointer + 4);
                        pos5 = param1.get(dataPointer + 5);
                        pos6 = param1.get(dataPointer + 6);
                        
                        param1.getLong();
                        dataPointer = dataPointer + 8;
                        
                        uVar11 = (uVar11 << 8 | pos1) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        uVar11 = (uVar11 << 8 | pos2) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        uVar11 = (uVar11 << 8 | pos3) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        uVar11 = (uVar11 << 8 | pos4) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        uVar11 = (uVar11 << 8 | pos5) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        uVar11 = (uVar11 << 8 | pos6) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                        cyclesRemaining = cyclesRemaining - 1;
                    }
                    while (cyclesRemaining != 0);
                }
            }
            leftoverBytes = length - bytesEvaluated;
            if(bytesEvaluated < length) {
                do {
                    bVar7 = param1.get(dataPointer);
                    dataPointer = dataPointer++;
                    
                    uVar11 = (uVar11 << 8 | bVar7) ^ (seed + (uVar11 >>> 0x16 & 0x3fc));
                    leftoverBytes = leftoverBytes - 1;
                }
                while (leftoverBytes != 0);
            }
        }
        return ~uVar11;
    }
    
    
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎