diff options
author | Jay Berkenbilt <ejb@ql.org> | 2009-10-19 02:36:51 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2009-10-19 02:36:51 +0200 |
commit | a8715c495b218c9b9388a2e20c8202a3fa73b2c1 (patch) | |
tree | 721a4a9c39d9c9fdf3a150cf64859c331d392fc2 /qpdf | |
parent | 09175e457852c585a68a86d43280f7e0790a4a3b (diff) | |
download | qpdf-a8715c495b218c9b9388a2e20c8202a3fa73b2c1.tar.zst |
add C API for R4 encryption
git-svn-id: svn+q:///qpdf/trunk@825 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qpdf-ctest.c | 17 | ||||
-rw-r--r-- | qpdf/qpdf.cc | 11 | ||||
-rw-r--r-- | qpdf/qpdf.testcov | 2 | ||||
-rw-r--r-- | qpdf/qtest/qpdf.test | 1 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/c-r4.pdf | bin | 0 -> 10881 bytes |
5 files changed, 31 insertions, 0 deletions
diff --git a/qpdf/qpdf-ctest.c b/qpdf/qpdf-ctest.c index c3e1040b..ce785a3a 100644 --- a/qpdf/qpdf-ctest.c +++ b/qpdf/qpdf-ctest.c @@ -229,6 +229,22 @@ static void test14(char const* infile, report_errors(); } +static void test15(char const* infile, + char const* password, + char const* outfile, + char const* outfile2) +{ + qpdf_read(qpdf, infile, password); + qpdf_init_write(qpdf, outfile); + qpdf_set_static_ID(qpdf, QPDF_TRUE); + qpdf_set_static_aes_IV(qpdf, QPDF_TRUE); + qpdf_set_r4_encryption_parameters( + qpdf, "user2", "owner2", QPDF_TRUE, QPDF_TRUE, + QPDF_R3_PRINT_LOW, QPDF_R3_MODIFY_ALL, QPDF_TRUE, QPDF_TRUE); + qpdf_write(qpdf); + report_errors(); +} + int main(int argc, char* argv[]) { char* whoami = 0; @@ -278,6 +294,7 @@ int main(int argc, char* argv[]) (n == 12) ? test12 : (n == 13) ? test13 : (n == 14) ? test14 : + (n == 15) ? test15 : 0); if (fn == 0) diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc index c54504b8..c614b5bf 100644 --- a/qpdf/qpdf.cc +++ b/qpdf/qpdf.cc @@ -146,6 +146,8 @@ These options can be useful for digging into PDF files or for use in\n\ automated test suites for software that uses the qpdf library.\n\ \n\ --static-id generate static /ID: FOR TESTING ONLY!\n\ +--static-aes-iv use a static initialization vector for AES-CBC\n\ + This is option is not secure! FOR TESTING ONLY!\n\ --no-original-object-ids suppress original object ID comments in qdf mode\n\ --show-encryption quickly show encryption parameters\n\ --check-linearization check file integrity and linearization status\n\ @@ -604,6 +606,7 @@ int main(int argc, char* argv[]) std::string force_version; bool static_id = false; + bool static_aes_iv = false; bool suppress_original_object_id = false; bool show_encryption = false; bool check_linearization = false; @@ -758,6 +761,10 @@ int main(int argc, char* argv[]) { static_id = true; } + else if (strcmp(arg, "static-aes-iv") == 0) + { + static_aes_iv = true; + } else if (strcmp(arg, "no-original-object-ids") == 0) { suppress_original_object_id = true; @@ -1049,6 +1056,10 @@ int main(int argc, char* argv[]) { w.setStaticID(true); } + if (static_aes_iv) + { + w.setStaticAesIV(true); + } if (suppress_original_object_id) { w.setSuppressOriginalObjectIDs(true); diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index d1cf3293..dd9ec5b1 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -168,3 +168,5 @@ QPDF_encryption cleartext metadata 0 QPDF_encryption aes decode stream 0 QPDFWriter forcing object stream disable 0 QPDFWriter forced version disabled encryption 0 +qpdf-c called qpdf_set_r4_encryption_parameters 0 +qpdf-c called qpdf_set_static_aes_IV 0 diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index 4ff06406..3e425254 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -954,6 +954,7 @@ $td->runtest("invalid password", my @cenc = ( [11, 'hybrid-xref.pdf', "''", 'r2', ""], [12, 'hybrid-xref.pdf', "''", 'r3', ""], + [15, 'hybrid-xref.pdf', "''", 'r4', ""], [13, 'c-r2.pdf', 'user1', 'decrypt with user', "user password: user1\n"], [13, 'c-r3.pdf', 'owner2', 'decrypt with owner', diff --git a/qpdf/qtest/qpdf/c-r4.pdf b/qpdf/qtest/qpdf/c-r4.pdf Binary files differnew file mode 100644 index 00000000..d985109f --- /dev/null +++ b/qpdf/qtest/qpdf/c-r4.pdf |