picseal_pub/picseal.py

80 lines
2.1 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.img_exif import ImgExif
from libs.toolbox import Toolbox
from libs.jpg_tools import JpgTools
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):
(pub_fn, priv_fn) = copyImage(image_fn)
getHash
addSignature(new_fn)
# add a digital signature to the metadata
def addSignature(image_fn):
img = ImgExif()
img.useImg(image_fn)
key = Signature()
img.appendKey(key)
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")
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.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