| Class | PDF::Writer::Object::Encryption |
| In: |
lib/pdf/writer/object/encryption.rb
|
| Parent: | PDF::Writer::Object |
Encryption object
| PAD | = | [ 0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A ].pack("C*") |
# File lib/pdf/writer/object/encryption.rb, line 18
18: def initialize(parent, options)
19: super(parent)
20:
21: @parent.encrypt_obj = self
22:
23: # Figure out the additional parameters required.
24: @owner = "#{options[:owner_pass]}#{PAD}"[0...32]
25: @user = "#{options[:user_pass]}#{PAD}"[0...32]
26: @perms = options[:permissions]
27:
28: @parent.arc4.prepare(Digest::MD5.hexdigest(@owner)[0...5])
29:
30: # Get the 'O' value.
31: @owner_info = ARC4.encrypt(@user)
32: # Get the 'U' value.
33: ukey = @user.dup
34: ukey << @owner_info
35: ukey << [ @perms, 0xFF, 0xFF, 0xFF ].pack("C*")
36: ukey << @parent.file_identifier
37: @parent.encryption_key = Digest::MD5.hexdigest(ukey)[0...5]
38:
39: @parent.arc4.prepare(@parent.encryption_key)
40:
41: @user_info = @parent.arc4.encrypt(PAD)
42: end
# File lib/pdf/writer/object/encryption.rb, line 44
44: def to_s
45: res = "\n#{@oid} 0 obj\n<<\n/Filter /Standard\n"
46: res << "/V 1\n/R 2\n"
47: res << "/O (#{PDF::Writer.escape(@owner_info)})\n"
48: res << "/U (#{PDF::Writer.escape(@user_info)})\n"
49: res << "/P #{(((@perms ^ 255) + 1) * -1)}\n"
50: res << ">>\nendobj\n"
51: res
52: end