From 498070a48ea3efc4c0774195c6f6e80f8ac53c1b Mon Sep 17 00:00:00 2001 From: JohnE Date: Sat, 8 Oct 2016 18:27:45 -0700 Subject: [PATCH] NEW: added new marker processing, added print markers metadata CLI, added print markers image CLI --- docs/README | 17 +++++++++ libs/jpg_bin.py | 18 ++++++--- libs/jpg_fp.py | 95 ++++++++++++++++++++++++++--------------------- libs/jpg_tools.py | 2 +- picseal.py | 31 ++++++++++++++-- pip-req.txt | 4 +- 6 files changed, 112 insertions(+), 55 deletions(-) create mode 100644 docs/README diff --git a/docs/README b/docs/README new file mode 100644 index 0000000..80e30e8 --- /dev/null +++ b/docs/README @@ -0,0 +1,17 @@ +***** ***** ***** ***** +*** Picseal *** +***** ***** ***** ***** + +Your Photo is your Crypto Key +Generate a new Crypto Key to share with every photo + + +[[ Requirements ]] +Python 3 +pycrypto==2.6.1 + + + +[[ Usage ]] + + diff --git a/libs/jpg_bin.py b/libs/jpg_bin.py index 1a1c448..6d4b192 100644 --- a/libs/jpg_bin.py +++ b/libs/jpg_bin.py @@ -143,12 +143,11 @@ class JpgBin: # rec_len = self.calcSeekBytes() self.__addImgData(marker_hex, "SOS ") - # def markerRST(self, marker_hex): self.__addImgData(marker_hex, "RST ") - + # def markerDQT(self, marker_hex): fpos = self.fh.tell() rec_len = self.calcSeekBytes() @@ -190,7 +189,7 @@ class JpgBin: cur_fpos = (fpos - (self.data_len - self.data_idx)) if (self.prev_fpos > 0): rec_len = cur_fpos - self.prev_fpos - self.jpg_fp.addImgMetadata(self.prev_mhex, self.prev_fpos, rec_len, self.prev_mstr) + self.jpg_fp.addImgData(self.prev_mhex, self.prev_fpos, rec_len, self.prev_mstr) self.prev_mhex = mhex self.prev_mstr = mstr @@ -245,15 +244,24 @@ class JpgBin: self.getMoreBytes(True) return pos + # + def printMarkerImg(self): + return self.jpg_fp.printImgMarkers() + + # + def printMarkerMeta(self): + return self.jpg_fp.printMDMarkers() + # def findMarker(self, marker): pass - + # def __repr__(self): + return repr(self.jpg_fp) - + # def findMarkers222(self): last_idx = len(self.data_buf) diff --git a/libs/jpg_fp.py b/libs/jpg_fp.py index 1884210..c6c2148 100644 --- a/libs/jpg_fp.py +++ b/libs/jpg_fp.py @@ -3,58 +3,67 @@ # class JpgFingerprint: - def __init__(self): - self.markers_a = [] - self.markers_img = [] - self.markers_meta = [] - self.markers_h = {} - + def __init__(self): + self.markers_a = [] + self.markers_img = [] + self.markers_meta = [] + # self.markers_h = {} + - def addImgMetadata(self, mhex, mpos, mlen, mstr): - marker = JpgMarker(mhex, mpos, mlen, mstr) - self.markers_a.append(marker) - self.markers_meta.append(marker) - - - def addImgData(self, mhex, mpos, mlen, mstr): - marker = JpgMarker(mhex, mpos, mlen, mstr) - self.markers_a.append(marker) - self.markers_img.append(marker) - - def printImgMarkers(self): - pass - - - def printMDMarkers(self): - pass + def addImgMetadata(self, mhex, mpos, mlen, mstr): + marker = JpgMarker(mhex, mpos, mlen, mstr) + self.markers_a.append(marker) + self.markers_meta.append(marker) # - def __repr__(self): - str = "" - total = 0 - for marker in self.markers_a: - str += repr(marker) + "\n" - total += marker.marker_size - str += "[TOT ] bytes=={}".format(total) - str += "\n" - return str + def addImgData(self, mhex, mpos, mlen, mstr): + marker = JpgMarker(mhex, mpos, mlen, mstr) + self.markers_a.append(marker) + self.markers_img.append(marker) + + # + def printImgMarkers(self): + # print ("Got here dummies") + # print ("len=={}".format(len(self.markers_img))) + # print ("*** *** *** ***\n{}".format(retstr)) + return JpgFingerprint.__printMarker(self.markers_img) + + # + def printMDMarkers(self): + return JpgFingerprint.__printMarker(self.markers_meta) + + # + def __repr__(self): + return JpgFingerprint.__printMarker(self.markers_a) + + # + @staticmethod + def __printMarker(markers): + str = "" + total = 0 + for marker in markers: + str += repr(marker) + "\n" + total += marker.marker_size + str += "[TOT ] bytes=={}".format(total) + str += "\n" + return str # class JpgMarker: - """ - Marker Data Type - """ - def __init__(self, mhex, fpos, mlen, mstr): - self.marker_hex = mhex - self.marker_hexstr = self.marker_hex.to_bytes(2, 'big').hex() - self.marker_filepos = fpos - self.marker_size = mlen - self.marker_cat = mstr + """ + Marker Data Type + """ + def __init__(self, mhex, fpos, mlen, mstr): + self.marker_hex = mhex + self.marker_hexstr = self.marker_hex.to_bytes(2, 'big').hex() + self.marker_filepos = fpos + self.marker_size = mlen + self.marker_cat = mstr - def __repr__(self): - return "[{}] {} {}-len {}-fpos".format(self.marker_cat, self.marker_hexstr, self.marker_size, self.marker_filepos) + def __repr__(self): + return "[{}] {} {}(len) {}(fpos)".format(self.marker_cat, self.marker_hexstr, self.marker_size, self.marker_filepos) diff --git a/libs/jpg_tools.py b/libs/jpg_tools.py index 522edbe..50219cd 100644 --- a/libs/jpg_tools.py +++ b/libs/jpg_tools.py @@ -2,7 +2,7 @@ # # import logging -from PIL import Image +# from PIL import Image from libs.jpg_bin import JpgBin diff --git a/picseal.py b/picseal.py index 8f3916a..4f26648 100644 --- a/picseal.py +++ b/picseal.py @@ -11,6 +11,9 @@ from libs.toolbox import Toolbox from libs.jpg_tools import JpgTools fingerprint = False +printmeta = False +printimage = False + def main(): parseArgs() @@ -23,8 +26,8 @@ def processImage(image_fn): jpg = JpgTools() jpg_bin = jpg.getJpgBin(image_fn) - if (fingerprint): - print( str(jpg_bin) ) + printImageInfo(jpg_bin) + # sig = Signature() # sig.genSig(img_bin) @@ -59,6 +62,17 @@ def copyImage(image_fn): copyfile(image_fn, newFileName) return (pubFileName, privFileName) +# +def printImageInfo(jpg_bin2): + if (fingerprint): + print( str(jpg_bin2) ) + + if (printimage): + print( jpg_bin2.printMarkerImg()) + + if (printmeta): + print( jpg_bin2.printMarkerMeta()) + def parseArgs(): print("***** ***** ***** *****") @@ -69,7 +83,9 @@ def parseArgs(): parser.add_argument('-v', '--verbose', action='store_true', help="will set logging level to INFO") parser.add_argument('-vv', '--vverbose', action='store_true', help="will set logging level to DEBUG") parser.add_argument('-l', '--logging', action='store_true', help="will supercede the -v option and send all logging to a file, logging.DEBUG") - parser.add_argument('-fp', '--fingerprint', action='store_true', help="fingerprint") + parser.add_argument('-pm', '--printmeta', action='store_true', help="print the metadata markers") + parser.add_argument('-pi', '--printimage', action='store_true', help="print the image markers") + parser.add_argument('-fp', '--fingerprint', action='store_true', help="fingerprint") args = parser.parse_args() if (args.logging): @@ -83,8 +99,17 @@ def parseArgs(): logging.basicConfig(level=logging.CRITICAL) if (args.fingerprint): + global fingerprint fingerprint = True + if (args.printmeta): + global printmeta + printmeta = True + + if (args.printimage): + global printimage + printimage = True + if (args.image): processImage(args.image) else: diff --git a/pip-req.txt b/pip-req.txt index 1aa4e5f..ded0367 100644 --- a/pip-req.txt +++ b/pip-req.txt @@ -1,4 +1,2 @@ -Pillow==3.3.1 pycrypto==2.6.1 -requests==2.11.0 -shellescape==3.4.1 +