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