PoDoFo  0.9.4
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PoDoFo::PdfEncrypt Class Referenceabstract

#include <PdfEncrypt.h>

Inherited by PoDoFo::PdfEncryptMD5Base.

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.
 
bool IsMetadataEncrypted () const
 Is metadata encrypted.
 
virtual void Encrypt (const unsigned char *inStr, pdf_long inLen, unsigned char *outStr, pdf_long outLen) const =0
 Encrypt a wxString. More...
 
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.
 
bool m_bEncryptMetadata
 Is metadata encrypted.
 

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