/ SignPdf.py
SignPdf.py
1 #!/usr/bin/env vpython3 2 # *-* coding: utf-8 *-* 3 import sys 4 import os 5 import datetime 6 from cryptography.hazmat import backends 7 from cryptography.hazmat.primitives.serialization import pkcs12 8 from endesive.pdf import cms 9 from decouple import config 10 11 fname = sys.argv[1] 12 # x = sys.argv[2] 13 # y = sys.argv[3] 14 # 15 p12_path = config('P12_PATH', default=None, cast=str) 16 17 p12_pwd = config('P12_PASSWORD', default=None, cast=str) 18 if p12_pwd is None or type(p12_pwd) is not str: 19 raise Exception('Password not set in .env') 20 21 p12_contact = config('P12_PASSWORD', default=None, cast=str) 22 if p12_contact is None or type(p12_contact) is not str: 23 raise Exception('P12_CONTACT not set in .env') 24 25 p12_reason = config('P12_REASON', default=None, cast=str) 26 if p12_reason is None or type(p12_reason) is not str: 27 raise Exception('P12_REASON not set in .env') 28 29 p12_location = config('P12_LOCATION', default=None, cast=str) 30 if p12_contact is None or type(p12_location) is not str: 31 raise Exception('P12_LOCATION not set in .env') 32 33 try: 34 date = datetime.datetime.utcnow() - datetime.timedelta(hours=24) 35 date = date.strftime("D:%Y%m%d%H%M%S+00'00'") 36 dct = { 37 "aligned": 0, 38 "sigflags": 3, 39 "sigpage": 0, 40 "sigflagsft": 132, 41 "sigbutton": True, 42 "sigfield": "Signature1", 43 "auto_sigfield": True, 44 "sigandcertify": True, 45 # "signaturebox": (420, -350, 570, 640), //CERT 46 "signaturebox": (0, 840, 570, 640), #for default 47 "signature": "Signed by SGOC", 48 # "signature_img": "signature_test.png", 49 "signingdate": date, 50 "contact": p12_contact, 51 "location": p12_location, 52 "reason": p12_reason, 53 "password": p12_pwd, 54 } 55 56 with open(p12_path, "rb") as fp: 57 p12 = pkcs12.load_key_and_certificates( 58 fp.read(), 59 p12_pwd.encode('utf-8'), 60 backends.default_backend()) 61 62 data_unsigned = open(fname, "rb").read() 63 data_signed = cms.sign(data_unsigned, dct, p12[0], p12[1], p12[2], "sha256") 64 fname = fname.replace(".pdf", "-signed.pdf") 65 66 with open(fname, "wb") as fp: 67 fp.write(data_unsigned) 68 fp.write(data_signed) 69 70 print(fname) 71 72 except Exception as e: 73 print(e) 74