Exemplo n.º 1
0
// Decryption.
bool CheckHeader(rFile& pkg_f, PKGHeader* m_header)
{
	if (m_header->pkg_magic != 0x7F504B47) {
		LOG_ERROR(LOADER, "PKG: Not a package file!");
		return false;
	}

	switch ((u32)m_header->pkg_type)
	{
	case PKG_RELEASE_TYPE_DEBUG:   break;
	case PKG_RELEASE_TYPE_RELEASE: break;
	default:
		LOG_ERROR(LOADER, "PKG: Unknown PKG type!");
		return false;
	}

	switch ((u32)m_header->pkg_platform)
	{
	case PKG_PLATFORM_TYPE_PS3: break;
	case PKG_PLATFORM_TYPE_PSP: break;
	default:
		LOG_ERROR(LOADER, "PKG: Unknown PKG type!");
		return false;
	}

	if (m_header->header_size != PKG_HEADER_SIZE) {
		LOG_ERROR(LOADER, "PKG: Wrong header size!");
		return false;
	}

	if (m_header->pkg_size != pkg_f.Length()) {
		LOG_ERROR(LOADER, "PKG: File size mismatch.");
		return false;
	}

	if (m_header->data_size + m_header->data_offset + 0x60 != pkg_f.Length()) {
		LOG_ERROR(LOADER, "PKG: Data size mismatch.");
		return false;
	}

	return true;
}