Module: Pdfrb::Encryption::ValueStrings
- Defined in:
- lib/pdfrb/encryption/value_strings.rb
Overview
The COS value-tree string walk, shared by both directions of the encryption seam: the Serializer encrypts every literal string an indirect object carries (building transformed copies), and the ObjectReader decrypts them back (mutating the freshly-parsed containers in place). One walk, two adapters — keeps the string set and traversal rules from drifting.
Class Method Summary collapse
-
.decrypt!(value, oid, gen, cipher) ⇒ Object
Replaces every literal string inside the freshly-parsed
value(a Hash/Array container tree) with its decrypted form, in place. -
.encrypt(value, oid, gen, cipher) ⇒ Object
A transformed copy of
valuewith every literal string replaced by the block's result.
Class Method Details
.decrypt!(value, oid, gen, cipher) ⇒ Object
Replaces every literal string inside the freshly-parsed
value (a Hash/Array container tree) with its decrypted
form, in place. Returns value.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/pdfrb/encryption/value_strings.rb', line 42 def decrypt!(value, oid, gen, cipher) case value when ::Hash value.each { |k, v| value[k] = decrypt!(v, oid, gen, cipher) } when ::Array value.map! { |v| decrypt!(v, oid, gen, cipher) } when Pdfrb::Model::PdfArray value.value.map! { |v| decrypt!(v, oid, gen, cipher) } value when ::String cipher.decrypt_string(value, oid, gen) else value end end |
.encrypt(value, oid, gen, cipher) ⇒ Object
Returns a transformed copy of value with every
literal string replaced by the block's result.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pdfrb/encryption/value_strings.rb', line 16 def encrypt(value, oid, gen, cipher) case value when ::Hash value.each_with_object({}) { |(k, v), h| h[k] = encrypt(v, oid, gen, cipher) } when ::Array value.map { |v| encrypt(v, oid, gen, cipher) } when Pdfrb::Model::PdfArray Pdfrb::Model::PdfArray.new(value.map { |v| encrypt(v, oid, gen, cipher) }) when Pdfrb::Model::Object Pdfrb::Model::Object.new(encrypt(value.value, oid, gen, cipher), oid: value.oid, gen: value.gen) when ::String bytes = if value.encoding == Encoding::UTF_8 Pdfrb::Model::Cos::StringEncoding.encode_text(value) else value.dup.force_encoding(Encoding::BINARY) end cipher.encrypt_string(bytes, oid, gen) else value end end |