S2K
Date: 2016-06-23

org.bouncycastle.bcpg

## Class S2K

- java.lang.Object
- - org.bouncycastle.bcpg.BCPGObject
  - - org.bouncycastle.bcpg.S2K

- All Implemented Interfaces:
    org.bouncycastle.util.Encodable

      public class S2K
      extends BCPGObject

  Parameter specifier for the PGP string-to-key password based key derivation function.

  In iterated mode, S2K takes a single byte iteration count specifier, which is converted to an actual iteration count using a formula that grows the iteration count exponentially as the byte value increases.
  e.g. `0x01`== 1088 iterations, and `0xFF` == 65,011,712 iterations.``

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `GNU_DUMMY_S2K`
    `static int` | `GNU_PROTECTION_MODE_DIVERT_TO_CARD`
    `static int` | `GNU_PROTECTION_MODE_NO_PRIVATE_KEY`
    `static int` | `SALTED` Salted key generation.
    `static int` | `SALTED_AND_ITERATED` Salted and iterated key generation.
    `static int` | `SIMPLE` Simple key generation.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `S2K(int algorithm)` Constructs a specifier for a `simple` S2K generation.
    `S2K(int algorithm, byte[] iv)` Constructs a specifier for a `salted` S2K generation.
    `S2K(int algorithm, byte[] iv, int itCount)` Constructs a specifier for a `salted and iterated` S2K generation.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `encode(BCPGOutputStream out)`
    `int` | `getHashAlgorithm()` Gets the `hash algorithm` for this S2K.
    `long` | `getIterationCount()` Gets the actual (expanded) iteration count.
    `byte[]` | `getIV()` Gets the iv/salt to use for the key generation.
    `int` | `getProtectionMode()` Gets the protection mode - only if GNU_DUMMY_S2K
    `int` | `getType()` Gets the `digest algorithm` specified.

    - ### Methods inherited from class org.bouncycastle.bcpg.BCPGObject

      `getEncoded`

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

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

- - ### Field Detail

    - #### SIMPLE

          public static final int SIMPLE

      Simple key generation. A single non-salted iteration of a hash function
      See Also:
        Constant Field Values

    - #### SALTED

          public static final int SALTED

      Salted key generation. A single iteration of a hash function with a (unique) salt
      See Also:
        Constant Field Values

    - #### SALTED_AND_ITERATED

          public static final int SALTED_AND_ITERATED

      Salted and iterated key generation. Multiple iterations of a hash function, with a salt
      See Also:
        Constant Field Values

    - #### GNU_DUMMY_S2K

          public static final int GNU_DUMMY_S2K

      See Also:
        Constant Field Values

    - #### GNU_PROTECTION_MODE_NO_PRIVATE_KEY

          public static final int GNU_PROTECTION_MODE_NO_PRIVATE_KEY

      See Also:
        Constant Field Values

    - #### GNU_PROTECTION_MODE_DIVERT_TO_CARD

          public static final int GNU_PROTECTION_MODE_DIVERT_TO_CARD

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### S2K

          public S2K(int algorithm)

      Constructs a specifier for a `simple` S2K generation.
      Parameters:
        `algorithm` - the `digest algorithm` to use.

    - #### S2K

          public S2K(int algorithm,
             byte[] iv)

      Constructs a specifier for a `salted` S2K generation.
      Parameters:
        `algorithm` - the `digest algorithm` to use.
        `iv` - the salt to apply to input to the key generation.

    - #### S2K

          public S2K(int algorithm,
             byte[] iv,
             int itCount)

      Constructs a specifier for a `salted and iterated` S2K generation.
      Parameters:
        `algorithm` - the `digest algorithm` to iterate.
        `iv` - the salt to apply to input to the key generation.
        `itCount` - the single byte iteration count specifier.

  - ### Method Detail

    - #### getType

          public int getType()

      Gets the `digest algorithm` specified.

    - #### getHashAlgorithm

          public int getHashAlgorithm()

      Gets the `hash algorithm` for this S2K.

    - #### getIV

          public byte[] getIV()

      Gets the iv/salt to use for the key generation.

    - #### getIterationCount

          public long getIterationCount()

      Gets the actual (expanded) iteration count.

    - #### getProtectionMode

          public int getProtectionMode()

      Gets the protection mode - only if GNU_DUMMY_S2K

    - #### encode

          public void encode(BCPGOutputStream out)
                      throws java.io.IOException

      Specified by:
        `encode` in class `BCPGObject`
      Throws:
        `java.io.IOException`