diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2013-08-22 15:08:07 +0100 |
---|---|---|
committer | Paul Gardiner <paulg.artifex@glidos.net> | 2013-08-27 09:53:40 +0100 |
commit | cf3ba3e213ce17bee76fa2fe02b43d5d3cc60732 (patch) | |
tree | 575a0d50668ed45db02be2b7063b7186dae101d6 /source/pdf/pdf-pkcs7.c | |
parent | ae69f90ec82a8f19557c385c1bb25a3fb4fd5ae3 (diff) | |
download | mupdf-cf3ba3e213ce17bee76fa2fe02b43d5d3cc60732.tar.xz |
A few updates to signing support
Diffstat (limited to 'source/pdf/pdf-pkcs7.c')
-rw-r--r-- | source/pdf/pdf-pkcs7.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/source/pdf/pdf-pkcs7.c b/source/pdf/pdf-pkcs7.c index 23e8af84..fda85693 100644 --- a/source/pdf/pdf-pkcs7.c +++ b/source/pdf/pdf-pkcs7.c @@ -364,9 +364,9 @@ void pdf_free_designated_name(pdf_designated_name *dn) } -static void add_from_bags(X509 **pX509, EVP_PKEY **pPkey, STACK_OF(PKCS12_SAFEBAG) *bags, char *pw); +static void add_from_bags(X509 **pX509, EVP_PKEY **pPkey, STACK_OF(PKCS12_SAFEBAG) *bags, const char *pw); -static void add_from_bag(X509 **pX509, EVP_PKEY **pPkey, PKCS12_SAFEBAG *bag, char *pw) +static void add_from_bag(X509 **pX509, EVP_PKEY **pPkey, PKCS12_SAFEBAG *bag, const char *pw) { EVP_PKEY *pkey = NULL; X509 *x509 = NULL; @@ -414,7 +414,7 @@ static void add_from_bag(X509 **pX509, EVP_PKEY **pPkey, PKCS12_SAFEBAG *bag, ch } } -static void add_from_bags(X509 **pX509, EVP_PKEY **pPkey, STACK_OF(PKCS12_SAFEBAG) *bags, char *pw) +static void add_from_bags(X509 **pX509, EVP_PKEY **pPkey, STACK_OF(PKCS12_SAFEBAG) *bags, const char *pw) { int i; @@ -422,7 +422,7 @@ static void add_from_bags(X509 **pX509, EVP_PKEY **pPkey, STACK_OF(PKCS12_SAFEBA add_from_bag(pX509, pPkey, sk_PKCS12_SAFEBAG_value(bags, i), pw); } -pdf_signer *pdf_read_pfx(fz_context *ctx, char *pfile, char *pw) +pdf_signer *pdf_read_pfx(fz_context *ctx, const char *pfile, const char *pw) { BIO *pfxbio = NULL; PKCS12 *p12 = NULL; @@ -679,6 +679,18 @@ int pdf_check_signature(pdf_document *doc, pdf_widget *widget, char *file, char char *contents = NULL; int contents_len; int res = 0; + pdf_unsaved_sig *usig; + + for (usig = doc->unsaved_sigs; usig; usig = usig->next) + { + if (usig->field == ((pdf_annot *)widget)->obj) + { + fz_strlcpy(ebuf, "Signed but document yet to be saved", ebufsize); + if (ebufsize > 0) + ebuf[ebufsize-1] = 0; + return 0; + } + } fz_var(byte_range); fz_var(res); @@ -719,7 +731,7 @@ int pdf_check_signature(pdf_document *doc, pdf_widget *widget, char *file, char return res; } -void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, char *sigfile, char *password) +void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, const char *sigfile, const char *password) { fz_context *ctx = doc->ctx; pdf_signer *signer = pdf_read_pfx(ctx, sigfile, password); @@ -766,6 +778,11 @@ void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, char *sigfile, ch } } +int pdf_signatures_supported(void) +{ + return 1; +} + #else /* HAVE_OPENSSL */ int pdf_check_signature(pdf_document *doc, pdf_widget *widget, char *file, char *ebuf, int ebufsize) @@ -774,6 +791,10 @@ int pdf_check_signature(pdf_document *doc, pdf_widget *widget, char *file, char return 0; } +void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, const char *sigfile, const char *password) +{ +} + pdf_signer *pdf_keep_signer(pdf_signer *signer) { return NULL; @@ -787,4 +808,9 @@ void pdf_write_digest(pdf_document *doc, char *filename, pdf_obj *byte_range, in { } +int pdf_signatures_supported(void) +{ + return 0; +} + #endif /* HAVE_OPENSSL */ |