package org.bouncycastle.jcajce.spec;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.AlgorithmParameterSpec;

import org.bouncycastle.util.Arrays;

Parameter spec to provide Diffie-Hellman Unified model keys and user keying material.
/** * Parameter spec to provide Diffie-Hellman Unified model keys and user keying material. */
public class DHUParameterSpec implements AlgorithmParameterSpec { private final PublicKey ephemeralPublicKey; private final PrivateKey ephemeralPrivateKey; private final PublicKey otherPartyEphemeralKey; private final byte[] userKeyingMaterial;
Base constructor for a Diffie-Hellman unified model.
Params:
  • ephemeralPublicKey – our ephemeral public key.
  • ephemeralPrivateKey – our ephemeral private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
  • userKeyingMaterial – key generation material to mix with the calculated secret.
/** * Base constructor for a Diffie-Hellman unified model. * * @param ephemeralPublicKey our ephemeral public key. * @param ephemeralPrivateKey our ephemeral private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. * @param userKeyingMaterial key generation material to mix with the calculated secret. */
public DHUParameterSpec(PublicKey ephemeralPublicKey, PrivateKey ephemeralPrivateKey, PublicKey otherPartyEphemeralKey, byte[] userKeyingMaterial) { if (ephemeralPrivateKey == null) { throw new IllegalArgumentException("ephemeral private key cannot be null"); } if (otherPartyEphemeralKey == null) { throw new IllegalArgumentException("other party ephemeral key cannot be null"); } this.ephemeralPublicKey = ephemeralPublicKey; this.ephemeralPrivateKey = ephemeralPrivateKey; this.otherPartyEphemeralKey = otherPartyEphemeralKey; this.userKeyingMaterial = Arrays.clone(userKeyingMaterial); }
Base constructor for a Diffie-Hellman unified model without user keying material.
Params:
  • ephemeralPublicKey – our ephemeral public key.
  • ephemeralPrivateKey – our ephemeral private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
/** * Base constructor for a Diffie-Hellman unified model without user keying material. * * @param ephemeralPublicKey our ephemeral public key. * @param ephemeralPrivateKey our ephemeral private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. */
public DHUParameterSpec(PublicKey ephemeralPublicKey, PrivateKey ephemeralPrivateKey, PublicKey otherPartyEphemeralKey) { this(ephemeralPublicKey, ephemeralPrivateKey, otherPartyEphemeralKey, null); }
Base constructor for a Diffie-Hellman unified model using a key pair.
Params:
  • ephemeralKeyPair – our ephemeral public and private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
  • userKeyingMaterial – key generation material to mix with the calculated secret.
/** * Base constructor for a Diffie-Hellman unified model using a key pair. * * @param ephemeralKeyPair our ephemeral public and private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. * @param userKeyingMaterial key generation material to mix with the calculated secret. */
public DHUParameterSpec(KeyPair ephemeralKeyPair, PublicKey otherPartyEphemeralKey, byte[] userKeyingMaterial) { this(ephemeralKeyPair.getPublic(), ephemeralKeyPair.getPrivate(), otherPartyEphemeralKey, userKeyingMaterial); }
Base constructor for a Diffie-Hellman unified model - calculation of our ephemeral public key is required.
Params:
  • ephemeralPrivateKey – our ephemeral private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
  • userKeyingMaterial – key generation material to mix with the calculated secret.
/** * Base constructor for a Diffie-Hellman unified model - calculation of our ephemeral public key * is required. * * @param ephemeralPrivateKey our ephemeral private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. * @param userKeyingMaterial key generation material to mix with the calculated secret. */
public DHUParameterSpec(PrivateKey ephemeralPrivateKey, PublicKey otherPartyEphemeralKey, byte[] userKeyingMaterial) { this(null, ephemeralPrivateKey, otherPartyEphemeralKey, userKeyingMaterial); }
Base constructor for a Diffie-Hellman unified model using a key pair without user keying material.
Params:
  • ephemeralKeyPair – our ephemeral public and private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
/** * Base constructor for a Diffie-Hellman unified model using a key pair without user keying material. * * @param ephemeralKeyPair our ephemeral public and private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. */
public DHUParameterSpec(KeyPair ephemeralKeyPair, PublicKey otherPartyEphemeralKey) { this(ephemeralKeyPair.getPublic(), ephemeralKeyPair.getPrivate(), otherPartyEphemeralKey, null); }
Base constructor for a Diffie-Hellman unified model - calculation of our ephemeral public key is required and no user keying material is provided.
Params:
  • ephemeralPrivateKey – our ephemeral private key.
  • otherPartyEphemeralKey – the ephemeral public key sent by the other party.
/** * Base constructor for a Diffie-Hellman unified model - calculation of our ephemeral public key * is required and no user keying material is provided. * * @param ephemeralPrivateKey our ephemeral private key. * @param otherPartyEphemeralKey the ephemeral public key sent by the other party. */
public DHUParameterSpec(PrivateKey ephemeralPrivateKey, PublicKey otherPartyEphemeralKey) { this(null, ephemeralPrivateKey, otherPartyEphemeralKey, null); }
Return our ephemeral private key.
Returns:our ephemeral private key.
/** * Return our ephemeral private key. * * @return our ephemeral private key. */
public PrivateKey getEphemeralPrivateKey() { return ephemeralPrivateKey; }
Return our ephemeral public key, null if it was not provided.
Returns:our ephemeral public key, can be null.
/** * Return our ephemeral public key, null if it was not provided. * * @return our ephemeral public key, can be null. */
public PublicKey getEphemeralPublicKey() { return ephemeralPublicKey; }
Return the ephemeral other party public key.
Returns:the ephemeral other party public key.
/** * Return the ephemeral other party public key. * * @return the ephemeral other party public key. */
public PublicKey getOtherPartyEphemeralKey() { return otherPartyEphemeralKey; }
Return a copy of the user keying material, null if none is available.
Returns:a copy of the user keying material, can be null.
/** * Return a copy of the user keying material, null if none is available. * * @return a copy of the user keying material, can be null. */
public byte[] getUserKeyingMaterial() { return Arrays.clone(userKeyingMaterial); } }