101 lines
2.6 KiB
Python
101 lines
2.6 KiB
Python
#
|
|
#
|
|
#
|
|
import os
|
|
import argparse
|
|
import logging
|
|
from shutil import copyfile
|
|
#from subprocess import Popen, PIPE, check_call
|
|
from libs.crypto_pub import Signature
|
|
from libs.toolbox import Toolbox
|
|
from libs.jpg_tools import JpgTools
|
|
|
|
fingerprint = False
|
|
|
|
def main():
|
|
parseArgs()
|
|
|
|
|
|
# hash the image binary data only (not metadata)
|
|
# create new pub keys, sign hash
|
|
# export signature & public key to a new image file
|
|
def processImage(image_fn):
|
|
jpg = JpgTools()
|
|
jpg_bin = jpg.getJpgBin(image_fn)
|
|
|
|
if (fingerprint):
|
|
print( str(jpg_bin) )
|
|
# sig = Signature()
|
|
# sig.genSig(img_bin)
|
|
|
|
# (pub_fn, priv_fn) = copyImage(image_fn)
|
|
|
|
# writePubImg(pub_fn, sig)
|
|
# writePrivImg(priv_fn, sig)
|
|
|
|
|
|
# add a digital signature to the metadata
|
|
def writePubImg(pub_fn, sig):
|
|
pass
|
|
# img = ImgExif(pub_fn)
|
|
# img.addKey(sig.getPubKeyPEM())
|
|
# img.addSig(sig.sig_data)
|
|
# img.saveFile()
|
|
|
|
#
|
|
def writePrivImg(priv_fn, sig):
|
|
pass
|
|
# img = ImgExif(priv_fn)
|
|
# img.addKey(sig.getPrivKeyPEM())
|
|
#img.addSig(sig.sig_data)
|
|
# img.saveFile()
|
|
|
|
#
|
|
def copyImage(image_fn):
|
|
basename = os.path.basename(image_fn)
|
|
(filename, ext) = Toolbox.parseFilenameIncExt(basename)
|
|
pubFileName = filename + '_' + Toolbox.getTimestampStr() + ext
|
|
privFileName = filename + '_' + Toolbox.getTimestampStr() + ext
|
|
copyfile(image_fn, newFileName)
|
|
return (pubFileName, privFileName)
|
|
|
|
|
|
def parseArgs():
|
|
print("***** ***** ***** *****")
|
|
print(" ** Pic * Seal ** ")
|
|
print("***** ***** ***** *****\n")
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-i', '--image', required=False, help="source image file")
|
|
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")
|
|
args = parser.parse_args()
|
|
|
|
if (args.logging):
|
|
logging.basicConfig(filename='dbfp.log', level=logging.DEBUG)
|
|
|
|
if (args.verbose):
|
|
logging.basicConfig(level=logging.INFO)
|
|
elif (args.vverbose):
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
else:
|
|
logging.basicConfig(level=logging.CRITICAL)
|
|
|
|
if (args.fingerprint):
|
|
fingerprint = True
|
|
|
|
if (args.image):
|
|
processImage(args.image)
|
|
else:
|
|
print('Create PicSeal images')
|
|
print(' picseal.py -i <image_file>')
|
|
print('\n***** ***** ***** *****\n')
|
|
parser.print_help()
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
print
|