| 1944 | } |
| 1945 | |
| 1946 | static void DecryptFileChunk( |
| 1947 | DWORD * ChunkData, |
| 1948 | LPBYTE pbKey, |
| 1949 | ULONGLONG ByteOffset, |
| 1950 | DWORD dwLength) |
| 1951 | { |
| 1952 | ULONGLONG ChunkOffset; |
| 1953 | DWORD KeyShuffled[0x10]; |
| 1954 | DWORD KeyMirror[0x10]; |
| 1955 | DWORD RoundCount = 0x14; |
| 1956 | |
| 1957 | // Prepare the key |
| 1958 | ChunkOffset = ByteOffset / ENCRYPTED_CHUNK_SIZE; |
| 1959 | memcpy(KeyMirror, pbKey, ENCRYPTED_CHUNK_SIZE); |
| 1960 | BSWAP_ARRAY32_UNSIGNED(KeyMirror, ENCRYPTED_CHUNK_SIZE); |
| 1961 | KeyMirror[0x05] = (DWORD)(ChunkOffset >> 32); |
| 1962 | KeyMirror[0x08] = (DWORD)(ChunkOffset); |
| 1963 | |
| 1964 | while(dwLength >= ENCRYPTED_CHUNK_SIZE) |
| 1965 | { |
| 1966 | // Shuffle the key - part 1 |
| 1967 | KeyShuffled[0x0E] = KeyMirror[0x00]; |
| 1968 | KeyShuffled[0x0C] = KeyMirror[0x01]; |
| 1969 | KeyShuffled[0x05] = KeyMirror[0x02]; |
| 1970 | KeyShuffled[0x0F] = KeyMirror[0x03]; |
| 1971 | KeyShuffled[0x0A] = KeyMirror[0x04]; |
| 1972 | KeyShuffled[0x07] = KeyMirror[0x05]; |
| 1973 | KeyShuffled[0x0B] = KeyMirror[0x06]; |
| 1974 | KeyShuffled[0x09] = KeyMirror[0x07]; |
| 1975 | KeyShuffled[0x03] = KeyMirror[0x08]; |
| 1976 | KeyShuffled[0x06] = KeyMirror[0x09]; |
| 1977 | KeyShuffled[0x08] = KeyMirror[0x0A]; |
| 1978 | KeyShuffled[0x0D] = KeyMirror[0x0B]; |
| 1979 | KeyShuffled[0x02] = KeyMirror[0x0C]; |
| 1980 | KeyShuffled[0x04] = KeyMirror[0x0D]; |
| 1981 | KeyShuffled[0x01] = KeyMirror[0x0E]; |
| 1982 | KeyShuffled[0x00] = KeyMirror[0x0F]; |
| 1983 | |
| 1984 | // Shuffle the key - part 2 |
| 1985 | for(DWORD i = 0; i < RoundCount; i += 2) |
| 1986 | { |
| 1987 | KeyShuffled[0x0A] = KeyShuffled[0x0A] ^ Rol32((KeyShuffled[0x0E] + KeyShuffled[0x02]), 0x07); |
| 1988 | KeyShuffled[0x03] = KeyShuffled[0x03] ^ Rol32((KeyShuffled[0x0A] + KeyShuffled[0x0E]), 0x09); |
| 1989 | KeyShuffled[0x02] = KeyShuffled[0x02] ^ Rol32((KeyShuffled[0x03] + KeyShuffled[0x0A]), 0x0D); |
| 1990 | KeyShuffled[0x0E] = KeyShuffled[0x0E] ^ Rol32((KeyShuffled[0x02] + KeyShuffled[0x03]), 0x12); |
| 1991 | |
| 1992 | KeyShuffled[0x07] = KeyShuffled[0x07] ^ Rol32((KeyShuffled[0x0C] + KeyShuffled[0x04]), 0x07); |
| 1993 | KeyShuffled[0x06] = KeyShuffled[0x06] ^ Rol32((KeyShuffled[0x07] + KeyShuffled[0x0C]), 0x09); |
| 1994 | KeyShuffled[0x04] = KeyShuffled[0x04] ^ Rol32((KeyShuffled[0x06] + KeyShuffled[0x07]), 0x0D); |
| 1995 | KeyShuffled[0x0C] = KeyShuffled[0x0C] ^ Rol32((KeyShuffled[0x04] + KeyShuffled[0x06]), 0x12); |
| 1996 | |
| 1997 | KeyShuffled[0x0B] = KeyShuffled[0x0B] ^ Rol32((KeyShuffled[0x05] + KeyShuffled[0x01]), 0x07); |
| 1998 | KeyShuffled[0x08] = KeyShuffled[0x08] ^ Rol32((KeyShuffled[0x0B] + KeyShuffled[0x05]), 0x09); |
| 1999 | KeyShuffled[0x01] = KeyShuffled[0x01] ^ Rol32((KeyShuffled[0x08] + KeyShuffled[0x0B]), 0x0D); |
| 2000 | KeyShuffled[0x05] = KeyShuffled[0x05] ^ Rol32((KeyShuffled[0x01] + KeyShuffled[0x08]), 0x12); |
| 2001 | |
| 2002 | KeyShuffled[0x09] = KeyShuffled[0x09] ^ Rol32((KeyShuffled[0x0F] + KeyShuffled[0x00]), 0x07); |
| 2003 | KeyShuffled[0x0D] = KeyShuffled[0x0D] ^ Rol32((KeyShuffled[0x09] + KeyShuffled[0x0F]), 0x09); |
no test coverage detected