itext-jruby 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ itext-jruby
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ jruby-1.7.4
data/Gemfile CHANGED
@@ -7,4 +7,5 @@ group :development do
7
7
  gem "rdoc"
8
8
  gem "bundler"
9
9
  gem "jeweler"
10
+ gem "pry"
10
11
  end
data/Gemfile.lock CHANGED
@@ -8,10 +8,13 @@ GEM
8
8
  thread_safe (~> 0.1)
9
9
  tzinfo (~> 0.3.37)
10
10
  addressable (2.3.5)
11
+ atomic (1.1.13)
11
12
  atomic (1.1.13-java)
12
13
  builder (3.2.2)
14
+ coderay (1.0.9)
13
15
  faraday (0.8.8)
14
16
  multipart-post (~> 1.2.0)
17
+ ffi (1.9.0-java)
15
18
  git (1.2.6)
16
19
  github_api (0.10.1)
17
20
  addressable
@@ -33,13 +36,16 @@ GEM
33
36
  nokogiri (= 1.5.10)
34
37
  rake
35
38
  rdoc
39
+ json (1.8.0)
36
40
  json (1.8.0-java)
37
41
  jwt (0.1.8)
38
42
  multi_json (>= 1.5)
43
+ method_source (0.8.2)
39
44
  minitest (4.7.5)
40
45
  multi_json (1.7.9)
41
46
  multi_xml (0.5.5)
42
47
  multipart-post (1.2.0)
48
+ nokogiri (1.5.10)
43
49
  nokogiri (1.5.10-java)
44
50
  oauth2 (0.9.2)
45
51
  faraday (~> 0.8)
@@ -48,6 +54,11 @@ GEM
48
54
  multi_json (~> 1.0)
49
55
  multi_xml (~> 0.5)
50
56
  rack (~> 1.2)
57
+ pry (0.9.12.2-java)
58
+ coderay (~> 1.0.5)
59
+ method_source (~> 0.8)
60
+ slop (~> 3.4)
61
+ spoon (~> 0.0)
51
62
  rack (1.5.2)
52
63
  rake (10.1.0)
53
64
  rdoc (4.0.1)
@@ -58,6 +69,11 @@ GEM
58
69
  shoulda-context (1.1.5)
59
70
  shoulda-matchers (2.3.0)
60
71
  activesupport (>= 3.0.0)
72
+ slop (3.4.6)
73
+ spoon (0.0.4)
74
+ ffi
75
+ thread_safe (0.1.2)
76
+ atomic
61
77
  thread_safe (0.1.2-java)
62
78
  atomic
63
79
  tzinfo (0.3.37)
@@ -68,5 +84,6 @@ PLATFORMS
68
84
  DEPENDENCIES
69
85
  bundler
70
86
  jeweler
87
+ pry
71
88
  rdoc
72
89
  shoulda
data/README.rdoc CHANGED
@@ -5,21 +5,34 @@ IText Pdf generation static java build packed to gem with some additional Ruby m
5
5
  == Usage
6
6
 
7
7
  === Instalation
8
- require 'itext-jruby'
8
+
9
+ gem install itext-jruby
9
10
 
10
11
  == Example
12
+
13
+ require 'itext-jruby'
11
14
 
12
- @source_pdf = File.expand_path('pdf_demo.pdf')
13
- @sample_image = File.expand_path('ja.jpg')
14
- @output_pdf = File.expand_path('out.pdf')
15
+ @source_pdf = File.expand_path('test/assets/sample.pdf')
16
+ @sample_image = File.expand_path('test/assets/pug.jpg')
17
+ @output_pdf = File.expand_path('output.pdf')
18
+ @cert_file = File.expand_path('test/assets/cert/ia.p12')
15
19
 
16
- @pdf_document = Itext.new(path: @path)
17
- @pdf_document.add_attachment @pathb
18
- @pdf_document.save(@out)
20
+ @pdf_document = Itext.new(path: @source_pdf)
21
+ @pdf_document.add_attachment @sample_image
22
+ @pdf_document.enable_signing!(private_key_path: @cert_file)
23
+ @pdf_document.save(@output_pdf)
19
24
 
20
25
  Find more examples in test directory.
21
26
 
22
27
 
28
+ == Changelog
29
+ * 0.0.6 - First stable version allowing adding attachments to PdfFile
30
+ * 0.0.7 - Add option to sign documents usign pkcs12 certificates
31
+
32
+ == Read more
33
+ * Creating pkcs12 certs: http://www.flatmtn.com/article/creating-pkcs12-certificates
34
+ * Converting .pem to .pcks: http://www.advogato.org/person/johnnyb/diary.html?start=143
35
+
23
36
  == Contributing to itext-jruby
24
37
 
25
38
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/itext-jruby.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "itext-jruby"
8
- s.version = "0.0.6"
8
+ s.version = "0.0.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ernest Bursa"]
12
- s.date = "2013-09-05"
12
+ s.date = "2013-10-09"
13
13
  s.description = "IText"
14
14
  s.email = "ernest@bzdury.pl"
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,8 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ ".ruby-gemset",
22
+ ".ruby-version",
21
23
  "Gemfile",
22
24
  "Gemfile.lock",
23
25
  "LICENSE.txt",
@@ -28,6 +30,7 @@ Gem::Specification.new do |s|
28
30
  "lib/itext-jruby.rb",
29
31
  "lib/itext.rb",
30
32
  "lib/itext/attachments.rb",
33
+ "lib/itext/signing.rb",
31
34
  "libexec/jar/bcmail-jdk14-138.jar",
32
35
  "libexec/jar/bcprov-jdk14-138.jar",
33
36
  "libexec/jar/bctsp-jdk14-138.jar",
@@ -44,6 +47,14 @@ Gem::Specification.new do |s|
44
47
  "libexec/jar/junit-4.4.jar",
45
48
  "libexec/jar/pdf-renderer.jar",
46
49
  "libexec/jar/servlet.jar",
50
+ "test/assets/cert/ca.crt",
51
+ "test/assets/cert/ca.key",
52
+ "test/assets/cert/ia.crt",
53
+ "test/assets/cert/ia.csr",
54
+ "test/assets/cert/ia.key",
55
+ "test/assets/cert/ia.p12",
56
+ "test/assets/pug.jpg",
57
+ "test/assets/sample.pdf",
47
58
  "test/helper.rb",
48
59
  "test/test_itext-jruby.rb"
49
60
  ]
@@ -61,17 +72,20 @@ Gem::Specification.new do |s|
61
72
  s.add_development_dependency(%q<rdoc>, [">= 0"])
62
73
  s.add_development_dependency(%q<bundler>, [">= 0"])
63
74
  s.add_development_dependency(%q<jeweler>, [">= 0"])
75
+ s.add_development_dependency(%q<pry>, [">= 0"])
64
76
  else
65
77
  s.add_dependency(%q<shoulda>, [">= 0"])
66
78
  s.add_dependency(%q<rdoc>, [">= 0"])
67
79
  s.add_dependency(%q<bundler>, [">= 0"])
68
80
  s.add_dependency(%q<jeweler>, [">= 0"])
81
+ s.add_dependency(%q<pry>, [">= 0"])
69
82
  end
70
83
  else
71
84
  s.add_dependency(%q<shoulda>, [">= 0"])
72
85
  s.add_dependency(%q<rdoc>, [">= 0"])
73
86
  s.add_dependency(%q<bundler>, [">= 0"])
74
87
  s.add_dependency(%q<jeweler>, [">= 0"])
88
+ s.add_dependency(%q<pry>, [">= 0"])
75
89
  end
76
90
  end
77
91
 
data/lib/itext.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  # encoding: utf-8
2
2
  require 'pathname'
3
+ require 'tempfile'
3
4
 
4
5
  class Itext
5
6
  require 'itext/attachments'
7
+ require 'itext/signing'
6
8
 
7
9
  include Attachments
10
+ include Signing
8
11
 
9
12
  # Create new Itext document instance
10
13
  # Required params:
@@ -19,7 +22,10 @@ class Itext
19
22
  raise ArgumentError.new('Please provide absolute path') unless Pathname.new(@path).absolute?
20
23
  end
21
24
 
22
- def save(save_to = nil)
25
+ # Saves file to given destination
26
+ # Usage: save(path, options = {})
27
+ # Allowed options: { sign_document: true }
28
+ def save(save_to = nil, opts = {})
23
29
  save_to ||= @path
24
30
 
25
31
  output_file = if File.exists?(@path)
@@ -30,7 +36,7 @@ class Itext
30
36
 
31
37
  @reader = Java::ComLowagieTextPdf::PdfReader.new(@path.to_java(:string))
32
38
  @buffer = Java::JavaIo::FileOutputStream.new output_file.path
33
- @stamper = Java::ComLowagieTextPdf::PdfStamper.new @reader, @buffer
39
+ @stamper = initialize_stamper
34
40
 
35
41
  # Run all attached hooks
36
42
  @hooks.each { |hook| hook.call }
@@ -48,6 +54,17 @@ class Itext
48
54
 
49
55
  protected
50
56
 
57
+ # Creates default stamper
58
+ def initialize_stamper
59
+ stamper = super rescue nil
60
+ if stamper
61
+ stamper
62
+ else
63
+ # Initialize default stamper
64
+ Java::ComLowagieTextPdf::PdfStamper.new @reader, @buffer
65
+ end
66
+ end
67
+
51
68
  def hooks
52
69
  @hooks || []
53
70
  end
@@ -4,6 +4,8 @@ module Itext::Attachments
4
4
  def initialize(*args, &block)
5
5
  @hooks ||= []
6
6
  @hooks.push ->{ process_attachments }
7
+
8
+ super rescue nil
7
9
  end
8
10
 
9
11
  def self.included(base)
@@ -44,23 +46,25 @@ module Itext::Attachments
44
46
  def process_attachments
45
47
  @writer = @stamper.getWriter.to_java(Java::ComLowagieTextPdf::PdfWriter)
46
48
 
47
- @attachments.each do |attachment|
48
- if attachment.is_a?(Hash)
49
- attachment_path = attachment[:path]
50
- attachment_name = attachment[:file_name]
51
- elsif attachment.is_a?(String)
52
- attachment_path = attachment
53
- attachment_name = Pathname.new(attachment_path).basename
54
- else
55
- raise ArgumentError.new("Specify hash with :path and :file_name or string with path")
56
- end
49
+ if @attachments && @attachments.size > 0
50
+ @attachments.each do |attachment|
51
+ if attachment.is_a?(Hash)
52
+ attachment_path = attachment[:path]
53
+ attachment_name = attachment[:file_name]
54
+ elsif attachment.is_a?(String)
55
+ attachment_path = attachment.to_s
56
+ attachment_name = Pathname.new(attachment_path).basename.to_s
57
+ else
58
+ raise ArgumentError.new("Specify hash with :path and :file_name or string with path")
59
+ end
57
60
 
58
- attachment_spec = Java::ComLowagieTextPdf::PdfFileSpecification.fileEmbedded @writer,
59
- attachment_path.to_s.to_java_string,
60
- attachment_name.to_s.to_java_string,
61
- nil
62
- attachment_spec.addDescription attachment_name, false.to_java(:boolean)
63
- @stamper.addFileAttachment attachment_name, attachment_spec
61
+ attachment_spec = Java::ComLowagieTextPdf::PdfFileSpecification.fileEmbedded @writer,
62
+ attachment_path.to_java_string,
63
+ attachment_name.to_java_string,
64
+ nil
65
+ attachment_spec.addDescription attachment_name, false.to_java(:boolean)
66
+ @stamper.addFileAttachment attachment_name, attachment_spec
67
+ end
64
68
  end
65
69
 
66
70
  # @writer.close
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+ # This module will allow you signing PDF document with certificate
3
+ module Itext::Signing
4
+
5
+ require 'java'
6
+ java_import 'java.security.KeyStore'
7
+ java_import 'java.security.KeyStoreException'
8
+ java_import 'java.security.NoSuchAlgorithmException'
9
+ java_import 'java.security.NoSuchProviderException'
10
+ java_import 'java.security.PrivateKey'
11
+ java_import 'java.security.UnrecoverableKeyException'
12
+ java_import 'java.security.cert.Certificate'
13
+ java_import 'java.security.cert.CertificateException'
14
+
15
+ # Add processing hook
16
+ def initialize(*args, &block)
17
+ @hooks ||= []
18
+ @hooks.push ->{ process_signing }
19
+
20
+ super rescue nil
21
+ end
22
+
23
+ # Hook with some initalization
24
+ def self.included(base)
25
+ base.extend(ClassMethods)
26
+
27
+ attr_reader :private_key_path
28
+ attr_reader :password
29
+ end
30
+
31
+ # Enable document signing
32
+ # Required options: { private_key_path: '/path/key' }
33
+ # Optional options: { password: '' }
34
+ def enable_signing!(opts = {})
35
+ raise ArgumentError, "Please provide :private_key_path" unless opts[:private_key_path]
36
+
37
+ @private_key_path = opts[:private_key_path]
38
+ @password = opts[:password].to_s.to_java.toCharArray
39
+
40
+ @keystore = Java::JavaSecurity::KeyStore.getInstance('pkcs12')
41
+ @keystore.load(Java::JavaIo::FileInputStream.new(@private_key_path), @password)
42
+
43
+ keystore_alias = @keystore.aliases().nextElement()
44
+ @private_key = @keystore.getKey(keystore_alias, @password).to_java(Java::JavaSecurity::PrivateKey)
45
+ @cert_chain = @keystore.getCertificateChain(keystore_alias)
46
+ end
47
+
48
+ # Check if signing file should be done
49
+ def sign_file?
50
+ @private_key_path && File.exists?(@private_key_path)
51
+ end
52
+
53
+ # Change default behavior of stamper if using signing
54
+ def initialize_stamper
55
+ Java::ComLowagieTextPdf::PdfStamper.createSignature(@reader, @buffer, 0x00.to_java(Java::JavaLang::Character)) if sign_file?
56
+ end
57
+
58
+ # Process signing using IText
59
+ def process_signing
60
+ if sign_file?
61
+ @appearance = @stamper.getSignatureAppearance().to_java(Java::ComLowagieTextPdf::PdfSignatureAppearance)
62
+ @appearance.setCrypto(@private_key, @cert_chain, nil, Java::ComLowagieTextPdf::PdfSignatureAppearance::WINCER_SIGNED)
63
+ end
64
+ end
65
+
66
+ protected :process_signing
67
+
68
+ module ClassMethods
69
+
70
+ end
71
+
72
+ end
@@ -0,0 +1,37 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
37
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,29 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIIE7TCCAtUCAQAwgY8xCzAJBgNVBAYTAkFVMRUwEwYDVQQIEwxXaWVsa29wb2xz
3
+ a2ExDzANBgNVBAcTBlBvem5hbjEZMBcGA1UEChMQU2Vjb25kIEJ1cnNhIExURDEL
4
+ MAkGA1UECxMCSVQxDzANBgNVBAMTBkVybmVzdDEfMB0GCSqGSIb3DQEJARYQZXJu
5
+ ZXN0QGJ6ZHVyeS5wbDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALqn
6
+ 2Fhg91LnBDs1wGnpMOVPV1+tGL0esun+2g4LJqpBiLH5iLPhuvsWq79J2QpCEBDA
7
+ 3qJRehFZnPBz5XWq44YyP0UFz2US1oj8QLkMob4OEMR6q0k4Iv+o97b4JdBeKyB9
8
+ MOgUHe6miMdQ2spQg47XLPhYVG5b/sOkA1gIbRhTQFFPZEMIPp1YScK7P3drCouV
9
+ ExIDAkUxpJYfVKNp9lT/U8Zjh0wz6hCtUp0KMkZWiZrBqs5XD5HXQWk1BqI68UqA
10
+ d75V8ZOO/GVkst/jyVKhkVXsfVsp2X+YUxmRk4a61h/wkaaNYJvNtJqBKsUy51+P
11
+ qiLHTp3njetfpCB2ip0xD6iQf95VTS0cCT+Q+IY0MQohWmftrH1u5z9Dnbly0JD7
12
+ Lm1lNveVZ5J+zPP4D0uNycPZLF+j0+v0CQOJYhzFvDzKJB5NfXyvObuw0yK7Ng0u
13
+ ngGqxAgnj4lEQd1DAdvlODsRI+ocVOeP4JoNFfiebIFXIZluTokWJO/is5OyItMF
14
+ fPC7jJTwxYGq8p1BOvrONykHyFxmdKtY+mFDb4nBXgGxpoWWjPhTzQDlmRP0oCe4
15
+ G+KQzC8J03WwkFSr3ApLJL1DvoBNkRxQjxE/NXNcKodD99/h8X3sAZH4v9MQzG4X
16
+ NIz9O9OTP5mGkuUCKNhQYIMTPlrw7XKhrBONCyKFAgMBAAGgGDAWBgkqhkiG9w0B
17
+ CQcxCRMHdGVzdDEyMzANBgkqhkiG9w0BAQUFAAOCAgEAh7uRJjl96LFfbNCfAkSr
18
+ 41jh0c0L+XtXOTCB9VmmCY3zlu5Z/RZTXpiUJD5C4YGu1NfjFaBC/wYvRA05u537
19
+ 5Qdt/Vvu7l121vTIO+lRBYU+L+LRdCGziSfEulXJ5hPIlR4pJgTU2D+zqCIXyMza
20
+ w0C/AEhnWuakHm4ZxOjXJ4n4U07kbtcAtZgxGaypPq6nZh0sGQ5yxJ3+zdv6aakm
21
+ AlB8n4edD42mbo1LRQNqMYTMSZQjP2OQunPT0k8Tj5n5hqiXC8RW4g+PXPUfqrzi
22
+ O9x7JPrg2TpNMGBYoTGFbYAbYvUzCHlpliM9AbDtNiw+iaoAsRmB0w5U0hYyHxkx
23
+ 5pi03l8FERBVuj1S9nM/OuegBDGgT15ceXcPyfPCWLXAtn3tTsYcKX0nP1HUv0by
24
+ 0x7nC3yVe/llXs+C7obqW/lc5W6JKDEHGA+CPOt0ckphPjA/BfY/dvZVxHP/4L5d
25
+ y3oBIxGROWTvUD5QDX9PDg6GFVM8/oWa7w/IA0XjPc30I3lV1fS59MpdS4oDK2KF
26
+ z6C89MuRXQB6nRrsLLZsmdiUnS1WijZjD52GQ9k1u0Srvwzz6X7eEkhNJ1/zDUvJ
27
+ bQptpRVlfV4xgdpT569apCDpgZgfkSEnCTK8s7s1xb/EExaQnfMxyLRVAekBPBDq
28
+ lCx2NF68dKr6PQhoxRoPRKU=
29
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIJKAIBAAKCAgEAuqfYWGD3UucEOzXAaekw5U9XX60YvR6y6f7aDgsmqkGIsfmI
3
+ s+G6+xarv0nZCkIQEMDeolF6EVmc8HPldarjhjI/RQXPZRLWiPxAuQyhvg4QxHqr
4
+ STgi/6j3tvgl0F4rIH0w6BQd7qaIx1DaylCDjtcs+FhUblv+w6QDWAhtGFNAUU9k
5
+ Qwg+nVhJwrs/d2sKi5UTEgMCRTGklh9Uo2n2VP9TxmOHTDPqEK1SnQoyRlaJmsGq
6
+ zlcPkddBaTUGojrxSoB3vlXxk478ZWSy3+PJUqGRVex9WynZf5hTGZGThrrWH/CR
7
+ po1gm820moEqxTLnX4+qIsdOneeN61+kIHaKnTEPqJB/3lVNLRwJP5D4hjQxCiFa
8
+ Z+2sfW7nP0OduXLQkPsubWU295Vnkn7M8/gPS43Jw9ksX6PT6/QJA4liHMW8PMok
9
+ Hk19fK85u7DTIrs2DS6eAarECCePiURB3UMB2+U4OxEj6hxU54/gmg0V+J5sgVch
10
+ mW5OiRYk7+Kzk7Ii0wV88LuMlPDFgarynUE6+s43KQfIXGZ0q1j6YUNvicFeAbGm
11
+ hZaM+FPNAOWZE/SgJ7gb4pDMLwnTdbCQVKvcCkskvUO+gE2RHFCPET81c1wqh0P3
12
+ 3+HxfewBkfi/0xDMbhc0jP0705M/mYaS5QIo2FBggxM+WvDtcqGsE40LIoUCAwEA
13
+ AQKCAgBj5Z7ZNhRIL1HJaqwvQtmjcII/t4GM/hgdOgN0Dq3D400Ii5eJRl9vMKP8
14
+ vcZGQjMc9ExzLQ4aqQ5gdnaxMiORV+UayNBFtP5S1EbDgyoxcI+yyEBR8JRypfjl
15
+ 2QtL6IpGWhpJqzKV3lVH71MZglvWn/z2cTfG1L+V73rGq8PPiAbdPZNYeNoiFfVs
16
+ HhEKlaRQLhnFwwx9AeOnYN9IklZ/CSPKAsyPkR1NjaWwXJupn3kH9Wy4AEpZ8I2W
17
+ hAWn38nx6K2tlYu0QIt+rJU7VEsUSVpiVS6GEvDP5DNddNcy/V3KPFOHgxTYbhCh
18
+ vE2quuKv91DESk0eH6aJ+Wb65Nar/LfxsKhNbbtIC7KHNzkOGE2xm647I3Mv3EWv
19
+ sla230b1J2GdFPS+8qkQmocG7HBRyKuDNEdiCegb7Puj2QwCq8gr0mbOUfLU4vwG
20
+ nmM+GPrOL2a3YwixqeQds5MP+co+7BHoM2Dec3JrN2QiiBetaJho3IaEqoWtoekq
21
+ es/uLRpKsjjYY4i+d7aUvCvBUtknVYUDX5hVEOoierjFZWaDBDJBdhHLS9zR7qK+
22
+ yQsh278tIaMuoJbuhxnIVMCDvP3yQkG2ETJazMn8DPxsvYpcX7yMy6HRddDrneez
23
+ E484svnFlMqPgcb/c9ByjIcTj0JEhJMQewI6Y2AwzB/rrY3CYQKCAQEA9sXPwhda
24
+ y/4opoX0To5VuFd4WhiqhQNyi/nGfxaZc5ykiW0Vrwjoel+J+ziQIwCdye3vUboN
25
+ pdRGu24/ouGDM/tnnvnzzRap4CZWEnU0BpmjKbujuCwetysUpc9sXlFhByEgxIbQ
26
+ /wxnsqDVN4dZ1pjIJnvog7ZwKl9x8IL4VcIHIFIm8CDXURB4Rp35CQavFMqt/xx1
27
+ GD2Jx5fkXuzwwPunR+Jh/+fRl0adEw6XCUpwAypKak2AEF5YVXcItFr4havwsjSC
28
+ DPErMOVBVDR/szB/x7JsKtAsHcxQ4kb1X/ZMIix8UgxaGKX3F2Rds4XS0XIoV7nL
29
+ hduM78rGFuEVjQKCAQEAwaKS1GwiIN3+Adb5PTObmJnNRFH87ImEdOWENjdBHkKC
30
+ rV1vdRAKViwWLhYElr1ex3oHfWCgRJ6GBqnAJrPHsOXRXKFemeFPgBNr9yYOyeqc
31
+ UeDdcTPSCQmzKc1C5fjp759yXrTdHgG4O6tLCGIjfWdx1OaGB3ypHbP1MQVa7ZxG
32
+ TAmgRRS9qDH1AFXqRlw0Fh0wW2Oig5Ti+6pv4psafSjsMaUf2MUe8gift3auHs38
33
+ TuJtAn5tXABkPmMW+3R99S0Q5E13LOQL9gVlyAVEE2nTdZiKA/A2CvAQL1nd4uqU
34
+ UqSVF8VhNlgL1ZAF8Ys44wF/lTO5jmQhPCISfCzW2QKCAQEA9l6re2WBuuP2hbp7
35
+ HOqx3idF+v1hUQcOF325lSxk663Z/3IvEd9c6r/zrCLelHOLFQ09v2R3N7ZlH7+E
36
+ PQPUz9MRswBtTbZwx16+1BK7bFN7OLEjVT6HM+wI4znhQZERw+JpKoxGoDwsU4SL
37
+ GrNBGCTUvsc6bjV4anV79dlsQYJDRxt90IOZNE+zJR2WglJv/dwUNvycUyUtJ14Y
38
+ HEWGX8VfTz9PBATXlaZkL6CDXj0485AHV3YkgzMOEdWTlSy1rg7pcaFGrdEhg+F+
39
+ hakcTTQAfsk9gMjxIpbXsfGSDMqDXCL5w5idYrpfpLUJb7ANuBm2+U5/SRbW8JiL
40
+ iFAUCQKCAQB2mOhtir1sfAszfUOypIVMdgcvLThIeAHUxy6vNjCAJCR9opi9jlGG
41
+ bgI3v+yXlu0SKD+mHySKYr2cHyQ9kCdixZ/xqDSU81cKDts1yO2N5lBQJfX7e83N
42
+ E0/U7o9m44oE5hfawdQcqNj6UvPl8pXiHRWvXHIC6+t48dvfZnRGzEySDeNH7Ggt
43
+ OEvjJLwU1CxizwXrM586EFrl4YIdvPoAZqwjzAsxbaqCe523dM04uNksR6qUuHKq
44
+ wuKjA3X0FWmAXVXXP0sbB6H70VqBpBgJ++s0P3Vo7Bttn5OKLPSmIx8tbviSUqYz
45
+ 7sFw0IGTa74v658E92VTPSjN9+ByhdQhAoIBAGqk/6yO4NnQBYLXsjqH+5qEl9Gq
46
+ uNXT3t6yQDPxMnBKz77+VAE9XkLWeQvi4+gZz9DHEecIuCrs2teQpjRnsvBJyYDH
47
+ TVFxkUhs0KfRP4oV/g0fXlHgJOt1YPIYnDCZfYL6rbbFjL/HlnSk9s4t4unsTV5w
48
+ BVYakvOagw9G4XF6MnWTrsMy9Rs9CVTi3R0bzoVTRGd+zUnC8Vy0puMYEpjuN7h5
49
+ LYY56KSqJX+hDiThZoR/Kl+ZpDb6acfxKQNsLYvlNPbGkPD/JiMl6ueJoWML8Hkf
50
+ Z9zpqaByQyeVmiaI+Ynb1sLwtnyAAbU0MuQcM5ibs9g2ZeW+xI2Y3BaVG5g=
51
+ -----END RSA PRIVATE KEY-----
Binary file
Binary file
Binary file
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: itext-jruby
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.6
5
+ version: 0.0.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ernest Bursa
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-05 00:00:00.000000000 Z
12
+ date: 2013-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
@@ -75,6 +75,22 @@ dependencies:
75
75
  none: false
76
76
  prerelease: false
77
77
  type: :development
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ none: false
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ none: false
92
+ prerelease: false
93
+ type: :development
78
94
  description: IText
79
95
  email: ernest@bzdury.pl
80
96
  executables: []
@@ -84,6 +100,8 @@ extra_rdoc_files:
84
100
  - README.rdoc
85
101
  files:
86
102
  - .document
103
+ - .ruby-gemset
104
+ - .ruby-version
87
105
  - Gemfile
88
106
  - Gemfile.lock
89
107
  - LICENSE.txt
@@ -94,6 +112,7 @@ files:
94
112
  - lib/itext-jruby.rb
95
113
  - lib/itext.rb
96
114
  - lib/itext/attachments.rb
115
+ - lib/itext/signing.rb
97
116
  - libexec/jar/bcmail-jdk14-138.jar
98
117
  - libexec/jar/bcprov-jdk14-138.jar
99
118
  - libexec/jar/bctsp-jdk14-138.jar
@@ -110,6 +129,14 @@ files:
110
129
  - libexec/jar/junit-4.4.jar
111
130
  - libexec/jar/pdf-renderer.jar
112
131
  - libexec/jar/servlet.jar
132
+ - test/assets/cert/ca.crt
133
+ - test/assets/cert/ca.key
134
+ - test/assets/cert/ia.crt
135
+ - test/assets/cert/ia.csr
136
+ - test/assets/cert/ia.key
137
+ - test/assets/cert/ia.p12
138
+ - test/assets/pug.jpg
139
+ - test/assets/sample.pdf
113
140
  - test/helper.rb
114
141
  - test/test_itext-jruby.rb
115
142
  homepage: http://github.com/swistaczek/itext-jruby