From 00fbe2446c7ca2c291b785da99f6e0b293574001 Mon Sep 17 00:00:00 2001 From: Paul Gardiner Date: Tue, 13 Aug 2013 13:44:40 +0100 Subject: Signature creation --- include/mupdf/pdf/crypt.h | 26 +++++++++++++++++++++++++- include/mupdf/pdf/document.h | 19 +++++++++++++++++++ include/mupdf/pdf/field.h | 1 + include/mupdf/pdf/object.h | 3 +++ 4 files changed, 48 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/mupdf/pdf/crypt.h b/include/mupdf/pdf/crypt.h index 79a72aaa..0e692941 100644 --- a/include/mupdf/pdf/crypt.h +++ b/include/mupdf/pdf/crypt.h @@ -23,6 +23,25 @@ unsigned char *pdf_crypt_key(pdf_document *doc); void pdf_print_crypt(pdf_crypt *crypt); #endif +typedef struct pdf_designated_name_s +{ + char *cn; + char *o; + char *ou; + char *email; + char *c; +} +pdf_designated_name; + +void pdf_free_designated_name(pdf_designated_name *dn); + + +pdf_signer *pdf_read_pfx(fz_context *ctx, char *sigfile, char *password); +pdf_signer *pdf_keep_signer(pdf_signer *signer); +void pdf_drop_signer(pdf_signer *signer); +pdf_designated_name *pdf_signer_designated_name(pdf_signer *signer); +void pdf_write_digest(pdf_document *doc, char *filename, pdf_obj *byte_range, int digest_offset, int digest_length, pdf_signer *signer); + /* pdf_signature_widget_byte_range: retrieve the byte range for a signature widget */ @@ -34,8 +53,13 @@ int pdf_signature_widget_byte_range(pdf_document *doc, pdf_widget *widget, int ( int pdf_signature_widget_contents(pdf_document *doc, pdf_widget *widget, char **contents); /* - fz_check_signature: check a signature's certificate chain and digest + pdf_check_signature: check a signature's certificate chain and digest */ int pdf_check_signature(pdf_document *doc, pdf_widget *widget, char *file, char *ebuf, int ebufsize); +/* + pdf_sign_signature: sign a signature form field +*/ +void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, char *sigfile, char *password); + #endif diff --git a/include/mupdf/pdf/document.h b/include/mupdf/pdf/document.h index 3afabfdb..a1837f4a 100644 --- a/include/mupdf/pdf/document.h +++ b/include/mupdf/pdf/document.h @@ -180,6 +180,23 @@ struct } pdf_obj_read_state_s; +typedef struct pdf_signer_s pdf_signer; + +/* Unsaved signature fields */ +typedef struct pdf_unsaved_sig_s pdf_unsaved_sig; + +struct pdf_unsaved_sig_s +{ + pdf_obj *field; + int byte_range_start; + int byte_range_end; + int contents_start; + int contents_end; + pdf_signer *signer; + pdf_unsaved_sig *next; +}; + + struct pdf_document_s { fz_document super; @@ -256,6 +273,8 @@ struct pdf_document_s pdf_js *js; int recalculating; int dirty; + pdf_unsaved_sig *unsaved_sigs; + void (*update_appearance)(pdf_document *doc, pdf_annot *annot); pdf_doc_event_cb *event_cb; diff --git a/include/mupdf/pdf/field.h b/include/mupdf/pdf/field.h index 83a626f4..d31051a2 100644 --- a/include/mupdf/pdf/field.h +++ b/include/mupdf/pdf/field.h @@ -28,6 +28,7 @@ void pdf_field_set_border_style(pdf_document *doc, pdf_obj *field, char *text); void pdf_field_set_button_caption(pdf_document *doc, pdf_obj *field, char *text); void pdf_field_set_fill_color(pdf_document *doc, pdf_obj *field, pdf_obj *col); void pdf_field_set_text_color(pdf_document *doc, pdf_obj *field, pdf_obj *col); +void pdf_signature_set_value(pdf_document *doc, pdf_obj *field, pdf_signer *signer); int pdf_field_display(pdf_document *doc, pdf_obj *field); char *pdf_field_name(pdf_document *doc, pdf_obj *field); void pdf_field_set_display(pdf_document *doc, pdf_obj *field, int d); diff --git a/include/mupdf/pdf/object.h b/include/mupdf/pdf/object.h index 38c9166d..15886233 100644 --- a/include/mupdf/pdf/object.h +++ b/include/mupdf/pdf/object.h @@ -105,6 +105,9 @@ void pdf_sort_dict(pdf_obj *dict); */ void pdf_set_obj_parent(pdf_obj *obj, int num); +int pdf_obj_parent_num(pdf_obj *obj); + +int pdf_sprint_obj(char *s, int n, pdf_obj *obj, int tight); int pdf_fprint_obj(FILE *fp, pdf_obj *obj, int tight); #ifndef NDEBUG -- cgit v1.2.3