summaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2009-10-19 02:36:51 +0200
committerJay Berkenbilt <ejb@ql.org>2009-10-19 02:36:51 +0200
commita8715c495b218c9b9388a2e20c8202a3fa73b2c1 (patch)
tree721a4a9c39d9c9fdf3a150cf64859c331d392fc2 /qpdf
parent09175e457852c585a68a86d43280f7e0790a4a3b (diff)
downloadqpdf-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.c17
-rw-r--r--qpdf/qpdf.cc11
-rw-r--r--qpdf/qpdf.testcov2
-rw-r--r--qpdf/qtest/qpdf.test1
-rw-r--r--qpdf/qtest/qpdf/c-r4.pdfbin0 -> 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
new file mode 100644
index 00000000..d985109f
--- /dev/null
+++ b/qpdf/qtest/qpdf/c-r4.pdf
Binary files differ