Commit 8d7bb3ff50943fa51ac1d968930bd23071376904

Authored by Jay Berkenbilt
1 parent 40f4b1ef

add methods for getting encryption data

git-svn-id: svn+q:///qpdf/trunk@733 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing 58 changed files with 859 additions and 29 deletions
ChangeLog
1 2009-09-27 Jay Berkenbilt <ejb@ql.org> 1 2009-09-27 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * Add several methods to query permissions controlled by the
  4 + encryption dictionary. Note that qpdf does not enforce these
  5 + permissions even though it allows the user to query them.
  6 +
3 * The function QPDF::getUserPassword returned the user password 7 * The function QPDF::getUserPassword returned the user password
4 with the required padding as specified by the PDF specification. 8 with the required padding as specified by the PDF specification.
5 This is seldom useful to users. This function has been replaced 9 This is seldom useful to users. This function has been replaced
@@ -12,8 +12,6 @@ @@ -12,8 +12,6 @@
12 Stefan Heinsen <stefan.heinsen@gmx.de> in August, 2009. He seems 12 Stefan Heinsen <stefan.heinsen@gmx.de> in August, 2009. He seems
13 to like to send encrypted mail. (key 01FCC336) 13 to like to send encrypted mail. (key 01FCC336)
14 14
15 - * Translate the encryption dictionary data to human-readable form  
16 -  
17 * Improve the error message generated when processing the broken 15 * Improve the error message generated when processing the broken
18 files...ideally we should provide the object number currently being 16 files...ideally we should provide the object number currently being
19 read 17 read
include/qpdf/QPDF.hh
@@ -128,6 +128,29 @@ class QPDF @@ -128,6 +128,29 @@ class QPDF
128 DLL_EXPORT 128 DLL_EXPORT
129 bool isEncrypted() const; 129 bool isEncrypted() const;
130 130
  131 + DLL_EXPORT
  132 + bool isEncrypted(int& R, int& P);
  133 +
  134 + // Encryption permissions -- not enforced by QPDF
  135 + DLL_EXPORT
  136 + bool allowAccessibility();
  137 + DLL_EXPORT
  138 + bool allowExtractAll();
  139 + DLL_EXPORT
  140 + bool allowPrintLowRes();
  141 + DLL_EXPORT
  142 + bool allowPrintHighRes();
  143 + DLL_EXPORT
  144 + bool allowModifyAssembly();
  145 + DLL_EXPORT
  146 + bool allowModifyForm();
  147 + DLL_EXPORT
  148 + bool allowModifyAnnotation();
  149 + DLL_EXPORT
  150 + bool allowModifyOther();
  151 + DLL_EXPORT
  152 + bool allowModifyAll();
  153 +
131 // Helper function to trim padding from user password. Calling 154 // Helper function to trim padding from user password. Calling
132 // trim_user_password on the result of getPaddedUserPassword gives 155 // trim_user_password on the result of getPaddedUserPassword gives
133 // getTrimmedUserPassword's result. 156 // getTrimmedUserPassword's result.
include/qpdf/qpdf-c.h
@@ -161,6 +161,25 @@ extern &quot;C&quot; { @@ -161,6 +161,25 @@ extern &quot;C&quot; {
161 DLL_EXPORT 161 DLL_EXPORT
162 QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf); 162 QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf);
163 163
  164 + DLL_EXPORT
  165 + QPDF_BOOL qpdf_allow_accessibility(qpdf_data qpdf);
  166 + DLL_EXPORT
  167 + QPDF_BOOL qpdf_allow_extract_all(qpdf_data qpdf);
  168 + DLL_EXPORT
  169 + QPDF_BOOL qpdf_allow_print_low_res(qpdf_data qpdf);
  170 + DLL_EXPORT
  171 + QPDF_BOOL qpdf_allow_print_high_res(qpdf_data qpdf);
  172 + DLL_EXPORT
  173 + QPDF_BOOL qpdf_allow_modify_assembly(qpdf_data qpdf);
  174 + DLL_EXPORT
  175 + QPDF_BOOL qpdf_allow_modify_form(qpdf_data qpdf);
  176 + DLL_EXPORT
  177 + QPDF_BOOL qpdf_allow_modify_annotation(qpdf_data qpdf);
  178 + DLL_EXPORT
  179 + QPDF_BOOL qpdf_allow_modify_other(qpdf_data qpdf);
  180 + DLL_EXPORT
  181 + QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf);
  182 +
164 /* WRITE FUNCTIONS */ 183 /* WRITE FUNCTIONS */
165 184
166 /* Set up for writing. No writing is actually performed until the 185 /* Set up for writing. No writing is actually performed until the
libqpdf/QPDF_encryption.cc
@@ -463,3 +463,185 @@ QPDF::isEncrypted() const @@ -463,3 +463,185 @@ QPDF::isEncrypted() const
463 { 463 {
464 return this->encrypted; 464 return this->encrypted;
465 } 465 }
  466 +
  467 +DLL_EXPORT
  468 +bool
  469 +QPDF::isEncrypted(int& R, int& P)
  470 +{
  471 + if (this->encrypted)
  472 + {
  473 + QPDFObjectHandle trailer = getTrailer();
  474 + QPDFObjectHandle encrypt = trailer.getKey("/Encrypt");
  475 + QPDFObjectHandle Pkey = encrypt.getKey("/P");
  476 + QPDFObjectHandle Rkey = encrypt.getKey("/R");
  477 + P = Pkey.getIntValue();
  478 + R = Rkey.getIntValue();
  479 + return true;
  480 + }
  481 + else
  482 + {
  483 + return false;
  484 + }
  485 +}
  486 +
  487 +static bool
  488 +is_bit_set(int P, int bit)
  489 +{
  490 + // Bits in P are numbered from 1 in the spec
  491 + return (P & (1 << (bit - 1)));
  492 +}
  493 +
  494 +DLL_EXPORT
  495 +bool
  496 +QPDF::allowAccessibility()
  497 +{
  498 + int R = 0;
  499 + int P = 0;
  500 + bool status = true;
  501 + if (isEncrypted(R, P))
  502 + {
  503 + if (R < 3)
  504 + {
  505 + status = is_bit_set(P, 5);
  506 + }
  507 + else
  508 + {
  509 + status = is_bit_set(P, 10);
  510 + }
  511 + }
  512 + return status;
  513 +}
  514 +
  515 +DLL_EXPORT
  516 +bool
  517 +QPDF::allowExtractAll()
  518 +{
  519 + int R = 0;
  520 + int P = 0;
  521 + bool status = true;
  522 + if (isEncrypted(R, P))
  523 + {
  524 + status = is_bit_set(P, 5);
  525 + }
  526 + return status;
  527 +}
  528 +
  529 +DLL_EXPORT
  530 +bool
  531 +QPDF::allowPrintLowRes()
  532 +{
  533 + int R = 0;
  534 + int P = 0;
  535 + bool status = true;
  536 + if (isEncrypted(R, P))
  537 + {
  538 + status = is_bit_set(P, 3);
  539 + }
  540 + return status;
  541 +}
  542 +
  543 +DLL_EXPORT
  544 +bool
  545 +QPDF::allowPrintHighRes()
  546 +{
  547 + int R = 0;
  548 + int P = 0;
  549 + bool status = true;
  550 + if (isEncrypted(R, P))
  551 + {
  552 + status = is_bit_set(P, 3);
  553 + if ((R >= 3) && (! is_bit_set(P, 12)))
  554 + {
  555 + status = false;
  556 + }
  557 + }
  558 + return status;
  559 +}
  560 +
  561 +DLL_EXPORT
  562 +bool
  563 +QPDF::allowModifyAssembly()
  564 +{
  565 + int R = 0;
  566 + int P = 0;
  567 + bool status = true;
  568 + if (isEncrypted(R, P))
  569 + {
  570 + if (R < 3)
  571 + {
  572 + status = is_bit_set(P, 4);
  573 + }
  574 + else
  575 + {
  576 + status = is_bit_set(P, 11);
  577 + }
  578 + }
  579 + return status;
  580 +}
  581 +
  582 +DLL_EXPORT
  583 +bool
  584 +QPDF::allowModifyForm()
  585 +{
  586 + int R = 0;
  587 + int P = 0;
  588 + bool status = true;
  589 + if (isEncrypted(R, P))
  590 + {
  591 + if (R < 3)
  592 + {
  593 + status = is_bit_set(P, 6);
  594 + }
  595 + else
  596 + {
  597 + status = is_bit_set(P, 9);
  598 + }
  599 + }
  600 + return status;
  601 +}
  602 +
  603 +DLL_EXPORT
  604 +bool
  605 +QPDF::allowModifyAnnotation()
  606 +{
  607 + int R = 0;
  608 + int P = 0;
  609 + bool status = true;
  610 + if (isEncrypted(R, P))
  611 + {
  612 + status = is_bit_set(P, 6);
  613 + }
  614 + return status;
  615 +}
  616 +
  617 +DLL_EXPORT
  618 +bool
  619 +QPDF::allowModifyOther()
  620 +{
  621 + int R = 0;
  622 + int P = 0;
  623 + bool status = true;
  624 + if (isEncrypted(R, P))
  625 + {
  626 + status = is_bit_set(P, 4);
  627 + }
  628 + return status;
  629 +}
  630 +
  631 +DLL_EXPORT
  632 +bool
  633 +QPDF::allowModifyAll()
  634 +{
  635 + int R = 0;
  636 + int P = 0;
  637 + bool status = true;
  638 + if (isEncrypted(R, P))
  639 + {
  640 + status = (is_bit_set(P, 4) && is_bit_set(P, 6));
  641 + if (R >= 3)
  642 + {
  643 + status = status && (is_bit_set(P, 9) && is_bit_set(P, 11));
  644 + }
  645 + }
  646 + return status;
  647 +}
libqpdf/qpdf-c.cc
@@ -186,6 +186,69 @@ QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf) @@ -186,6 +186,69 @@ QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf)
186 } 186 }
187 187
188 DLL_EXPORT 188 DLL_EXPORT
  189 +QPDF_BOOL qpdf_allow_accessibility(qpdf_data qpdf)
  190 +{
  191 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_accessibility");
  192 + return qpdf->qpdf->allowAccessibility();
  193 +}
  194 +
  195 +DLL_EXPORT
  196 +QPDF_BOOL qpdf_allow_extract_all(qpdf_data qpdf)
  197 +{
  198 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_extract_all");
  199 + return qpdf->qpdf->allowExtractAll();
  200 +}
  201 +
  202 +DLL_EXPORT
  203 +QPDF_BOOL qpdf_allow_print_low_res(qpdf_data qpdf)
  204 +{
  205 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_print_low_res");
  206 + return qpdf->qpdf->allowPrintLowRes();
  207 +}
  208 +
  209 +DLL_EXPORT
  210 +QPDF_BOOL qpdf_allow_print_high_res(qpdf_data qpdf)
  211 +{
  212 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_print_high_res");
  213 + return qpdf->qpdf->allowPrintHighRes();
  214 +}
  215 +
  216 +DLL_EXPORT
  217 +QPDF_BOOL qpdf_allow_modify_assembly(qpdf_data qpdf)
  218 +{
  219 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_assembly");
  220 + return qpdf->qpdf->allowModifyAssembly();
  221 +}
  222 +
  223 +DLL_EXPORT
  224 +QPDF_BOOL qpdf_allow_modify_form(qpdf_data qpdf)
  225 +{
  226 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_form");
  227 + return qpdf->qpdf->allowModifyForm();
  228 +}
  229 +
  230 +DLL_EXPORT
  231 +QPDF_BOOL qpdf_allow_modify_annotation(qpdf_data qpdf)
  232 +{
  233 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_annotation");
  234 + return qpdf->qpdf->allowModifyAnnotation();
  235 +}
  236 +
  237 +DLL_EXPORT
  238 +QPDF_BOOL qpdf_allow_modify_other(qpdf_data qpdf)
  239 +{
  240 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_other");
  241 + return qpdf->qpdf->allowModifyOther();
  242 +}
  243 +
  244 +DLL_EXPORT
  245 +QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf)
  246 +{
  247 + QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_all");
  248 + return qpdf->qpdf->allowModifyAll();
  249 +}
  250 +
  251 +DLL_EXPORT
189 QPDF_ERROR_CODE qpdf_init_write(qpdf_data qpdf, char const* filename) 252 QPDF_ERROR_CODE qpdf_init_write(qpdf_data qpdf, char const* filename)
190 { 253 {
191 QPDF_ERROR_CODE status = QPDF_SUCCESS; 254 QPDF_ERROR_CODE status = QPDF_SUCCESS;
qpdf/qpdf-ctest.c
@@ -29,6 +29,24 @@ static void test01(char const* infile, @@ -29,6 +29,24 @@ static void test01(char const* infile,
29 if (qpdf_is_encrypted(qpdf)) 29 if (qpdf_is_encrypted(qpdf))
30 { 30 {
31 printf("user password: %s\n", qpdf_get_user_password(qpdf)); 31 printf("user password: %s\n", qpdf_get_user_password(qpdf));
  32 + printf("extract for accessibility: %d\n",
  33 + qpdf_allow_accessibility(qpdf));
  34 + printf("extract for any purpose: %d\n",
  35 + qpdf_allow_extract_all(qpdf));
  36 + printf("print low resolution: %d\n",
  37 + qpdf_allow_print_low_res(qpdf));
  38 + printf("print high resolution: %d\n",
  39 + qpdf_allow_print_high_res(qpdf));
  40 + printf("modify document assembly: %d\n",
  41 + qpdf_allow_modify_assembly(qpdf));
  42 + printf("modify forms: %d\n",
  43 + qpdf_allow_modify_form(qpdf));
  44 + printf("modify annotations: %d\n",
  45 + qpdf_allow_modify_annotation(qpdf));
  46 + printf("modify other: %d\n",
  47 + qpdf_allow_modify_other(qpdf));
  48 + printf("modify anything: %d\n",
  49 + qpdf_allow_modify_all(qpdf));
32 } 50 }
33 report_errors(); 51 report_errors();
34 } 52 }
qpdf/qpdf.cc
@@ -165,21 +165,44 @@ void usage(std::string const&amp; msg) @@ -165,21 +165,44 @@ void usage(std::string const&amp; msg)
165 exit(EXIT_ERROR); 165 exit(EXIT_ERROR);
166 } 166 }
167 167
  168 +static std::string show_bool(bool v)
  169 +{
  170 + return v ? "allowed" : "not allowed";
  171 +}
  172 +
168 static void show_encryption(QPDF& pdf) 173 static void show_encryption(QPDF& pdf)
169 { 174 {
170 // Extract /P from /Encrypt 175 // Extract /P from /Encrypt
171 - if (! pdf.isEncrypted()) 176 + int R = 0;
  177 + int P = 0;
  178 + if (! pdf.isEncrypted(R, P))
172 { 179 {
173 std::cout << "File is not encrypted" << std::endl; 180 std::cout << "File is not encrypted" << std::endl;
174 } 181 }
175 else 182 else
176 { 183 {
177 - QPDFObjectHandle trailer = pdf.getTrailer();  
178 - QPDFObjectHandle encrypt = trailer.getKey("/Encrypt");  
179 - QPDFObjectHandle P = encrypt.getKey("/P");  
180 - std::cout << "P = " << P.getIntValue() << std::endl; 184 + std::cout << "R = " << R << std::endl;
  185 + std::cout << "P = " << P << std::endl;
181 std::string user_password = pdf.getTrimmedUserPassword(); 186 std::string user_password = pdf.getTrimmedUserPassword();
182 std::cout << "User password = " << user_password << std::endl; 187 std::cout << "User password = " << user_password << std::endl;
  188 + std::cout << "extract for accessibility: "
  189 + << show_bool(pdf.allowAccessibility()) << std::endl;
  190 + std::cout << "extract for any purpose: "
  191 + << show_bool(pdf.allowExtractAll()) << std::endl;
  192 + std::cout << "print low resolution: "
  193 + << show_bool(pdf.allowPrintLowRes()) << std::endl;
  194 + std::cout << "print high resolution: "
  195 + << show_bool(pdf.allowPrintHighRes()) << std::endl;
  196 + std::cout << "modify document assembly: "
  197 + << show_bool(pdf.allowModifyAssembly()) << std::endl;
  198 + std::cout << "modify forms: "
  199 + << show_bool(pdf.allowModifyForm()) << std::endl;
  200 + std::cout << "modify annotations: "
  201 + << show_bool(pdf.allowModifyAnnotation()) << std::endl;
  202 + std::cout << "modify other: "
  203 + << show_bool(pdf.allowModifyOther()) << std::endl;
  204 + std::cout << "modify anything: "
  205 + << show_bool(pdf.allowModifyAll()) << std::endl;
183 } 206 }
184 } 207 }
185 208
qpdf/qpdf.testcov
@@ -144,3 +144,12 @@ qpdf-c called qpdf_set_r2_encryption_parameters 0 @@ -144,3 +144,12 @@ qpdf-c called qpdf_set_r2_encryption_parameters 0
144 qpdf-c called qpdf_set_r3_encryption_parameters 0 144 qpdf-c called qpdf_set_r3_encryption_parameters 0
145 qpdf-c called qpdf_set_linearization 0 145 qpdf-c called qpdf_set_linearization 0
146 qpdf-c called qpdf_write 3 146 qpdf-c called qpdf_write 3
  147 +qpdf-c called qpdf_allow_accessibility 0
  148 +qpdf-c called qpdf_allow_extract_all 0
  149 +qpdf-c called qpdf_allow_print_low_res 0
  150 +qpdf-c called qpdf_allow_print_high_res 0
  151 +qpdf-c called qpdf_allow_modify_assembly 0
  152 +qpdf-c called qpdf_allow_modify_form 0
  153 +qpdf-c called qpdf_allow_modify_annotation 0
  154 +qpdf-c called qpdf_allow_modify_other 0
  155 +qpdf-c called qpdf_allow_modify_all 0
qpdf/qtest/qpdf.test
@@ -683,33 +683,48 @@ $td-&gt;notify(&quot;--- Encryption Tests ---&quot;); @@ -683,33 +683,48 @@ $td-&gt;notify(&quot;--- Encryption Tests ---&quot;);
683 # resulting files were saved and manually checked with Acrobat 5.0 to 683 # resulting files were saved and manually checked with Acrobat 5.0 to
684 # ensure that the security settings were as intended. 684 # ensure that the security settings were as intended.
685 685
686 -# Values: basename, password, encryption flags, /P Encrypt key. 686 +# Values: basename, password, encryption flags, /P Encrypt key,
  687 +# extract-for-accessibility, extract-for-any-purpose,
  688 +# print-low-res, print-high-res, modify-assembly, modify-forms,
  689 +# modify-annotate, modify-other, modify-all
687 my @encrypted_files = 690 my @encrypted_files =
688 (['base', ''], 691 (['base', ''],
689 ['R3,V2', '', 692 ['R3,V2', '',
690 - '-accessibility=n -extract=n -print=full -modify=all', -532], 693 + '-accessibility=n -extract=n -print=full -modify=all', -532,
  694 + 0, 0, 1, 1, 1, 1, 1, 1, 1],
691 ['R3,V2,U=view', 'view', 695 ['R3,V2,U=view', 'view',
692 - '-accessibility=y -extract=n -print=none -modify=none', -3392], 696 + '-accessibility=y -extract=n -print=none -modify=none', -3392,
  697 + 1, 0, 0, 0, 0, 0, 0, 0, 0],
693 ['R3,V2,O=master', 'master', 698 ['R3,V2,O=master', 'master',
694 - '-accessibility=n -extract=y -print=none -modify=annotate', -2576], 699 + '-accessibility=n -extract=y -print=none -modify=annotate', -2576,
  700 + 0, 1, 0, 0, 1, 1, 1, 0, 0],
695 ['R3,V2,O=master', '', 701 ['R3,V2,O=master', '',
696 - '-accessibility=n -extract=n -print=none -modify=form', -2624], 702 + '-accessibility=n -extract=n -print=none -modify=form', -2624,
  703 + 0, 0, 0, 0, 1, 1, 0, 0, 0],
697 ['R3,V2,U=view,O=master', 'view', 704 ['R3,V2,U=view,O=master', 'view',
698 - '-accessibility=n -extract=n -print=none -modify=assembly', -2880], 705 + '-accessibility=n -extract=n -print=none -modify=assembly', -2880,
  706 + 0, 0, 0, 0, 1, 0, 0, 0, 0],
699 ['R3,V2,U=view,O=master', 'master', 707 ['R3,V2,U=view,O=master', 'master',
700 - '-accessibility=n -print=low', -2564], 708 + '-accessibility=n -print=low', -2564,
  709 + 0, 1, 1, 0, 1, 1, 1, 1, 1],
701 ['R2,V1', '', 710 ['R2,V1', '',
702 - '-print=n -modify=n -extract=n -annotate=n', -64], 711 + '-print=n -modify=n -extract=n -annotate=n', -64,
  712 + 0, 0, 0, 0, 0, 0, 0, 0, 0],
703 ['R2,V1,U=view', 'view', 713 ['R2,V1,U=view', 'view',
704 - '-print=y -modify=n -extract=n -annotate=n', -60], 714 + '-print=y -modify=n -extract=n -annotate=n', -60,
  715 + 0, 0, 1, 1, 0, 0, 0, 0, 0],
705 ['R2,V1,O=master', 'master', 716 ['R2,V1,O=master', 'master',
706 - '-print=n -modify=y -extract=n -annotate=n', -56], 717 + '-print=n -modify=y -extract=n -annotate=n', -56,
  718 + 0, 0, 0, 0, 1, 0, 0, 1, 0],
707 ['R2,V1,O=master', '', 719 ['R2,V1,O=master', '',
708 - '-print=n -modify=n -extract=y -annotate=n', -48], 720 + '-print=n -modify=n -extract=y -annotate=n', -48,
  721 + 1, 1, 0, 0, 0, 0, 0, 0, 0],
709 ['R2,V1,U=view,O=master', 'view', 722 ['R2,V1,U=view,O=master', 'view',
710 - '-print=n -modify=n -extract=n -annotate=y', -32], 723 + '-print=n -modify=n -extract=n -annotate=y', -32,
  724 + 0, 0, 0, 0, 0, 1, 1, 0, 0],
711 ['R2,V1,U=view,O=master', 'master', 725 ['R2,V1,U=view,O=master', 'master',
712 - '', -4], 726 + '', -4,
  727 + 1, 1, 1, 1, 1, 1, 1, 1, 1],
713 ['long-password', 'asdf asdf asdf asdf asdf asdf qwer'], 728 ['long-password', 'asdf asdf asdf asdf asdf asdf qwer'],
714 ['long-password', 'asdf asdf asdf asdf asdf asdf qw']); 729 ['long-password', 'asdf asdf asdf asdf asdf asdf qw']);
715 730
@@ -732,7 +747,23 @@ $td-&gt;runtest(&quot;recheck encrypted file&quot;, @@ -732,7 +747,23 @@ $td-&gt;runtest(&quot;recheck encrypted file&quot;,
732 747
733 foreach my $d (@encrypted_files) 748 foreach my $d (@encrypted_files)
734 { 749 {
735 - my ($file, $pass, $xeflags, $P) = @$d; 750 + my ($file, $pass, $xeflags, $P,
  751 + $accessible, $extract, $printlow, $printhigh,
  752 + $modifyassembly, $modifyform, $modifyannot,
  753 + $modifyother, $modifyall) = @$d;
  754 +
  755 + my $f = sub { $_[0] ? "allowed" : "not allowed" };
  756 + my $enc_details =
  757 + "extract for accessibility: " . &$f($accessible) . "\n" .
  758 + "extract for any purpose: " . &$f($extract) . "\n" .
  759 + "print low resolution: " . &$f($printlow) . "\n" .
  760 + "print high resolution: " . &$f($printhigh) . "\n" .
  761 + "modify document assembly: " . &$f($modifyassembly) . "\n" .
  762 + "modify forms: " . &$f($modifyform) . "\n" .
  763 + "modify annotations: " . &$f($modifyannot) . "\n" .
  764 + "modify other: " . &$f($modifyother) . "\n" .
  765 + "modify anything: " . &$f($modifyall) . "\n";
  766 +
736 # Test writing to stdout 767 # Test writing to stdout
737 $td->runtest("decrypt $file", 768 $td->runtest("decrypt $file",
738 {$td->COMMAND => 769 {$td->COMMAND =>
@@ -776,8 +807,9 @@ foreach my $d (@encrypted_files) @@ -776,8 +807,9 @@ foreach my $d (@encrypted_files)
776 {$td->COMMAND => 807 {$td->COMMAND =>
777 "qpdf --show-encryption --password=\"$pass\"" . 808 "qpdf --show-encryption --password=\"$pass\"" .
778 " $file.enc2"}, 809 " $file.enc2"},
779 - {$td->STRING => "P = $P\nUser password = $upass\n",  
780 - $td->EXIT_STATUS => 0}, 810 + {$td->STRING => "R = $R\nP = $P\n" .
  811 + "User password = $upass\n$enc_details",
  812 + $td->EXIT_STATUS => 0},
781 $td->NORMALIZE_NEWLINES); 813 $td->NORMALIZE_NEWLINES);
782 $td->runtest("decrypt again", 814 $td->runtest("decrypt again",
783 {$td->COMMAND => 815 {$td->COMMAND =>
@@ -799,8 +831,9 @@ foreach my $d (@encrypted_files) @@ -799,8 +831,9 @@ foreach my $d (@encrypted_files)
799 {$td->COMMAND => 831 {$td->COMMAND =>
800 "qpdf --show-encryption --password=\"$pass\"" . 832 "qpdf --show-encryption --password=\"$pass\"" .
801 " $file.enc4"}, 833 " $file.enc4"},
802 - {$td->STRING => "P = $P\nUser password = $upass\n",  
803 - $td->EXIT_STATUS => 0}, 834 + {$td->STRING => "R = $R\nP = $P\n" .
  835 + "User password = $upass\n$enc_details",
  836 + $td->EXIT_STATUS => 0},
804 $td->NORMALIZE_NEWLINES); 837 $td->NORMALIZE_NEWLINES);
805 } 838 }
806 } 839 }
@@ -828,8 +861,9 @@ $td-&gt;runtest(&quot;linearize encrypted file&quot;, @@ -828,8 +861,9 @@ $td-&gt;runtest(&quot;linearize encrypted file&quot;,
828 {$td->STRING => "", 861 {$td->STRING => "",
829 $td->EXIT_STATUS => 0}); 862 $td->EXIT_STATUS => 0});
830 $td->runtest("check encryption", 863 $td->runtest("check encryption",
831 - {$td->COMMAND => "qpdf --show-encryption a.pdf"},  
832 - {$td->STRING => "P = -60\nUser password = \n", 864 + {$td->COMMAND => "qpdf --show-encryption a.pdf",
  865 + $td->FILTER => "grep -v allowed"},
  866 + {$td->STRING => "R = 2\nP = -60\nUser password = \n",
833 $td->EXIT_STATUS => 0}, 867 $td->EXIT_STATUS => 0},
834 $td->NORMALIZE_NEWLINES); 868 $td->NORMALIZE_NEWLINES);
835 $td->runtest("check linearization", 869 $td->runtest("check linearization",
@@ -844,8 +878,9 @@ $td-&gt;runtest(&quot;linearize and encrypt file&quot;, @@ -844,8 +878,9 @@ $td-&gt;runtest(&quot;linearize and encrypt file&quot;,
844 {$td->STRING => "", 878 {$td->STRING => "",
845 $td->EXIT_STATUS => 0}); 879 $td->EXIT_STATUS => 0});
846 $td->runtest("check encryption", 880 $td->runtest("check encryption",
847 - {$td->COMMAND => "qpdf --show-encryption --password=owner a.pdf"},  
848 - {$td->STRING => "P = -4\nUser password = user\n", 881 + {$td->COMMAND => "qpdf --show-encryption --password=owner a.pdf",
  882 + $td->FILTER => "grep -v allowed"},
  883 + {$td->STRING => "R = 3\nP = -4\nUser password = user\n",
849 $td->EXIT_STATUS => 0}, 884 $td->EXIT_STATUS => 0},
850 $td->NORMALIZE_NEWLINES); 885 $td->NORMALIZE_NEWLINES);
851 $td->runtest("check linearization", 886 $td->runtest("check linearization",
qpdf/qtest/qpdf/U25A0.10-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/U25A0.10-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.10.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/U25A0.10.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.11-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/U25A0.11-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.11.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/U25A0.11.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.12-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 0
  6 +extract for any purpose: 0
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 0
  10 +modify forms: 0
  11 +modify annotations: 0
  12 +modify other: 0
  13 +modify anything: 0
qpdf/qtest/qpdf/U25A0.12-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 2
3 P = -60 4 P = -60
4 User password = 5 User password =
  6 +extract for accessibility: not allowed
  7 +extract for any purpose: not allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: not allowed
  11 +modify forms: not allowed
  12 +modify annotations: not allowed
  13 +modify other: not allowed
  14 +modify anything: not allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.12.c-check
@@ -2,3 +2,12 @@ version: 1.3 @@ -2,3 +2,12 @@ version: 1.3
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 0
  6 +extract for any purpose: 0
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 0
  10 +modify forms: 0
  11 +modify annotations: 0
  12 +modify other: 0
  13 +modify anything: 0
qpdf/qtest/qpdf/U25A0.12.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.3 2 PDF Version: 1.3
  3 +R = 2
3 P = -60 4 P = -60
4 User password = 5 User password =
  6 +extract for accessibility: not allowed
  7 +extract for any purpose: not allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: not allowed
  11 +modify forms: not allowed
  12 +modify annotations: not allowed
  13 +modify other: not allowed
  14 +modify anything: not allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.9-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 0
  6 +extract for any purpose: 0
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 0
  10 +modify forms: 0
  11 +modify annotations: 0
  12 +modify other: 0
  13 +modify anything: 0
qpdf/qtest/qpdf/U25A0.9-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 2
3 P = -60 4 P = -60
4 User password = 5 User password =
  6 +extract for accessibility: not allowed
  7 +extract for any purpose: not allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: not allowed
  11 +modify forms: not allowed
  12 +modify annotations: not allowed
  13 +modify other: not allowed
  14 +modify anything: not allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/U25A0.9.c-check
@@ -2,3 +2,12 @@ version: 1.3 @@ -2,3 +2,12 @@ version: 1.3
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 0
  6 +extract for any purpose: 0
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 0
  10 +modify forms: 0
  11 +modify annotations: 0
  12 +modify other: 0
  13 +modify anything: 0
qpdf/qtest/qpdf/U25A0.9.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.3 2 PDF Version: 1.3
  3 +R = 2
3 P = -60 4 P = -60
4 User password = 5 User password =
  6 +extract for accessibility: not allowed
  7 +extract for any purpose: not allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: not allowed
  11 +modify forms: not allowed
  12 +modify annotations: not allowed
  13 +modify other: not allowed
  14 +modify anything: not allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/hybrid-xref.10-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/hybrid-xref.10-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/hybrid-xref.10.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/hybrid-xref.10.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/hybrid-xref.11-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/hybrid-xref.11-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/hybrid-xref.11.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/hybrid-xref.11.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/inline-images.10-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/inline-images.10-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/inline-images.10.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/inline-images.10.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/inline-images.11-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/inline-images.11-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/inline-images.11.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/inline-images.11.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/lin-special.10-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/lin-special.10-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/lin-special.10.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/lin-special.10.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/lin-special.11-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/lin-special.11-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/lin-special.11.c-check
@@ -2,3 +2,12 @@ version: 1.4 @@ -2,3 +2,12 @@ version: 1.4
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/lin-special.11.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.4 2 PDF Version: 1.4
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/object-stream.10-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/object-stream.10-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/object-stream.10.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 0 2 linearized: 0
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/object-stream.10.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is not linearized 15 File is not linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/object-stream.11-ogen.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/object-stream.11-ogen.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found
qpdf/qtest/qpdf/object-stream.11.c-check
@@ -2,3 +2,12 @@ version: 1.5 @@ -2,3 +2,12 @@ version: 1.5
2 linearized: 1 2 linearized: 1
3 encrypted: 1 3 encrypted: 1
4 user password: 4 user password:
  5 +extract for accessibility: 1
  6 +extract for any purpose: 1
  7 +print low resolution: 1
  8 +print high resolution: 1
  9 +modify document assembly: 1
  10 +modify forms: 1
  11 +modify annotations: 1
  12 +modify other: 1
  13 +modify anything: 1
qpdf/qtest/qpdf/object-stream.11.check
1 checking a.pdf 1 checking a.pdf
2 PDF Version: 1.5 2 PDF Version: 1.5
  3 +R = 3
3 P = -4 4 P = -4
4 User password = 5 User password =
  6 +extract for accessibility: allowed
  7 +extract for any purpose: allowed
  8 +print low resolution: allowed
  9 +print high resolution: allowed
  10 +modify document assembly: allowed
  11 +modify forms: allowed
  12 +modify annotations: allowed
  13 +modify other: allowed
  14 +modify anything: allowed
5 File is linearized 15 File is linearized
6 No errors found 16 No errors found