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