Class Argon2Parameters

java.lang.Object
org.bouncycastle.crypto.params.Argon2Parameters

public class Argon2Parameters extends Object
Configuration parameters for the Argon2 PBKDF.

Build instances with Argon2Parameters.Builder, e.g.

Argon2Parameters params = new Argon2Parameters.Builder(Argon2Parameters.ARGON2_id)
    .withVersion(Argon2Parameters.ARGON2_VERSION_13)
    .withSalt(salt)
    .withIterations(3)
    .withMemoryPowOfTwo(16)
    .withParallelism(4)
    .build();
  • Field Details

    • MAX_MEMORY_EXP

      public static final String MAX_MEMORY_EXP
      System/security property setting the maximum permitted memory exponent (i.e. memory <= 1 << MAX_MEMORY_EXP). Defaults to 24 (16 GiB); the property may be raised up to a ceiling of 30. The default was lowered from the historical 30 (1 TiB) so that a single key derivation driven by attacker-chosen cost parameters - notably an OpenPGP Argon2 S2K specifier read from an unauthenticated packet - cannot exhaust the heap of a typical host.
      See Also:
    • MAX_PASSES

      public static final String MAX_PASSES
      System/security property bounding the number of Argon2 passes (iterations) accepted when a key is derived from untrusted cost parameters - notably an OpenPGP Argon2 S2K specifier. Defaults to 10; OpenPGP key derivation rejects a larger value rather than spend unbounded CPU on attacker-chosen iterations. Read via Properties.asInteger(String, int).
      See Also:
    • MAX_PARALLELISM

      public static final String MAX_PARALLELISM
      System/security property bounding the Argon2 parallelism (lanes) accepted when a key is derived from untrusted cost parameters - notably an OpenPGP Argon2 S2K specifier. Defaults to 16. Read via Properties.asInteger(String, int).
      See Also:
    • ARGON2_d

      public static final int ARGON2_d
      Argon2d - data-dependent memory access.
      See Also:
    • ARGON2_i

      public static final int ARGON2_i
      Argon2i - data-independent memory access.
      See Also:
    • ARGON2_id

      public static final int ARGON2_id
      Argon2id - hybrid of ARGON2_i and ARGON2_d.
      See Also:
    • ARGON2_VERSION_10

      public static final int ARGON2_VERSION_10
      Argon2 v1.0 (legacy).
      See Also:
    • ARGON2_VERSION_13

      public static final int ARGON2_VERSION_13
      Argon2 v1.3 - the version standardised by RFC 9106.
      See Also:
  • Method Details

    • getSalt

      public byte[] getSalt()
      Returns:
      a defensive copy of the salt, or null if none was set.
    • getSecret

      public byte[] getSecret()
      Returns:
      a defensive copy of the secret value, or null if none was set.
    • getAdditional

      public byte[] getAdditional()
      Returns:
      a defensive copy of the additional data, or null if none was set.
    • getIterations

      public int getIterations()
      Returns:
      the number of passes (time cost).
    • getMemory

      public int getMemory()
      Returns:
      the memory cost in KiB.
    • getLanes

      public int getLanes()
      Returns:
      the parallelism (lane count).
    • getVersion

      public int getVersion()
      Returns:
      the Argon2 version constant (ARGON2_VERSION_10 or ARGON2_VERSION_13).
    • getType

      public int getType()
      Returns:
      the Argon2 variant constant (ARGON2_d, ARGON2_i, or ARGON2_id).
    • getCharToByteConverter

      public CharToByteConverter getCharToByteConverter()
      Returns:
      the character-to-byte converter used to encode char[] passwords.
    • getBlockPool

      public Argon2BytesGenerator.BlockPool getBlockPool()
      Returns:
      the user-supplied Argon2BytesGenerator.BlockPool, or null if the generator should use its default per-call pool.
    • clear

      public void clear()
      Zeroise sensitive state (salt, secret, additional) held by these parameters.