#!/usr/bin/env python2 # -*- coding: utf-8 -*- # # Copyright 2011 Dominic Spill # Copyright 2010 TheSeven # # This file was forked form Project Ubertooth. # from struct import pack, unpack crc_table = [] # From freemyipod.org for i in range(256): t = i for j in range(8): if t & 1: t = (t >> 1) ^ 0xedb88320 else: t >>= 1 crc_table.append(t) def crc32(data): crc = 0xffffffff for byte in data: crc = (crc >> 8) ^ crc_table[(crc ^ ord(byte)) & 0xff] return crc def check_suffix(firmware): """Check the dfu suffix""" print('Checking firmware signature') data = firmware[:-4] length = ord(firmware[-5]) suffix = firmware[-length:] # Will always have these fields dwCRC = unpack('