Exemplo n.º 1
0
 def loadFirmwareFile(self):        
     # self.__fileGetHeader()
     self._loadFirmwareHeader()
     
     # self.__fileGetImage()
     self.fwImage = self._read(self.imageLength)
     
     if len(self.fwImage) != self.imageLength:
         raise Exception("Didn't read whole image.")
     
     imageSha1 = sha1(struct.pack("B"*self.imageLength, *self.fwImage)).digest()
     if imageSha1 != self.imageSHA1:
         if DEBUG: print "Calculated SHA-1 for firmware file:", hexWithoutQuotes(struct.unpack("B"*len(imageSha1), imageSha1))
         if DEBUG: print "Provided SHA-1 from firmware file:", hexWithoutQuotes(struct.unpack("B"*len(self.imageSHA1), self.imageSHA1))
         raise Exception("SHA-1s don't match.")
Exemplo n.º 2
0
 def _loadFirmwareHeader(self):
     headerBytes = self._read(128)
     
     if DEBUG: print "Header: ", hexWithoutQuotes(headerBytes)
     
     if len(headerBytes) != 128:
         raise Exception("Didn't read all of the header")
     
     # Bytes 0-3: 0x4C4A4658
     if headerBytes[:4] != [0x4C, 0x4A, 0x46, 0x58]:
         raise Exception("Error in header's header")
         
     # Bytes 4-7: Intended device
     fwid = parseInt(headerBytes[4:8])
     self.intendedDevice = self.getIntendedDeviceFromFWID(fwid)
     if DEBUG: print "Intended device: ", fwid, self.intendedDevice
     
     #Bytes 8-11: Contained version (reserved, reserved, H, L)
     self.providedVersion = float("%s.%02d" % (headerBytes[10], headerBytes[11]))
     if DEBUG: print "Provides FW:", self.providedVersion
     
     #Bytes 12-15: Required upgrader version (reserved, reserved, H, L)
     #Bytes 16-17: Image number version
     #Bytes 18-19: # of images version
     #Bytes 20-23: Start of next image version
     
     #Bytes 24-27: Length of this image version
     self.imageLength = parseInt(headerBytes[24:28])
     if DEBUG: print "Image length: ", self.imageLength
     
     #Bytes 28-31: Image offset
     self.imageOffset = parseInt(headerBytes[28:32])
     if DEBUG: print "Image offset: ", self.imageLength
     #Bytes 32-35: Number of bytes to include in the SHA.
     #Bytes 36-95: Reserved
     
     #Bytes 96-115: SHA-1 of firmware image
     self.imageSHA1 = struct.pack("B"*len(headerBytes[96:116]), *headerBytes[96:116])
     if DEBUG: print "SHA-1: " , repr(self.imageSHA1)
     
     #Bytes 116-123: Reserved
     #Bytes 124-127: Header checksum
     headerString = struct.pack("B"*124, *headerBytes[:124])
     sha1Hash = sha1(headerString).digest()
     if DEBUG: print "SHA-1 of the Header in hex:", hexWithoutQuotes(struct.unpack("B"*len(sha1Hash), sha1Hash))