PoDoFo  0.9.1
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
PoDoFo::PdfEncrypt Class Reference

#include <PdfEncrypt.h>

Inherited by PoDoFo::PdfEncryptMD5Base.

List of all members.

Public Types

enum  EPdfKeyLength
enum  EPdfPermissions {
  ePdfPermissions_Print = 0x00000004, ePdfPermissions_Edit = 0x00000008, ePdfPermissions_Copy = 0x00000010, ePdfPermissions_EditNotes = 0x00000020,
  ePdfPermissions_FillAndSign = 0x00000100, ePdfPermissions_Accessible = 0x00000200, ePdfPermissions_DocAssembly = 0x00000400, ePdfPermissions_HighPrint = 0x00000800
}
enum  EPdfEncryptAlgorithm { ePdfEncryptAlgorithm_RC4V1 = 1, ePdfEncryptAlgorithm_RC4V2 = 2, ePdfEncryptAlgorithm_AESV2 = 4 }

Public Member Functions

virtual ~PdfEncrypt ()=0
virtual void GenerateEncryptionKey (const PdfString &documentId)=0
virtual void CreateEncryptionDictionary (PdfDictionary &rDictionary) const =0
virtual PdfOutputStreamCreateEncryptionOutputStream (PdfOutputStream *pOutputStream)=0
virtual PdfInputStreamCreateEncryptionInputStream (PdfInputStream *pInputStream)=0
virtual bool Authenticate (const std::string &password, const PdfString &documentId)=0
EPdfEncryptAlgorithm GetEncryptAlgorithm () const
bool IsPrintAllowed () const
bool IsEditAllowed () const
bool IsCopyAllowed () const
bool IsEditNotesAllowed () const
bool IsFillAndSignAllowed () const
bool IsAccessibilityAllowed () const
bool IsDocAssemblyAllowed () const
bool IsHighPrintAllowed () const
const unsigned char * GetUValue () const
 Get the U object value (user)
const unsigned char * GetOValue () const
 Get the O object value (owner)
const unsigned char * GetEncryptionKey () const
 Get the encryption key value (owner)
pdf_int32 GetPValue () const
 Get the P object value (protection)
int GetRevision () const
 Get the revision number of the encryption method.
int GetKeyLength () const
 Get the key length of the encryption key in bits.
virtual void Encrypt (const unsigned char *inStr, pdf_long inLen, unsigned char *outStr, pdf_long outLen) const =0
 Encrypt a wxString.
virtual void Decrypt (const unsigned char *inStr, pdf_long inLen, unsigned char *outStr, pdf_long outLen) const =0
 Decrypt a character string.
virtual pdf_long CalculateStreamLength (pdf_long length) const =0
 Calculate stream size.
virtual pdf_long CalculateStreamOffset () const =0
 Calculate stream offset.
void SetCurrentReference (const PdfReference &rRef)

Static Public Member Functions

static PdfEncryptCreatePdfEncrypt (const std::string &userPassword, const std::string &ownerPassword, int protection=ePdfPermissions_Print|ePdfPermissions_Edit|ePdfPermissions_Copy|ePdfPermissions_EditNotes|ePdfPermissions_FillAndSign|ePdfPermissions_Accessible|ePdfPermissions_DocAssembly|ePdfPermissions_HighPrint, EPdfEncryptAlgorithm eAlgorithm=ePdfEncryptAlgorithm_RC4V1, EPdfKeyLength eKeyLength=ePdfKeyLength_40)
static PdfEncryptCreatePdfEncrypt (const PdfObject *pObject)
static PdfEncryptCreatePdfEncrypt (const PdfEncrypt &rhs)
static int GetEnabledEncryptionAlgorithms ()
static void SetEnabledEncryptionAlgorithms (int nEncryptionAlgorithms)
static bool IsEncryptionEnabled (EPdfEncryptAlgorithm eAlgorithm)

Protected Member Functions

bool CheckKey (unsigned char key1[32], unsigned char key2[32])
 Check two keys for equality.

Protected Attributes

EPdfEncryptAlgorithm m_eAlgorithm
 The used encryption algorithm.
int m_keyLength
 Length of encryption key.
int m_rValue
 Revision.
pdf_int32 m_pValue
 P entry in pdf document.
EPdfKeyLength m_eKeyLength
 The key length.
std::string m_userPass
 User password.
std::string m_ownerPass
 Owner password.
unsigned char m_uValue [48]
 U entry in pdf document.
unsigned char m_oValue [48]
 O entry in pdf document.
unsigned char m_encryptionKey [32]
 Encryption key.
PdfReference m_curReference
 Reference of the current PdfObject.
std::string m_documentId
 DocumentID of the current document.

Detailed Description

Class representing PDF encryption methods. (For internal use only) Based on code from Ulrich Telle: http://wxcode.sourceforge.net/components/wxpdfdoc/ Original Copyright header: A class that is used to encrypt a PDF file and set document permisions on the PDF file.

As a user of this class, you have only to instanciate a object of this class and pass it to PdfWriter, PdfMemDocument, PdfStreamedDocument or PdfImmediateWriter. You do not have to call any other method of this class. The above classes know how to handle encryption using Pdfencrypt.


Member Enumeration Documentation

The encryption algorithm.

Enumerator:
ePdfEncryptAlgorithm_RC4V1 

RC4 Version 1 encryption using a 40bit key.

ePdfEncryptAlgorithm_RC4V2 

RC4 Version 2 encryption using a key with 40-128bit.

ePdfEncryptAlgorithm_AESV2 

AES encryption with a 128 bit key (PDF1.6)

A enum specifying a valid keylength for a PDF encryption key. Keys must be in the range 40 to 128 bit and have to be a multiple of 8.

Adobe Reader supports only keys with 40, 128 or 256 bits!

Set user permissions/restrictions on a document

Enumerator:
ePdfPermissions_Print 

Allow printing the document.

ePdfPermissions_Edit 

Allow modifying the document besides annotations, form fields or chaning pages.

ePdfPermissions_Copy 

Allow text and graphic extraction.

ePdfPermissions_EditNotes 

Add or modify text annoations or form fields (if ePdfPermissions_Edit is set also allow to create interactive form fields including signature)

ePdfPermissions_FillAndSign 

Fill in existing form or signature fields.

ePdfPermissions_Accessible 

Extract text and graphics to support user with disabillities.

ePdfPermissions_DocAssembly 

Assemble the document: insert, create, rotate delete pages or add bookmarks.

ePdfPermissions_HighPrint 

Print a high resolution version of the document.


Constructor & Destructor Documentation

PoDoFo::PdfEncrypt::~PdfEncrypt ( ) [pure virtual]

Destruct the PdfEncrypt object


Member Function Documentation

virtual bool PoDoFo::PdfEncrypt::Authenticate ( const std::string &  password,
const PdfString documentId 
) [pure virtual]

Tries to authenticate a user using either the user or owner password

Parameters:
passwordowner or user password
documentIdthe documentId of the PDF file
Returns:
true if either the owner or user password matches password

Implemented in PoDoFo::PdfEncryptRC4, and PoDoFo::PdfEncryptAESV2.

virtual void PoDoFo::PdfEncrypt::CreateEncryptionDictionary ( PdfDictionary &  rDictionary) const [pure virtual]

Fill all keys into a encryption dictionary. This dictionary is usually added to the PDF files trailer under the /Encryption key.

Parameters:
rDictionaryan empty dictionary which is filled with information about the used encryption algorithm
virtual PdfInputStream* PoDoFo::PdfEncrypt::CreateEncryptionInputStream ( PdfInputStream pInputStream) [pure virtual]

Create a PdfInputStream that decrypts all data read from it using the current settings of the PdfEncrypt object.

Warning: Currently only RC4 based encryption is supported using output streams!

Parameters:
pInputStreamthe created PdfInputStream reads all decrypted data to this input stream.
Returns:
a PdfInputStream that decrypts all data.

Implemented in PoDoFo::PdfEncryptRC4, and PoDoFo::PdfEncryptAESV2.

virtual PdfOutputStream* PoDoFo::PdfEncrypt::CreateEncryptionOutputStream ( PdfOutputStream pOutputStream) [pure virtual]

Create a PdfOutputStream that encrypts all data written to it using the current settings of the PdfEncrypt object.

Warning: Currently only RC4 based encryption is supported using output streams!

Parameters:
pOutputStreamthe created PdfOutputStream writes all encrypted data to this output stream.
Returns:
a PdfOutputStream that encryts all data.

Implemented in PoDoFo::PdfEncryptRC4, and PoDoFo::PdfEncryptAESV2.

PdfEncrypt * PoDoFo::PdfEncrypt::CreatePdfEncrypt ( const std::string &  userPassword,
const std::string &  ownerPassword,
int  protection = ePdfPermissions_Print | ePdfPermissions_Edit | ePdfPermissions_Copy | ePdfPermissions_EditNotes | ePdfPermissions_FillAndSign | ePdfPermissions_Accessible | ePdfPermissions_DocAssembly | ePdfPermissions_HighPrint,
EPdfEncryptAlgorithm  eAlgorithm = ePdfEncryptAlgorithm_RC4V1,
EPdfKeyLength  eKeyLength = ePdfKeyLength_40 
) [static]

Create a PdfEncrypt object which can be used to encrypt a PDF file.

Parameters:
userPasswordthe user password (if empty the user does not have to enter a password to open the document)
ownerPasswordthe owner password
protectionseveral EPdfPermissions values or'ed together to set the users permissions for this document
eAlgorithmthe revision of the encryption algorithm to be used
eKeyLengththe length of the encryption key ranging from 40 to 128 bits (only used if eAlgorithm == ePdfEncryptAlgorithm_RC4V2)
See also:
GenerateEncryptionKey with the documentID to generate the real encryption key using this information
PdfEncrypt * PoDoFo::PdfEncrypt::CreatePdfEncrypt ( const PdfObject pObject) [static]

Initialize a PdfEncrypt object from an encryption dictionary in a PDF file.

This is required for encrypting a PDF file, but handled internally in PdfParser for you.

Will use only encrypting algorithms that are enabled.

Parameters:
pObjecta PDF encryption dictionary
See also:
GetEnabledEncryptionAlgorithms
PdfEncrypt * PoDoFo::PdfEncrypt::CreatePdfEncrypt ( const PdfEncrypt rhs) [static]

Copy constructor

Parameters:
rhsanother PdfEncrypt object which is copied
virtual void PoDoFo::PdfEncrypt::Encrypt ( const unsigned char *  inStr,
pdf_long  inLen,
unsigned char *  outStr,
pdf_long  outLen 
) const [pure virtual]

Encrypt a wxString.

Encrypt a character string

Implemented in PoDoFo::PdfEncryptRC4, and PoDoFo::PdfEncryptAESV2.

virtual void PoDoFo::PdfEncrypt::GenerateEncryptionKey ( const PdfString documentId) [pure virtual]

Generate encryption key from user and owner passwords and protection key

Parameters:
documentIdthe documentId of the current document

Implemented in PoDoFo::PdfEncryptRC4, and PoDoFo::PdfEncryptAESV2.

int PoDoFo::PdfEncrypt::GetEnabledEncryptionAlgorithms ( ) [static]

Retrieve the list of encryption algorithms that are used when loading a PDF document.

By default all alogrithms are enabled.

See also:
IsEncryptionEnabled
SetEnabledEncryptionAlgorithms
Returns:
an or'ed together list of all enabled encryption algorithms
PdfEncrypt::EPdfEncryptAlgorithm PoDoFo::PdfEncrypt::GetEncryptAlgorithm ( ) const [inline]

Get the encryption algorithm of this object.

Returns:
the EPdfEncryptAlgorithm of this object
bool PoDoFo::PdfEncrypt::IsAccessibilityAllowed ( ) const [inline]

Checks if it is allowed to extract text and graphics to support users with disabillities Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to extract text and graphics to support users with disabillities
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsCopyAllowed ( ) const [inline]

Checks if text and graphics extraction is allowed. Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to extract text and graphics from this document
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsDocAssemblyAllowed ( ) const [inline]

Checks if it is allowed to insert, create, rotate, delete pages or add bookmarks Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to insert, create, rotate, delete pages or add bookmarks
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsEditAllowed ( ) const [inline]

Checks if modifiying this document (besides annotations, form fields or changing pages) is allowed. Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to modfiy this document
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsEditNotesAllowed ( ) const [inline]

Checks if it is allowed to add or modify annotations or form fields Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to add or modify annotations or form fields
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsEncryptionEnabled ( EPdfEncryptAlgorithm  eAlgorithm) [static]

Test if a certain encryption algorithm is enabled for loading PDF documents.

Returns:
ture if the encryption algorithm is enabled
See also:
GetEnabledEncryptionAlgorithms
SetEnabledEncryptionAlgorithms
bool PoDoFo::PdfEncrypt::IsFillAndSignAllowed ( ) const [inline]

Checks if it is allowed to fill in existing form or signature fields Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to fill in existing form or signature fields
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsHighPrintAllowed ( ) const [inline]

Checks if it is allowed to print a high quality version of this document Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to print a high quality version of this document
See also:
PdfEncrypt to set own document permissions.
bool PoDoFo::PdfEncrypt::IsPrintAllowed ( ) const [inline]

Checks if printing this document is allowed. Every PDF consuming applications has to adhere this value!

Returns:
true if you are allowed to print this document
See also:
PdfEncrypt to set own document permissions.
void PoDoFo::PdfEncrypt::SetCurrentReference ( const PdfReference rRef) [inline]

Set the reference of the object that is currently encrypted.

This value will be used in following calls of Encrypt to encrypt the object.

See also:
Encrypt
void PoDoFo::PdfEncrypt::SetEnabledEncryptionAlgorithms ( int  nEncryptionAlgorithms) [static]

Specify the list of encryption algorithms that should be used by PoDoFo when loading a PDF document.

This can be used to disable for example AES encryption/decryption which is unstable in certain cases.

See also:
GetEnabledEncryptionAlgorithms
IsEncryptionEnabled