#ifndef SECURITYHANDLER_H
#define SECURITYHANDLER_H
#include <config.h>
#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif
#include "gtypes.h"
#include "Object.h"
class GString;
class PDFDoc;
struct XpdfSecurityHandler;
class SecurityHandler {
public:
static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA);
SecurityHandler(PDFDoc *docA);
virtual ~SecurityHandler();
GBool checkEncryption(GString *ownerPassword,
GString *userPassword);
virtual void *makeAuthData(GString *ownerPassword,
GString *userPassword) = 0;
virtual void *getAuthData() = 0;
virtual void freeAuthData(void *authData) = 0;
virtual GBool authorize(void *authData) = 0;
virtual int getPermissionFlags() = 0;
virtual GBool getOwnerPasswordOk() = 0;
virtual Guchar *getFileKey() = 0;
virtual int getFileKeyLength() = 0;
virtual int getEncVersion() = 0;
protected:
PDFDoc *doc;
};
class StandardSecurityHandler: public SecurityHandler {
public:
StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA);
virtual ~StandardSecurityHandler();
virtual void *makeAuthData(GString *ownerPassword,
GString *userPassword);
virtual void *getAuthData();
virtual void freeAuthData(void *authData);
virtual GBool authorize(void *authData);
virtual int getPermissionFlags() { return permFlags; }
virtual GBool getOwnerPasswordOk() { return ownerPasswordOk; }
virtual Guchar *getFileKey() { return fileKey; }
virtual int getFileKeyLength() { return fileKeyLength; }
virtual int getEncVersion() { return encVersion; }
private:
int permFlags;
GBool ownerPasswordOk;
Guchar fileKey[16];
int fileKeyLength;
int encVersion;
int encRevision;
GBool encryptMetadata;
GString *ownerKey, *userKey;
GString *fileID;
GBool ok;
};
#ifdef ENABLE_PLUGINS
class ExternalSecurityHandler: public SecurityHandler {
public:
ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA,
XpdfSecurityHandler *xshA);
virtual ~ExternalSecurityHandler();
virtual void *makeAuthData(GString *ownerPassword,
GString *userPassword);
virtual void *getAuthData();
virtual void freeAuthData(void *authData);
virtual GBool authorize(void *authData);
virtual int getPermissionFlags() { return permFlags; }
virtual GBool getOwnerPasswordOk() { return gFalse; }
virtual Guchar *getFileKey() { return fileKey; }
virtual int getFileKeyLength() { return fileKeyLength; }
virtual int getEncVersion() { return encVersion; }
private:
Object encryptDict;
XpdfSecurityHandler *xsh;
void *docData;
int permFlags;
Guchar fileKey[16];
int fileKeyLength;
int encVersion;
GBool ok;
};
#endif // ENABLE_PLUGINS
#endif