| 381 | } |
| 382 | |
| 383 | int CaptureEncodingHeader(CASC_ENCODING_HEADER & EnHeader, LPBYTE pbFileData, size_t cbFileData) |
| 384 | { |
| 385 | PFILE_ENCODING_HEADER pFileHeader = (PFILE_ENCODING_HEADER)pbFileData; |
| 386 | |
| 387 | // Check the signature ('EN') and version |
| 388 | if(cbFileData < sizeof(FILE_ENCODING_HEADER) || pFileHeader->Magic != FILE_MAGIC_ENCODING || pFileHeader->Version != 0x01) |
| 389 | return ERROR_BAD_FORMAT; |
| 390 | |
| 391 | // Note that we don't support CKey and EKey sizes other than 0x10 in the ENCODING file |
| 392 | if(pFileHeader->CKeyLength != MD5_HASH_SIZE || pFileHeader->EKeyLength != MD5_HASH_SIZE) |
| 393 | return ERROR_BAD_FORMAT; |
| 394 | |
| 395 | EnHeader.Magic = pFileHeader->Magic; |
| 396 | EnHeader.Version = pFileHeader->Version; |
| 397 | EnHeader.CKeyLength = pFileHeader->CKeyLength; |
| 398 | EnHeader.EKeyLength = pFileHeader->EKeyLength; |
| 399 | EnHeader.CKeyPageCount = ConvertBytesToInteger_4(pFileHeader->CKeyPageCount); |
| 400 | EnHeader.CKeyPageSize = ConvertBytesToInteger_2(pFileHeader->CKeyPageSize) * 1024; |
| 401 | EnHeader.EKeyPageCount = ConvertBytesToInteger_4(pFileHeader->EKeyPageCount); |
| 402 | EnHeader.EKeyPageSize = ConvertBytesToInteger_2(pFileHeader->EKeyPageSize) * 1024; |
| 403 | EnHeader.ESpecBlockSize = ConvertBytesToInteger_4(pFileHeader->ESpecBlockSize); |
| 404 | return ERROR_SUCCESS; |
| 405 | } |
| 406 | |
| 407 | static DWORD LoadEncodingCKeyPage(TCascStorage * hs, CASC_ENCODING_HEADER & EnHeader, LPBYTE pbPageBegin, LPBYTE pbEndOfPage) |
| 408 | { |
no test coverage detected