Filter is a common interface for crypt filter methods.
type Filter interface {
// Name returns a name of the filter that should be used in CFM field of Encrypt dictionary.
Name() string
// KeyLength returns a length of the encryption key in bytes.
KeyLength() int
// PDFVersion reports the minimal version of PDF document that introduced this filter.
PDFVersion() [2]int
// HandlerVersion reports V and R parameters that should be used for this filter.
HandlerVersion() (V, R int)
// MakeKey generates a object encryption key based on file encryption key and object numbers.
// Used only for legacy filters - AESV3 doesn't change the key for each object.
MakeKey(objNum, genNum uint32, fkey []byte) ([]byte, error)
// EncryptBytes encrypts a buffer using object encryption key, as returned by MakeKey.
// Implementation may reuse a buffer and encrypt data in-place.
EncryptBytes(p []byte, okey []byte) ([]byte, error)
// DecryptBytes decrypts a buffer using object encryption key, as returned by MakeKey.
// Implementation may reuse a buffer and decrypt data in-place.
DecryptBytes(p []byte, okey []byte) ([]byte, error)
}
func NewFilter(d FilterDict) (Filter, error)
NewFilter creates CryptFilter from a corresponding dictionary.
func NewFilterAESV2() Filter
NewFilterAESV2 creates an AES-based filter with a 128 bit key (AESV2).
func NewFilterAESV3() Filter
NewFilterAESV3 creates an AES-based filter with a 256 bit key (AESV3).
func NewFilterV2(length int) Filter
NewFilterV2 creates a RC4-based filter with a specified key length (in bytes).
func NewIdentity() Filter
NewIdentity creates an identity filter that bypasses all data without changes.
FilterDict represents information from a CryptFilter dictionary.
type FilterDict struct {
CFM string // The method used, if any, by the PDF reader to decrypt data.
AuthEvent security.AuthEvent
Length int // in bytes
}