1
//========================================================================
5
// Copyright 2004 Glyph & Cog, LLC
7
//========================================================================
9
#ifndef SECURITYHANDLER_H
10
#define SECURITYHANDLER_H
12
#include "poppler-config.h"
14
#ifdef USE_GCC_PRAGMAS
18
#include "goo/gtypes.h"
23
struct XpdfSecurityHandler;
25
//------------------------------------------------------------------------
27
//------------------------------------------------------------------------
29
class SecurityHandler {
32
static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA);
34
SecurityHandler(PDFDoc *docA);
35
virtual ~SecurityHandler();
37
// Check the document's encryption. If the document is encrypted,
38
// this will first try <ownerPassword> and <userPassword> (in
39
// "batch" mode), and if those fail, it will attempt to request a
40
// password from the user. This is the high-level function that
41
// calls the lower level functions for the specific security handler
42
// (requesting a password three times, etc.). Returns true if the
43
// document can be opened (if it's unencrypted, or if a correct
44
// password is obtained); false otherwise (encrypted and no correct
46
GBool checkEncryption(GooString *ownerPassword,
47
GooString *userPassword);
49
// Create authorization data for the specified owner and user
50
// passwords. If the security handler doesn't support "batch" mode,
51
// this function should return NULL.
52
virtual void *makeAuthData(GooString *ownerPassword,
53
GooString *userPassword) = 0;
55
// Construct authorization data, typically by prompting the user for
56
// a password. Returns an authorization data object, or NULL to
58
virtual void *getAuthData() = 0;
60
// Free the authorization data returned by makeAuthData or
62
virtual void freeAuthData(void *authData) = 0;
64
// Attempt to authorize the document, using the supplied
65
// authorization data (which may be NULL). Returns true if
66
// successful (i.e., if at least the right to open the document was
68
virtual GBool authorize(void *authData) = 0;
70
// Return the various authorization parameters. These are only
71
// valid after authorize has returned true.
72
virtual int getPermissionFlags() = 0;
73
virtual GBool getOwnerPasswordOk() = 0;
74
virtual Guchar *getFileKey() = 0;
75
virtual int getFileKeyLength() = 0;
76
virtual int getEncVersion() = 0;
77
virtual int getEncRevision() = 0;
78
virtual CryptAlgorithm getEncAlgorithm() = 0;
85
//------------------------------------------------------------------------
86
// StandardSecurityHandler
87
//------------------------------------------------------------------------
89
class StandardSecurityHandler: public SecurityHandler {
92
StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA);
93
virtual ~StandardSecurityHandler();
95
virtual void *makeAuthData(GooString *ownerPassword,
96
GooString *userPassword);
97
virtual void *getAuthData();
98
virtual void freeAuthData(void *authData);
99
virtual GBool authorize(void *authData);
100
virtual int getPermissionFlags() { return permFlags; }
101
virtual GBool getOwnerPasswordOk() { return ownerPasswordOk; }
102
virtual Guchar *getFileKey() { return fileKey; }
103
virtual int getFileKeyLength() { return fileKeyLength; }
104
virtual int getEncVersion() { return encVersion; }
105
virtual int getEncRevision() { return encRevision; }
106
virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; }
111
GBool ownerPasswordOk;
116
GBool encryptMetadata;
117
CryptAlgorithm encAlgorithm;
119
GooString *ownerKey, *userKey;
124
#ifdef ENABLE_PLUGINS
125
//------------------------------------------------------------------------
126
// ExternalSecurityHandler
127
//------------------------------------------------------------------------
129
class ExternalSecurityHandler: public SecurityHandler {
132
ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA,
133
XpdfSecurityHandler *xshA);
134
virtual ~ExternalSecurityHandler();
136
virtual void *makeAuthData(GooString *ownerPassword,
137
GooString *userPassword);
138
virtual void *getAuthData();
139
virtual void freeAuthData(void *authData);
140
virtual GBool authorize(void *authData);
141
virtual int getPermissionFlags() { return permFlags; }
142
virtual GBool getOwnerPasswordOk() { return gFalse; }
143
virtual Guchar *getFileKey() { return fileKey; }
144
virtual int getFileKeyLength() { return fileKeyLength; }
145
virtual int getEncVersion() { return encVersion; }
146
virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; }
151
XpdfSecurityHandler *xsh;
157
CryptAlgorithm encAlgorithm;
160
#endif // ENABLE_PLUGINS