43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
from .decdsa import DECDSA
|
|
import PyPDF2
|
|
import io
|
|
|
|
def sign_pdf(file, PRIVATE_KEY):
|
|
try:
|
|
decdsa = DECDSA(privateKey=PRIVATE_KEY)
|
|
pdf_reader = PyPDF2.PdfReader(file)
|
|
pdf_writer = PyPDF2.PdfWriter()
|
|
for page in pdf_reader.pages:
|
|
pdf_writer.add_page(page)
|
|
|
|
pdf_data = io.BytesIO()
|
|
pdf_writer.write(pdf_data)
|
|
pdf_data.seek(0)
|
|
pdf_content = pdf_data.read()
|
|
signature = decdsa.sign(pdf_content)
|
|
pdf_writer.add_metadata({'/Signature': signature.hex()})
|
|
signed_pdf = io.BytesIO()
|
|
pdf_writer.write(signed_pdf)
|
|
signed_pdf.seek(0)
|
|
return signed_pdf
|
|
except:
|
|
return False
|
|
|
|
def verify_signature(file, PRIVATE_KEY):
|
|
try:
|
|
decdsa = DECDSA(privateKey=PRIVATE_KEY)
|
|
pdf_reader = PyPDF2.PdfReader(file)
|
|
signature_text = pdf_reader.metadata.get('/Signature', '')
|
|
signature = bytes.fromhex(signature_text)
|
|
pdf_data = io.BytesIO()
|
|
pdf_writer = PyPDF2.PdfWriter()
|
|
for page in pdf_reader.pages:
|
|
pdf_writer.add_page(page)
|
|
|
|
pdf_writer.write(pdf_data)
|
|
pdf_data.seek(0)
|
|
pdf_content = pdf_data.read()
|
|
return decdsa.verify(pdf_content,signature)
|
|
except Exception as e:
|
|
print(e)
|
|
return False |