1 //========================================================================
5 // Copyright 2004 Glyph & Cog, LLC
7 //========================================================================
9 #ifndef SECURITYHANDLER_H
10 #define SECURITYHANDLER_H
14 #ifdef USE_GCC_PRAGMAS
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;
84 //------------------------------------------------------------------------
85 // StandardSecurityHandler
86 //------------------------------------------------------------------------
88 class StandardAuthData
{
91 StandardAuthData(GooString
*ownerPasswordA
, GooString
*userPasswordA
) {
92 ownerPassword
= ownerPasswordA
;
93 userPassword
= userPasswordA
;
101 GooString
*ownerPassword
;
102 GooString
*userPassword
;
105 class StandardSecurityHandler
: public SecurityHandler
{
108 StandardSecurityHandler(PDFDoc
*docA
, Object
*encryptDictA
);
109 virtual ~StandardSecurityHandler();
111 virtual void *makeAuthData(GooString
*ownerPassword
,
112 GooString
*userPassword
);
113 virtual void *getAuthData();
114 virtual void freeAuthData(void *authData
);
115 virtual GBool
authorize(void *authData
);
116 virtual int getPermissionFlags() { return permFlags
; }
117 virtual GBool
getOwnerPasswordOk() { return ownerPasswordOk
; }
118 virtual Guchar
*getFileKey() { return fileKey
; }
119 virtual int getFileKeyLength() { return fileKeyLength
; }
120 virtual int getEncVersion() { return encVersion
; }
121 virtual int getEncRevision() { return encRevision
; }
126 GBool ownerPasswordOk
;
131 GBool encryptMetadata
;
133 GooString
*ownerKey
, *userKey
;
138 #ifdef ENABLE_PLUGINS
139 //------------------------------------------------------------------------
140 // ExternalSecurityHandler
141 //------------------------------------------------------------------------
143 class ExternalSecurityHandler
: public SecurityHandler
{
146 ExternalSecurityHandler(PDFDoc
*docA
, Object
*encryptDictA
,
147 XpdfSecurityHandler
*xshA
);
148 virtual ~ExternalSecurityHandler();
150 virtual void *makeAuthData(GooString
*ownerPassword
,
151 GooString
*userPassword
);
152 virtual void *getAuthData();
153 virtual void freeAuthData(void *authData
);
154 virtual GBool
authorize(void *authData
);
155 virtual int getPermissionFlags() { return permFlags
; }
156 virtual GBool
getOwnerPasswordOk() { return gFalse
; }
157 virtual Guchar
*getFileKey() { return fileKey
; }
158 virtual int getFileKeyLength() { return fileKeyLength
; }
159 virtual int getEncVersion() { return encVersion
; }
164 XpdfSecurityHandler
*xsh
;
172 #endif // ENABLE_PLUGINS