PBEKeyEncryptionMethodGenerator
Date: 2016-06-23

org.bouncycastle.openpgp.operator

## Class PBEKeyEncryptionMethodGenerator

- java.lang.Object
- - org.bouncycastle.openpgp.operator.PGPKeyEncryptionMethodGenerator
  - - org.bouncycastle.openpgp.operator.PBEKeyEncryptionMethodGenerator

- Direct Known Subclasses:
    BcPBEKeyEncryptionMethodGenerator, JcePBEKeyEncryptionMethodGenerator

      public abstract class PBEKeyEncryptionMethodGenerator
      extends PGPKeyEncryptionMethodGenerator

  PGP style PBE encryption method.

  A pass phrase is used to generate an encryption key using the PGP `string-to-key` method. This class always uses the `salted and iterated form of the S2K algorithm`.

  Note that the iteration count provided to this method is a single byte as described by the `S2K` algorithm, and the actual iteration count ranges exponentially from `0x01`== 1088 to `0xFF` == 65,011,712.``

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `PBEKeyEncryptionMethodGenerator(char[] passPhrase, PGPDigestCalculator s2kDigestCalculator)` Construct a PBE key generator using the default iteration count (`0x60` == 65536 iterations).
    `protected` | `PBEKeyEncryptionMethodGenerator(char[] passPhrase, PGPDigestCalculator s2kDigestCalculator, int s2kCount)` Construct a PBE key generator using a specific iteration level.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract byte[]` | `encryptSessionInfo(int encAlgorithm, byte[] key, byte[] sessionInfo)`
    `ContainedPacket` | `generate(int encAlgorithm, byte[] sessionInfo)` Generates a packet encoding the details of this encryption method.
    `byte[]` | `getKey(int encAlgorithm)` Generate a key for a symmetric encryption algorithm using the PBE configuration in this method.
    `PBEKeyEncryptionMethodGenerator` | `setSecureRandom(java.security.SecureRandom random)` Sets a user defined source of randomness.

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

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

- - ### Constructor Detail

    - #### PBEKeyEncryptionMethodGenerator

          protected PBEKeyEncryptionMethodGenerator(char[] passPhrase,
                                         PGPDigestCalculator s2kDigestCalculator)

      Construct a PBE key generator using the default iteration count (`0x60` == 65536 iterations).
      Parameters:
        `passPhrase` - the pass phrase to encrypt with.
        `s2kDigestCalculator` - a digest calculator to use in the string-to-key function.

    - #### PBEKeyEncryptionMethodGenerator

          protected PBEKeyEncryptionMethodGenerator(char[] passPhrase,
                                         PGPDigestCalculator s2kDigestCalculator,
                                         int s2kCount)

      Construct a PBE key generator using a specific iteration level.
      Parameters:
        `passPhrase` - the pass phrase to encrypt with.
        `s2kDigestCalculator` - a digest calculator to use in the string-to-key function.
        `s2kCount` - a single byte `S2K` iteration count specifier, which is translated to an actual iteration count by the S2K class.

  - ### Method Detail

    - #### setSecureRandom

          public PBEKeyEncryptionMethodGenerator setSecureRandom(java.security.SecureRandom random)

      Sets a user defined source of randomness.

      If no SecureRandom is configured, a default SecureRandom will be used.

      Returns:
        the current generator.

    - #### getKey

          public byte[] getKey(int encAlgorithm)
                        throws PGPException

      Generate a key for a symmetric encryption algorithm using the PBE configuration in this method.
      Parameters:
        `encAlgorithm` - the `encryption algorithm` to generate the key for.
      Returns:
        the bytes of the generated key.
      Throws:
        `PGPException` - if an error occurs performing the string-to-key generation.

    - #### generate

          public ContainedPacket generate(int encAlgorithm,
                                 byte[] sessionInfo)
                                   throws PGPException

      Description copied from class: `PGPKeyEncryptionMethodGenerator`
      Generates a packet encoding the details of this encryption method.
      Specified by:
        `generate` in class `PGPKeyEncryptionMethodGenerator`
      Parameters:
        `encAlgorithm` - the `encryption algorithm` being used
        `sessionInfo` - session data generated by the encrypted data generator.
      Returns:
        a packet encoding the provided information and the configuration of this instance.
      Throws:
        `PGPException` - if an error occurs constructing the packet.

    - #### encryptSessionInfo

          protected abstract byte[] encryptSessionInfo(int encAlgorithm,
                                  byte[] key,
                                  byte[] sessionInfo)
                                                throws PGPException

      Throws:
        `PGPException`