# # # from libs.jpg_bin import JpgBin class JpgBinWrite: # def __init__(self, jpg_in, jpg_out): self.fhr = jpg_in self.fhw = jpg_out # # input is the Crypto Sig class # def writeJpgPicSealPub(self, crypto_sig, fp): self.__writeJpgHeader() self.__writeJpgPicSeal(crypto_sig, crypto_sig.getPubKeyDER()) self.__writeJpgImg(fp) # # input is the Crypto Sig class # def writeJpgPicSealPvt(self, crypto_sig, fp): self.__writeJpgHeader() self.__writeJpgPicSeal(crypto_sig, crypto_sig.getPvtKeyDER()) self.__writeJpgImg(fp) # def __writeJpgPicSeal(self, crypto_sig, keyder): # must include 2 bytes of length too size = 2 size += len(crypto_sig.hash_data) size += len(keyder) # write app marker self.fhw.write(JpgBin.app15_marker) # write picseal marker self.fhw.write(JpgBin.picseal_marker) # write the size of picseal record self.fhw.write(size.to_bytes(2, byteorder='big')) # write hash of image self.fhw.write(crypto_sig.hash_data) # write the public key self.fhw.write(keyder) # def __writeJpgImg(self, fp): self.__writeJpgMetadata(fp.markers_meta) self.__writeJpgImgData(fp.markers_img) self.__writeJpgFooter() self.fhw.flush() self.fhw.close() # # array of the marker information # def __writeJpgMetadata(self, markers): for marker in markers: self.fhr.seek(marker.fpos) data = self.fhr.read(marker.len) self.fhw.write(data) self.fhw.flush() # # array of the marker information # def __writeJpgImgData(self, markers): for marker in markers: # most of the image data is sequential cpos = self.fhr.tell() if (marker.fpos != cpos): self.fhr.seek(marker.fpos) data = self.fhr.read(marker.len) self.fhw.write(data) self.fhw.flush() # def __writeJpgHeader(self): self.fhw.write(bytes(JpgBin.soi_marker)) # def __writeJpgFooter(self): self.fhw.write(bytes(JpgBin.eof_marker))