com.lowagie.text.pdf

## Class PdfEncryption

- java.lang.Object
- - com.lowagie.text.pdf.PdfEncryption

    public class PdfEncryption
    extends java.lang.Object

Author:
  Paulo Soares (psoares@consiste.pt), Kazuya Ujihara

### Field Summary

Fields
`static int` `AES_128`
`private ARCFOUREncryption` `arcfour`
`private int` `cryptoMode`
`(package private) byte[]` `documentID`
`private boolean` `embeddedFilesOnly` Indicates if the encryption is only necessary for embedded files.
`private boolean` `encryptMetadata`
`(package private) byte[]` `extra` Work area to prepare the object/generation bytes
`(package private) byte[]` `key` The encryption key for a particular object/generation
`private int` `keyLength` The generic key length.
`(package private) int` `keySize` The encryption key length for a particular object/generation
`(package private) java.security.MessageDigest` `md5` The message digest algorithm MD5
`private static byte[]` `metadataPad`
`(package private) byte[]` `mkey` The global encryption key
`(package private) byte[]` `ownerKey` The encryption key for the owner
`private static byte[]` `pad`
`(package private) int` `permissions`
`protected PdfPublicKeySecurityHandler` `publicKeyHandler` The public key security handler for certificate encryption
`private int` `revision`
`private static byte[]` `salt`
`(package private) static long` `seq`
`static int` `STANDARD_ENCRYPTION_128`
`static int` `STANDARD_ENCRYPTION_40`
`(package private) byte[]` `userKey` The encryption key for the user

### Constructor Summary

Constructors
Constructor and Description
`PdfEncryption()`
`PdfEncryption(PdfEncryption enc)`

### Method Summary

Methods
`void` `addRecipient(java.security.cert.Certificate cert, int permission)`
`int` `calculateStreamSize(int n)`
`private byte[]` `computeOwnerKey(byte[] userPad, byte[] ownerPad)`
`byte[]` `computeUserPassword(byte[] ownerPassword)`
`static byte[]` `createDocumentId()`
`static PdfObject` `createInfoId(byte[] id)`
`byte[]` `decryptByteArray(byte[] b)`
`byte[]` `encryptByteArray(byte[] b)`
`int` `getCryptoMode()`
`StandardDecryption` `getDecryptor()`
`PdfDictionary` `getEncryptionDictionary()`
`OutputStreamEncryption` `getEncryptionStream(java.io.OutputStream os)`
`PdfObject` `getFileID()`
`boolean` `isEmbeddedFilesOnly()` Indicates if only the embedded files have to be encrypted.
`boolean` `isMetadataEncrypted()`
`private byte[]` `padPassword(byte[] userPassword)`
`void` `setCryptoMode(int mode, int kl)`
`void` `setHashKey(int number, int generation)`
`void` `setupAllKeys(byte[] userPassword, byte[] ownerPassword, int permissions)`
`void` `setupByEncryptionKey(byte[] key, int keylength)`
`private void` `setupByOwnerPad(byte[] documentID, byte[] ownerPad, byte[] userKey, byte[] ownerKey, int permissions)`
`void` `setupByOwnerPassword(byte[] documentID, byte[] ownerPassword, byte[] userKey, byte[] ownerKey, int permissions)`
`private void` `setupByUserPad(byte[] documentID, byte[] userPad, byte[] ownerKey, int permissions)`
`void` `setupByUserPassword(byte[] documentID, byte[] userPassword, byte[] ownerKey, int permissions)`
`private void` `setupGlobalEncryptionKey(byte[] documentID, byte[] userPad, byte[] ownerKey, int permissions)` ownerKey, documentID must be setup
`private void` `setupUserKey()` mkey must be setup

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### STANDARD_ENCRYPTION_40

    public static final int STANDARD_ENCRYPTION_40

See Also:
  Constant Field Values

#### STANDARD_ENCRYPTION_128

    public static final int STANDARD_ENCRYPTION_128

See Also:
  Constant Field Values

#### AES_128

    public static final int AES_128

See Also:
  Constant Field Values

#### pad

    private static final byte[] pad

#### salt

    private static final byte[] salt

#### metadataPad

    private static final byte[] metadataPad

#### key

    byte[] key

The encryption key for a particular object/generation

#### keySize

    int keySize

The encryption key length for a particular object/generation

#### mkey

    byte[] mkey

The global encryption key

#### extra

    byte[] extra

Work area to prepare the object/generation bytes

#### md5

    java.security.MessageDigest md5

The message digest algorithm MD5

#### ownerKey

    byte[] ownerKey

The encryption key for the owner

#### userKey

    byte[] userKey

The encryption key for the user

#### publicKeyHandler

    protected PdfPublicKeySecurityHandler publicKeyHandler

The public key security handler for certificate encryption

#### permissions

    int permissions

#### documentID

    byte[] documentID

#### seq

    static long seq

#### revision

    private int revision

#### arcfour

    private ARCFOUREncryption arcfour

#### keyLength

    private int keyLength

The generic key length. It may be 40 or 128.

#### encryptMetadata

    private boolean encryptMetadata

#### embeddedFilesOnly

    private boolean embeddedFilesOnly

Indicates if the encryption is only necessary for embedded files.

Since:
  2.1.3

#### cryptoMode

    private int cryptoMode

### Constructor Detail

#### PdfEncryption

    public PdfEncryption()

#### PdfEncryption

    public PdfEncryption(PdfEncryption enc)

### Method Detail

#### setCryptoMode

    public void setCryptoMode(int mode,
                     int kl)

#### getCryptoMode

    public int getCryptoMode()

#### isMetadataEncrypted

    public boolean isMetadataEncrypted()

#### isEmbeddedFilesOnly

    public boolean isEmbeddedFilesOnly()

Indicates if only the embedded files have to be encrypted.

Returns:
  if true only the embedded files will be encrypted
Since:
  2.1.3

#### padPassword

    private byte[] padPassword(byte[] userPassword)

#### computeOwnerKey

    private byte[] computeOwnerKey(byte[] userPad,
                         byte[] ownerPad)

#### setupGlobalEncryptionKey

    private void setupGlobalEncryptionKey(byte[] documentID,
                                byte[] userPad,
                                byte[] ownerKey,
                                int permissions)

ownerKey, documentID must be setup

#### setupUserKey

    private void setupUserKey()

mkey must be setup

#### setupAllKeys

    public void setupAllKeys(byte[] userPassword,
                    byte[] ownerPassword,
                    int permissions)

#### createDocumentId

    public static byte[] createDocumentId()

#### setupByUserPassword

    public void setupByUserPassword(byte[] documentID,
                           byte[] userPassword,
                           byte[] ownerKey,
                           int permissions)

#### setupByUserPad

    private void setupByUserPad(byte[] documentID,
                      byte[] userPad,
                      byte[] ownerKey,
                      int permissions)

#### setupByOwnerPassword

    public void setupByOwnerPassword(byte[] documentID,
                            byte[] ownerPassword,
                            byte[] userKey,
                            byte[] ownerKey,
                            int permissions)

#### setupByOwnerPad

    private void setupByOwnerPad(byte[] documentID,
                       byte[] ownerPad,
                       byte[] userKey,
                       byte[] ownerKey,
                       int permissions)

#### setupByEncryptionKey

    public void setupByEncryptionKey(byte[] key,
                            int keylength)

#### setHashKey

    public void setHashKey(int number,
                  int generation)

#### createInfoId

    public static PdfObject createInfoId(byte[] id)

#### getEncryptionDictionary

    public PdfDictionary getEncryptionDictionary()

#### getFileID

    public PdfObject getFileID()

#### getEncryptionStream

    public OutputStreamEncryption getEncryptionStream(java.io.OutputStream os)

#### calculateStreamSize

    public int calculateStreamSize(int n)

#### encryptByteArray

    public byte[] encryptByteArray(byte[] b)

#### getDecryptor

    public StandardDecryption getDecryptor()

#### decryptByteArray

    public byte[] decryptByteArray(byte[] b)

#### addRecipient

    public void addRecipient(java.security.cert.Certificate cert,
                    int permission)

#### computeUserPassword

    public byte[] computeUserPassword(byte[] ownerPassword)