MCPcopy Create free account
hub / github.com/Scobalula/Greyhound / DecryptFileChunk

Function DecryptFileChunk

src/External/CascLib/src/common/FileStream.cpp:1946–2057  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1944}
1945
1946static 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);

Callers 2

EncrStream_DetectFileKeyFunction · 0.85
EncrStream_BlockReadFunction · 0.85

Calls 1

Rol32Function · 0.85

Tested by

no test coverage detected