SAKKEPublicKeyParameters (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.crypto.params

## Class SAKKEPublicKeyParameters

- java.lang.Object
- - org.bouncycastle.crypto.params.AsymmetricKeyParameter
  - - org.bouncycastle.crypto.params.SAKKEPublicKeyParameters

- All Implemented Interfaces:
    CipherParameters

      public class SAKKEPublicKeyParameters
      extends AsymmetricKeyParameter

  Represents the public parameters for the SAKKE (Sakai-Kasahara Key Encryption) scheme as defined in RFC 6508. This class encapsulates the cryptographic domain parameters and public key components required for SAKKE operations.

  Contains the following public parameters (RFC 6508, Section 2.3):

  - Prime modulus `p` defining the field F_p
  - Subgroup order `q` (divides p+1)
  - Base point `P` on the elliptic curve E(F_p)
  - Pairing result `g = <P,P>`
  - KMS Public Key `Z_S = [z_S]P`
  - Security parameter `n` (SSV bit length)
  - User Identifier
  - Elliptic curve parameters (a = -3, b = 0)

  The predefined parameters in this implementation correspond to the 128-bit security level example from RFC 6509 Appendix A.

  See Also:
    RFC 6508: Sakai-Kasahara Key Encryption, RFC 6509: MIKEY-SAKKE

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SAKKEPublicKeyParameters(java.math.BigInteger identifier, ECPoint Z)` Constructs SAKKE public key parameters with the specified identifier and KMS Public Key.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ECCurve` | `getCurve()`
    `Digest` | `getDigest()`
    `java.math.BigInteger` | `getG()`
    `java.math.BigInteger` | `getIdentifier()`
    `int` | `getN()`
    `ECPoint` | `getPoint()`
    `java.math.BigInteger` | `getPrime()`
    `java.math.BigInteger` | `getQ()`
    `ECPoint` | `getZ()`

    - ### Methods inherited from class org.bouncycastle.crypto.params.AsymmetricKeyParameter

      `isPrivate`

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

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

- - ### Constructor Detail

    - #### SAKKEPublicKeyParameters

          public SAKKEPublicKeyParameters(java.math.BigInteger identifier,
                                          ECPoint Z)

      Constructs SAKKE public key parameters with the specified identifier and KMS Public Key.
      Parameters:
        `identifier` - The user's identifier as defined in RFC 6508, Section 2.2. Must be a valid integer in [2, q-1].
        `Z` - The KMS Public Key Z_S = [z_S]P (RFC 6508, Section 2.2). Must be a valid point on the curve E(F_p).

  - ### Method Detail

    - #### getIdentifier

          public java.math.BigInteger getIdentifier()

      Returns:
        The user's identifier (RFC 6508, Section 2.2)

    - #### getZ

          public ECPoint getZ()

      Returns:
        The KMS Public Key Z_S = [z_S]P (RFC 6508, Section 2.2)

    - #### getCurve

          public ECCurve getCurve()

      Returns:
        The elliptic curve E(F_p) with parameters from RFC 6509 Appendix A

    - #### getPoint

          public ECPoint getPoint()

      Returns:
        The base point P on E(F_p) (RFC 6508, Section 3.1)

    - #### getPrime

          public java.math.BigInteger getPrime()

      Returns:
        Prime modulus p defining the field F_p (RFC 6508, Section 2.1)

    - #### getQ

          public java.math.BigInteger getQ()

      Returns:
        Subgroup order q (divides p+1) (RFC 6508, Section 2.1)

    - #### getN

          public int getN()

      Returns:
        Security parameter n (SSV bit length = 128 bits)

    - #### getDigest

          public Digest getDigest()

      Returns:
        The hash function (SHA-256) used in SAKKE operations

    - #### getG

          public java.math.BigInteger getG()

      Returns:
        The pairing result `g = <P,P>` (RFC 6508, Section 3.2)