Class PDF::Writer::Object::Encryption
In: lib/pdf/writer/object/encryption.rb
Parent: PDF::Writer::Object
Transaction::Simple SimpleTable TechBook Complex Action Procset FontDescriptor FontEncoding Destination Info Catalog Encryption Contents Pages Outline Outlines Annotation Page Font ViewerPreferences Image Hash OHash QuickRef FontMetrics ARC4 StrokeStyle PolygonPoint ImageInfo StdDev lib/pdf/simpletable.rb lib/pdf/techbook.rb lib/pdf/writer.rb lib/pdf/quickref.rb Math lib/pdf/writer/fontmetrics.rb lib/pdf/writer/ohash.rb lib/pdf/writer/arc4.rb lib/pdf/writer/strokestyle.rb lib/pdf/writer/graphics.rb lib/pdf/writer/object.rb lib/pdf/writer/object/image.rb External EN Lang OffsetReader lib/pdf/writer/graphics/imageinfo.rb Graphics lib/pdf/writer/object/outlines.rb lib/pdf/writer/object/destination.rb lib/pdf/writer/object/viewerpreferences.rb lib/pdf/writer/object/fontencoding.rb lib/pdf/writer/object/page.rb lib/pdf/writer/object/contents.rb lib/pdf/writer/object/procset.rb lib/pdf/writer/object/pages.rb lib/pdf/writer/object/info.rb lib/pdf/writer/object/encryption.rb lib/pdf/writer/object/catalog.rb lib/pdf/writer/object/outline.rb lib/pdf/writer/object/fontdescriptor.rb lib/pdf/writer/object/action.rb lib/pdf/writer/object/font.rb lib/pdf/writer/object/annotation.rb Object Writer lib/pdf/charts/stddev.rb Charts PDF dot/m_33_0.png

Encryption object

Methods

new   to_s  

Constants

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*")

Public Class methods

[Source]

    # 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

Public Instance methods

[Source]

    # 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

[Validate]