25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/pdf/reader/security_handler_factory.rb', line 25
def self.build_standard_handler(encrypt, doc_id, password)
encmeta = !encrypt.has_key?(:EncryptMetadata) || encrypt[:EncryptMetadata].to_s == "true"
key_builder = StandardKeyBuilder.new(
key_length: (encrypt[:Length] || 40).to_i,
revision: encrypt[:R],
owner_key: encrypt[:O],
user_key: encrypt[:U],
permissions: encrypt[:P].to_i,
encrypted_metadata: encmeta,
file_id: doc_id.first,
)
cfm = encrypt.fetch(:CF, {}).fetch(encrypt[:StmF], {}).fetch(:CFM, nil)
if cfm == :AESV2
AesV2SecurityHandler.new(key_builder.key(password))
else
Rc4SecurityHandler.new(key_builder.key(password))
end
end
|