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
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 |