origami 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/README +1 -1
  2. data/bin/gui/hexview.rb +1 -1
  3. data/bin/gui/menu.rb +4 -4
  4. data/bin/gui/textview.rb +6 -4
  5. data/bin/gui/treeview.rb +4 -4
  6. data/bin/gui/walker.rb +1 -1
  7. data/bin/pdf2graph +1 -1
  8. data/bin/pdf2pdfa +1 -1
  9. data/bin/pdf2ruby +1 -1
  10. data/bin/pdfcocoon +1 -1
  11. data/bin/pdfcop +1 -1
  12. data/bin/pdfdecompress +1 -1
  13. data/bin/pdfdecrypt +1 -1
  14. data/bin/pdfencrypt +1 -1
  15. data/bin/pdfextract +75 -14
  16. data/bin/pdfmetadata +1 -1
  17. data/bin/shell/.irbrc +1 -1
  18. data/{origami.rb → lib/origami.rb} +3 -3
  19. data/{origami → lib/origami}/3d.rb +0 -0
  20. data/{origami → lib/origami}/acroform.rb +2 -2
  21. data/{origami → lib/origami}/actions.rb +0 -0
  22. data/{origami → lib/origami}/annotations.rb +0 -0
  23. data/{origami → lib/origami}/array.rb +0 -0
  24. data/{origami → lib/origami}/boolean.rb +0 -0
  25. data/{origami → lib/origami}/catalog.rb +0 -0
  26. data/{origami → lib/origami}/destinations.rb +0 -0
  27. data/{origami → lib/origami}/dictionary.rb +0 -0
  28. data/{origami → lib/origami}/docmdp.rb +0 -0
  29. data/{origami → lib/origami}/encryption.rb +9 -7
  30. data/{origami → lib/origami}/export.rb +0 -0
  31. data/lib/origami/extensions/fdf.rb +257 -0
  32. data/{origami/adobe → lib/origami/extensions}/ppklite.rb +3 -1
  33. data/{origami → lib/origami}/file.rb +0 -0
  34. data/{origami → lib/origami}/filters.rb +0 -0
  35. data/{origami → lib/origami}/filters/ascii.rb +0 -0
  36. data/{origami → lib/origami}/filters/ccitt.rb +0 -1
  37. data/{origami → lib/origami}/filters/crypt.rb +0 -0
  38. data/{origami → lib/origami}/filters/dct.rb +0 -0
  39. data/{origami → lib/origami}/filters/flate.rb +0 -0
  40. data/{origami → lib/origami}/filters/jbig2.rb +0 -0
  41. data/{origami → lib/origami}/filters/jpx.rb +0 -0
  42. data/{origami → lib/origami}/filters/lzw.rb +0 -0
  43. data/{origami → lib/origami}/filters/predictors.rb +0 -0
  44. data/{origami → lib/origami}/filters/runlength.rb +0 -0
  45. data/{origami → lib/origami}/font.rb +0 -0
  46. data/{origami → lib/origami}/functions.rb +0 -0
  47. data/{origami → lib/origami}/graphics.rb +0 -0
  48. data/{origami → lib/origami}/graphics/colors.rb +45 -23
  49. data/{origami → lib/origami}/graphics/instruction.rb +0 -0
  50. data/{origami → lib/origami}/graphics/path.rb +0 -0
  51. data/{origami → lib/origami}/graphics/patterns.rb +0 -0
  52. data/{origami → lib/origami}/graphics/render.rb +0 -0
  53. data/{origami → lib/origami}/graphics/state.rb +2 -2
  54. data/{origami → lib/origami}/graphics/text.rb +0 -0
  55. data/{origami → lib/origami}/graphics/xobject.rb +219 -0
  56. data/{origami → lib/origami}/header.rb +0 -0
  57. data/{origami → lib/origami}/javascript.rb +0 -0
  58. data/{origami → lib/origami}/linearization.rb +0 -0
  59. data/{origami → lib/origami}/metadata.rb +0 -0
  60. data/{origami → lib/origami}/name.rb +0 -0
  61. data/{origami → lib/origami}/null.rb +0 -0
  62. data/{origami → lib/origami}/numeric.rb +0 -0
  63. data/{origami → lib/origami}/obfuscation.rb +0 -0
  64. data/{origami → lib/origami}/object.rb +7 -2
  65. data/{origami → lib/origami}/outline.rb +0 -0
  66. data/{origami → lib/origami}/outputintents.rb +0 -0
  67. data/{origami → lib/origami}/page.rb +0 -0
  68. data/{origami → lib/origami}/parser.rb +76 -51
  69. data/{origami → lib/origami}/parsers/fdf.rb +9 -6
  70. data/{origami/parsers/pdf/linear.rb → lib/origami/parsers/pdf.rb} +31 -39
  71. data/lib/origami/parsers/pdf/linear.rb +84 -0
  72. data/lib/origami/parsers/ppklite.rb +93 -0
  73. data/{origami → lib/origami}/pdf.rb +6 -3
  74. data/{origami → lib/origami}/reference.rb +0 -0
  75. data/{origami → lib/origami}/signature.rb +170 -19
  76. data/{origami → lib/origami}/stream.rb +9 -0
  77. data/{origami → lib/origami}/string.rb +0 -0
  78. data/{origami → lib/origami}/trailer.rb +0 -0
  79. data/{origami → lib/origami}/webcapture.rb +0 -0
  80. data/{origami → lib/origami}/xfa.rb +0 -0
  81. data/{origami → lib/origami}/xreftable.rb +3 -7
  82. data/samples/README.txt +45 -0
  83. data/samples/actions/launch/calc.rb +87 -0
  84. data/samples/actions/launch/winparams.rb +22 -0
  85. data/samples/actions/loop/loopgoto.rb +24 -0
  86. data/samples/actions/loop/loopnamed.rb +21 -0
  87. data/samples/actions/named/named.rb +31 -0
  88. data/samples/actions/samba/smbrelay.rb +26 -0
  89. data/samples/actions/triggerevents/trigger.rb +75 -0
  90. data/samples/actions/webbug/submitform.js +26 -0
  91. data/samples/actions/webbug/webbug-browser.rb +68 -0
  92. data/samples/actions/webbug/webbug-js.rb +67 -0
  93. data/samples/actions/webbug/webbug-reader.rb +90 -0
  94. data/samples/attachments/attach.rb +40 -0
  95. data/samples/attachments/attached.txt +1 -0
  96. data/samples/crypto/crypto.rb +28 -0
  97. data/samples/digsig/signed.rb +46 -0
  98. data/samples/exploits/cve-2008-2992-utilprintf.rb +87 -0
  99. data/samples/exploits/cve-2009-0927-geticon.rb +65 -0
  100. data/samples/exploits/exploit_customdictopen.rb +55 -0
  101. data/samples/exploits/getannots.rb +69 -0
  102. data/samples/flash/flash.rb +31 -0
  103. data/samples/flash/helloworld.swf +0 -0
  104. data/samples/javascript/attached.txt +1 -0
  105. data/samples/javascript/js.rb +52 -0
  106. data/{tests → test}/ts_pdf.rb +1 -1
  107. metadata +109 -95
  108. data/origami/adobe/fdf.rb +0 -259
  109. data/origami/parsers/pdf.rb +0 -27
  110. data/origami/parsers/ppklite.rb +0 -86
  111. data/tests/dataset/test.dummycrt +0 -28
  112. data/tests/dataset/test.dummykey +0 -27
  113. data/tests/tc_actions.rb +0 -32
  114. data/tests/tc_annotations.rb +0 -85
  115. data/tests/tc_pages.rb +0 -37
  116. data/tests/tc_pdfattach.rb +0 -24
  117. data/tests/tc_pdfencrypt.rb +0 -110
  118. data/tests/tc_pdfnew.rb +0 -32
  119. data/tests/tc_pdfparse.rb +0 -98
  120. data/tests/tc_pdfsig.rb +0 -37
  121. data/tests/tc_streams.rb +0 -129
@@ -1,27 +0,0 @@
1
- =begin
2
-
3
- = File
4
- parsers/pdf.rb
5
-
6
- = Info
7
- This file is part of Origami, PDF manipulation framework for Ruby
8
- Copyright (C) 2010 Guillaume Delugré <guillaume@security-labs.org>
9
- All right reserved.
10
-
11
- Origami is free software: you can redistribute it and/or modify
12
- it under the terms of the GNU Lesser General Public License as published by
13
- the Free Software Foundation, either version 3 of the License, or
14
- (at your option) any later version.
15
-
16
- Origami is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU Lesser General Public License for more details.
20
-
21
- You should have received a copy of the GNU Lesser General Public License
22
- along with Origami. If not, see <http://www.gnu.org/licenses/>.
23
-
24
- =end
25
-
26
- require 'origami/parsers/pdf/linear'
27
-
@@ -1,86 +0,0 @@
1
- =begin
2
-
3
- = File
4
- parsers/ppklite.rb
5
-
6
- = Info
7
- Origami is free software: you can redistribute it and/or modify
8
- it under the terms of the GNU Lesser General Public License as published by
9
- the Free Software Foundation, either version 3 of the License, or
10
- (at your option) any later version.
11
-
12
- Origami is distributed in the hope that it will be useful,
13
- but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- GNU Lesser General Public License for more details.
16
-
17
- You should have received a copy of the GNU Lesser General Public License
18
- along with Origami. If not, see <http://www.gnu.org/licenses/>.
19
-
20
- =end
21
-
22
- require 'origami/parser'
23
- require 'origami/adobe/ppklite'
24
-
25
- module Origami
26
-
27
- class Adobe::PPKLite
28
- class Parser < Origami::Parser
29
- def parse(stream) #:nodoc:
30
- super
31
-
32
- addrbk = Adobe::PPKLite.new
33
- addrbk.header = Adobe::PPKLite::Header.parse(stream)
34
- @options[:callback].call(addrbk.header)
35
-
36
- parse_objects(addrbk)
37
- parse_xreftable(addrbk)
38
- parse_trailer(addrbk)
39
- book_specialize_entries(addrbk)
40
-
41
- addrbk
42
- end
43
-
44
- def book_specialize_entries(addrbk) #:nodoc:
45
- addrbk.revisions.first.body.each_pair do |ref, obj|
46
-
47
- if obj.is_a?(Dictionary)
48
-
49
- if obj[:Type] == :Catalog
50
-
51
- o = Adobe::PPKLite::Catalog.new(obj)
52
- o.generation, o.no, o.file_offset = obj.generation, obj.no, obj.file_offset
53
-
54
- if o.PPK.is_a?(Dictionary) and o.PPK[:Type] == :PPK
55
- o.PPK = Adobe::PPKLite::PPK.new(o.PPK)
56
-
57
- if o.PPK.User.is_a?(Dictionary) and o.PPK.User[:Type] == :User
58
- o.PPK.User = Adobe::PPKLite::UserList.new(o.PPK.User)
59
- end
60
-
61
- if o.PPK.AddressBook.is_a?(Dictionary) and o.PPK.AddressBook[:Type] == :AddressBook
62
- o.PPK.AddressBook = Adobe::PPKLite::AddressList.new(o.PPK.AddressBook)
63
- end
64
- end
65
-
66
- addrbk.revisions.first.body[ref] = o
67
-
68
- elsif obj[:ABEType] == Adobe::PPKLite::Descriptor::USER
69
- o = Adobe::PPKLite::User.new(obj)
70
- o.generation, o.no, o.file_offset = obj.generation, obj.no, obj.file_offset
71
-
72
- addrbk.revisions.first.body[ref] = o
73
- elsif obj[:ABEType] == Adobe::PPKLite::Descriptor::CERTIFICATE
74
- o = Adobe::PPKLite::Certificate.new(obj)
75
- o.generation, o.no, o.file_offset = obj.generation, obj.no, obj.file_offset
76
-
77
- addrbk.revisions.first.body[ref] = o
78
- end
79
-
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
-
@@ -1,28 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIE0zCCA7ugAwIBAgIJAPsOg8mXiWmIMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
3
- VQQGEwJGUjEWMBQGA1UECBMNSWxlLWRlLUZyYW5jZTEOMAwGA1UEBxMFUGFyaXMx
4
- DzANBgNVBAoTBlNvZ2V0aTENMAsGA1UECxMERVNFQzEaMBgGA1UEAxQRR3VpbGxh
5
- dW1lIERlbHVncoIxLjAsBgkqhkiG9w0BCQEWH2RhcmtwaG9lbml4QGJpbmFyeS1y
6
- ZXZlcnNlci5vcmcwHhcNMDgwODIwMTIyMTMxWhcNMTgwODE4MTIyMTMxWjCBoTEL
7
- MAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZS1kZS1GcmFuY2UxDjAMBgNVBAcTBVBh
8
- cmlzMQ8wDQYDVQQKEwZTb2dldGkxDTALBgNVBAsTBEVTRUMxGjAYBgNVBAMUEUd1
9
- aWxsYXVtZSBEZWx1Z3KCMS4wLAYJKoZIhvcNAQkBFh9kYXJrcGhvZW5peEBiaW5h
10
- cnktcmV2ZXJzZXIub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
11
- pU1Hrr0RnHsh0dP5V8BPX+Q/jR/TVboZUaaNT+4fUYl7p6fMaQI0qEY3xMOMRtIV
12
- qWTzARCumhRjVzCQzwawS5ZFiL6mU9F1NODxtj0KkgUXQ7LlDPR6HY0wc4IFlGw9
13
- DNdapEPhK3DOmsBWimwiekqSOaCYhq/iv32uyYs+mNVlfgjBaQxE6zyDsdizMj+h
14
- DAHfuc4zbXFVn2E1rk9dMM5ozhvD6EX6CxLb2SkZyeiG4oXQA6z9RHyfupOxhpHM
15
- xpt3ykteKyhA9icplO/OUrASsJyKk5w+V6Xd3z3FI9JDVbWKSCJ8fqEkVy7K4FJj
16
- HmJg6v1pOujZPe65EnR43QIDAQABo4IBCjCCAQYwHQYDVR0OBBYEFFX7JF1lbd5q
17
- oNhQCMUWOnUXVu7gMIHWBgNVHSMEgc4wgcuAFFX7JF1lbd5qoNhQCMUWOnUXVu7g
18
- oYGnpIGkMIGhMQswCQYDVQQGEwJGUjEWMBQGA1UECBMNSWxlLWRlLUZyYW5jZTEO
19
- MAwGA1UEBxMFUGFyaXMxDzANBgNVBAoTBlNvZ2V0aTENMAsGA1UECxMERVNFQzEa
20
- MBgGA1UEAxQRR3VpbGxhdW1lIERlbHVncoIxLjAsBgkqhkiG9w0BCQEWH2Rhcmtw
21
- aG9lbml4QGJpbmFyeS1yZXZlcnNlci5vcmeCCQD7DoPJl4lpiDAMBgNVHRMEBTAD
22
- AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCIM2oUlghWGNqGPtFThC4mhSjkLE3FMrhw
23
- ZMUCGCoBejtw8FewdaAj1TwjbN/QXT8C6whAuVMrBkTiPKWkT7p9VjwuP7+U84OP
24
- lF7iHrnhD0WUsgrymoMn6e653VEh8rY1W7qQ5Z9qjdUD4EVLO7eQiqeUgvoi/bC+
25
- 9wJlR5CfjY+lUQx5upZzm+quG3nq4m8Je0Ewv95euZP6vLGbzEvoHd97pwczJILZ
26
- 5hhFDb8fSP0nuwb4XSzZIsTmEU53sOhwXMosuTnIAzLnmKWiLQexQwebECvuPMVF
27
- 6VWc5hAV5gi8fMvQ2z2h+sCNNsfyauZQIIzGXZu/XU+xjFStyViC
28
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEApU1Hrr0RnHsh0dP5V8BPX+Q/jR/TVboZUaaNT+4fUYl7p6fM
3
- aQI0qEY3xMOMRtIVqWTzARCumhRjVzCQzwawS5ZFiL6mU9F1NODxtj0KkgUXQ7Ll
4
- DPR6HY0wc4IFlGw9DNdapEPhK3DOmsBWimwiekqSOaCYhq/iv32uyYs+mNVlfgjB
5
- aQxE6zyDsdizMj+hDAHfuc4zbXFVn2E1rk9dMM5ozhvD6EX6CxLb2SkZyeiG4oXQ
6
- A6z9RHyfupOxhpHMxpt3ykteKyhA9icplO/OUrASsJyKk5w+V6Xd3z3FI9JDVbWK
7
- SCJ8fqEkVy7K4FJjHmJg6v1pOujZPe65EnR43QIDAQABAoIBAAphDtYu8vMjXB1D
8
- tQ1IevNnboIa9HcWh050Kb1SE09YVZZSV+hkBhBm0Eufh6hOuqN3Pjbb6Equawpn
9
- d0A4iEtGtTj/14u9xCE82pB5xrcicLKEghNNKnm+isNF77nBDhhHUV6tEG9c1uwq
10
- lYR9g7CwC/xoVAto8dDaQGZRQu3vpmDN2RMbaEN5EY/rNGYDfe0OM8MnNdxJPDAc
11
- 75jCd0N0SDB4GpLW3hYDbajhJVf4rb0nAelaz+FDF/m1wWyQP5752RrDiptFEscN
12
- U8hTNHNcdxStdm7mJat3O47rVXjLtomttUDHxQIKqMbZsK/uNcV3jQEYmiojuwOF
13
- WhEtG7UCgYEA2IEQnIoS/P3ZMofjYYNtl1etQ0W9pVS7h/7KgClBNdxL5YqAYEYc
14
- Bab/bbcuQKmN0krA5/TqFo+VBhJ+QkejfB2Xk3sFn3gavg/tABCaSckegJ/5q5om
15
- IONTnOrWNRtVAGgg/R85kycJjZjqfq5NslfPU5oUAeerek37r/YrTbMCgYEAw3UF
16
- 9mbgL8v1ssY/dJHmIs3EWqx9++5WlxvCdjUcFmngaXY6ledgtJHE8JIovw1wzvsi
17
- 91bRwVAfszzZFMVEB+vNFBy3ccFxi1ouyau29GumcjQv9ai8sIvX4eLeHP8Fi8DV
18
- wNO9sA6ji3OFlhBeSyRucT/j6ayU9HpY1s+Rdy8CgYBdr2PHyTu0PAhrhD/RZ3TZ
19
- w3fXH2uUClln3Mo1sSRlsSEqf8dTYaMokv3+tQCPvI8BC5X0CZfuEU2UJhZ6idNl
20
- lsyLZfWl7uvriKqul4CcIypO0GrSZc7P9m6s/TWaH2yl02lK/uMEGSVaH2yBSt2W
21
- KccuTwMPW/do4iviFazhXwKBgBZBLsqdcA1BJdqTJAp7yj5QO3kvhrC2tHlEGeIn
22
- rekHaRvY8Fa9H4+vwUK7AZSvTRbkFVkgM4XVP6bC2Ny6kUJtoM4XbvOu2OTLAeTI
23
- fm5aC3uZYZSQ/9sCMTRxBmU6zEDbVfs8oK55HDn2j1FEz9eycDjI04R5uAQWIiNj
24
- QubVAoGBAIP1rmU6OrRcwPUY74okeJLMYKiCWVkL4lhqfik/5kmXRmszfnd0pf2z
25
- VtdfGmfuycI2HeFGOO3o88y9TcZ9nq7/ZavwNEYrbiBRnVC8anDqW+YJT0ytb2Nc
26
- bJVRuY1tVHAqIVjgtFUlqIKPEl5c6cnFcCP5j5RpuywCgNM+U2th
27
- -----END RSA PRIVATE KEY-----
data/tests/tc_actions.rb DELETED
@@ -1,32 +0,0 @@
1
- require 'test/unit'
2
-
3
- class TC_Actions < Test::Unit::TestCase
4
- def setup
5
- @target = PDF.new
6
- @page = Page.new
7
- @action = Action::JavaScript.new "app.alert(null);"
8
- end
9
-
10
- # def teardown
11
- # end
12
-
13
- def test_pdf_actions
14
- @target.onDocumentOpen @action
15
- @target.onDocumentClose @action
16
- @target.onDocumentPrint @action
17
-
18
- assert_equal @target.Catalog.OpenAction, @action
19
- assert_equal @target.Catalog.AA.WC, @action
20
- assert_equal @target.Catalog.AA.WP, @action
21
- end
22
-
23
- def test_page_actions
24
-
25
- @page.onOpen @action
26
- @page.onClose @action
27
-
28
- assert_equal @page.AA.O, @action
29
- assert_equal @page.AA.C, @action
30
- end
31
-
32
- end
@@ -1,85 +0,0 @@
1
- require 'test/unit'
2
- require 'stringio'
3
-
4
- class TC_Annotations< Test::Unit::TestCase
5
- def setup
6
- @target = PDF.new
7
- @page = Page.new
8
- @action = Action::JavaScript.new "app.alert(null);"
9
- @output = StringIO.new
10
- end
11
-
12
- # def teardown
13
- # end
14
-
15
- def test_annotations
16
-
17
- circle = Annotation::Circle.new
18
- square = Annotation::Square.new
19
- text = Annotation::Text.new
20
- link = Annotation::Link.new
21
- file = Annotation::FileAttachment.new
22
- screen = Annotation::Screen.new
23
- sound = Annotation::Sound.new
24
- pushbutton = Annotation::Widget::PushButton.new
25
- checkbox = Annotation::Widget::CheckBox.new
26
- radio = Annotation::Widget::Radio.new
27
- edit = Annotation::Widget::Text.new
28
- combo = Annotation::Widget::ComboBox.new
29
- list = Annotation::Widget::ListBox.new
30
- sig = Annotation::Widget::Signature.new
31
-
32
- @target.append_page @page
33
-
34
- assert_nothing_raised do
35
- @page.add_annot circle
36
- @page.add_annot square
37
- @page.add_annot text
38
- @page.add_annot link
39
- @page.add_annot file
40
- @page.add_annot screen
41
- @page.add_annot sound
42
- @page.add_annot pushbutton
43
- @page.add_annot checkbox
44
- @page.add_annot radio
45
- @page.add_annot edit
46
- @page.add_annot combo
47
- @page.add_annot list
48
- @page.add_annot sig
49
- end
50
-
51
- assert_nothing_raised do
52
- @target.save(@output)
53
- end
54
- end
55
-
56
- def test_annotation_actions
57
-
58
- screen = Annotation::Screen.new
59
-
60
- @page.add_annot screen
61
-
62
- screen.onMouseOver @action
63
- screen.onMouseOut @action
64
- screen.onMouseDown @action
65
- screen.onMouseUp @action
66
- screen.onFocus @action
67
- screen.onBlur @action
68
- screen.onPageOpen @action
69
- screen.onPageClose @action
70
- screen.onPageVisible @action
71
- screen.onPageInvisible @action
72
-
73
- assert_equal screen.AA.E, @action
74
- assert_equal screen.AA.X, @action
75
- assert_equal screen.AA.D, @action
76
- assert_equal screen.AA.U, @action
77
- assert_equal screen.AA.Fo, @action
78
- assert_equal screen.AA.Bl, @action
79
- assert_equal screen.AA.PO, @action
80
- assert_equal screen.AA.PC, @action
81
- assert_equal screen.AA.PV, @action
82
- assert_equal screen.AA.PI, @action
83
- end
84
-
85
- end
data/tests/tc_pages.rb DELETED
@@ -1,37 +0,0 @@
1
- require 'test/unit'
2
- require 'stringio'
3
-
4
- class TC_Pages < Test::Unit::TestCase
5
- def setup
6
- @target = PDF.new
7
- @output = StringIO.new
8
- end
9
-
10
- # def teardown
11
- # end
12
-
13
- def test_appendpage
14
- p1, p2, p3 = Page.new, Page.new, Page.new
15
-
16
- assert_nothing_raised do
17
- @target.append_page p1, p2, p3
18
- end
19
-
20
- assert_equal @target.pages.size, 3
21
-
22
- assert_equal @target.pages[0], p1
23
- assert_equal @target.pages[1], p2
24
- assert_equal @target.pages[2], p3
25
-
26
- assert_equal @target.Catalog.Pages, p1.Parent
27
- assert_equal @target.Catalog.Pages, p2.Parent
28
- assert_equal @target.Catalog.Pages, p3.Parent
29
-
30
- assert_nothing_raised do
31
- @target.save(@output)
32
- end
33
-
34
- assert_equal @target.Catalog.Pages.Count, 3
35
- end
36
-
37
- end
@@ -1,24 +0,0 @@
1
- require 'test/unit'
2
- require 'stringio'
3
-
4
- class TC_PdfAttach < Test::Unit::TestCase
5
- def setup
6
- @target = PDF.new
7
- @attachment = "tests/dataset/test.dummycrt"
8
- @output = StringIO.new
9
- end
10
-
11
- # def teardown
12
- # end
13
-
14
- def test_attachfile
15
- assert_nothing_raised do
16
- fspec = @target.attach_file(@attachment, :EmbeddedName => "foo.bar")
17
- end
18
-
19
- assert_nothing_raised do
20
- @target.save(@output)
21
- end
22
- end
23
-
24
- end
@@ -1,110 +0,0 @@
1
- require 'test/unit'
2
- require 'stringio'
3
-
4
- class TC_PdfEncrypt < Test::Unit::TestCase
5
- def setup
6
- @target = PDF.read("tests/dataset/calc.pdf", :ignore_errors => false, :verbosity => Parser::VERBOSE_QUIET)
7
- @output = StringIO.new
8
- end
9
-
10
- # def teardown
11
- # end
12
-
13
- def test_encrypt_rc4_40b
14
- @output.string = ""
15
- assert_nothing_raised do
16
- @target.encrypt(:cipher => 'rc4', :key_size => 40).save(@output);
17
- end
18
- end
19
-
20
- def test_encrypt_rc4_128b
21
- @output.string = ""
22
- assert_nothing_raised do
23
- @target.encrypt(:cipher => 'rc4').save(@output);
24
- end
25
- end
26
-
27
- def test_encrypt_aes_128b
28
- @output.string = ""
29
- assert_nothing_raised do
30
- @target.encrypt(:cipher => 'aes').save(@output);
31
- end
32
- end
33
-
34
- def test_decrypt_rc4_40b
35
- pdf = nil
36
- @output.string = ""
37
- assert_nothing_raised do
38
- pdf = PDF.new.encrypt(:cipher => 'rc4', :key_size => 40)
39
- pdf.Catalog[:Test] = "test"
40
- pdf.save(@output)
41
- end
42
-
43
- assert_not_equal pdf.Catalog[:Test], "test"
44
-
45
- assert_nothing_raised do
46
- @output = @output.reopen(@output.string, "r")
47
- pdf = PDF.read(@output, :ignore_errors => false, :verbosity => Parser::VERBOSE_QUIET)
48
- end
49
-
50
- assert_equal pdf.Catalog[:Test], "test"
51
- end
52
-
53
- def test_decrypt_rc4_128b
54
- pdf = nil
55
- @output.string = ""
56
- assert_nothing_raised do
57
- pdf = PDF.new.encrypt(:cipher => 'rc4')
58
- pdf.Catalog[:Test] = "test"
59
- pdf.save(@output)
60
- end
61
-
62
- assert_not_equal pdf.Catalog[:Test], "test"
63
-
64
- assert_nothing_raised do
65
- @output.reopen(@output.string, "r")
66
- pdf = PDF.read(@output, :ignore_errors => false, :verbosity => Parser::VERBOSE_QUIET)
67
- end
68
-
69
- assert_equal pdf.Catalog[:Test], "test"
70
- end
71
-
72
- def test_decrypt_aes_128b
73
- pdf = nil
74
- @output.string = ""
75
- assert_nothing_raised do
76
- pdf = PDF.new.encrypt(:cipher => 'aes')
77
- pdf.Catalog[:Test] = "test"
78
- pdf.save(@output)
79
- end
80
-
81
- assert_not_equal pdf.Catalog[:Test], "test"
82
-
83
- assert_nothing_raised do
84
- @output = @output.reopen(@output.string, "r")
85
- pdf = PDF.read(@output, :ignore_errors => false, :verbosity => Parser::VERBOSE_QUIET)
86
- end
87
-
88
- assert_equal pdf.Catalog[:Test], "test"
89
- end
90
-
91
- def test_decrypt_aes_256b
92
- pdf = nil
93
- @output.string = ""
94
- assert_nothing_raised do
95
- pdf = PDF.new.encrypt(:cipher => 'aes', :key_size => 256)
96
- pdf.Catalog[:Test] = "test"
97
- pdf.save(@output)
98
- end
99
-
100
- assert_not_equal pdf.Catalog[:Test], "test"
101
-
102
- assert_nothing_raised do
103
- @output = @output.reopen(@output.string, "r")
104
- pdf = PDF.read(@output, :ignore_errors => false, :verbosity => Parser::VERBOSE_QUIET)
105
- end
106
-
107
- assert_equal pdf.Catalog[:Test], "test"
108
- end
109
-
110
- end