org.bouncycastle.jce.provider.asymmetric.ec

## Class KeyAgreement

- java.lang.Object
- - javax.crypto.KeyAgreementSpi
  - - org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement

Direct Known Subclasses:
  KeyAgreement.DH, KeyAgreement.DHC, KeyAgreement.DHwithSHA1KDF, KeyAgreement.MQV, KeyAgreement.MQVwithSHA1KDF

    public class KeyAgreement
    extends javax.crypto.KeyAgreementSpi

Diffie-Hellman key agreement using elliptic curve keys, ala IEEE P1363 both the simple one, and the simple one with cofactors are supported. Also, MQV key agreement per SEC-1

### Nested Class Summary

Nested Classes
`static class` `KeyAgreement.DH`
`static class` `KeyAgreement.DHC`
`static class` `KeyAgreement.DHwithSHA1KDF`
`static class` `KeyAgreement.MQV`
`static class` `KeyAgreement.MQVwithSHA1KDF`

### Constructor Summary

Constructors
`protected` `KeyAgreement(java.lang.String kaAlgorithm, BasicAgreement agreement, DerivationFunction kdf)`

### Method Summary

Methods
`protected java.security.Key` `engineDoPhase(java.security.Key key, boolean lastPhase)`
`protected byte[]` `engineGenerateSecret()`
`protected int` `engineGenerateSecret(byte[] sharedSecret, int offset)`
`protected javax.crypto.SecretKey` `engineGenerateSecret(java.lang.String algorithm)`
`protected void` `engineInit(java.security.Key key, java.security.spec.AlgorithmParameterSpec params, java.security.SecureRandom random)`
`protected void` `engineInit(java.security.Key key, java.security.SecureRandom random)`

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

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

### Constructor Detail

#### KeyAgreement

    protected KeyAgreement(java.lang.String kaAlgorithm,
                BasicAgreement agreement,
                DerivationFunction kdf)

### Method Detail

#### engineDoPhase

    protected java.security.Key engineDoPhase(java.security.Key key,
                                  boolean lastPhase)
                                       throws java.security.InvalidKeyException,
                                              java.lang.IllegalStateException

Specified by:
  `engineDoPhase` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.security.InvalidKeyException`
  `java.lang.IllegalStateException`

#### engineGenerateSecret

    protected byte[] engineGenerateSecret()
                                   throws java.lang.IllegalStateException

Specified by:
  `engineGenerateSecret` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.lang.IllegalStateException`

#### engineGenerateSecret

    protected int engineGenerateSecret(byte[] sharedSecret,
                           int offset)
                                throws java.lang.IllegalStateException,
                                       javax.crypto.ShortBufferException

Specified by:
  `engineGenerateSecret` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.lang.IllegalStateException`
  `javax.crypto.ShortBufferException`

#### engineGenerateSecret

    protected javax.crypto.SecretKey engineGenerateSecret(java.lang.String algorithm)
                                                   throws java.security.NoSuchAlgorithmException

Specified by:
  `engineGenerateSecret` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.security.NoSuchAlgorithmException`

#### engineInit

    protected void engineInit(java.security.Key key,
                  java.security.spec.AlgorithmParameterSpec params,
                  java.security.SecureRandom random)
                       throws java.security.InvalidKeyException,
                              java.security.InvalidAlgorithmParameterException

Specified by:
  `engineInit` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.security.InvalidKeyException`
  `java.security.InvalidAlgorithmParameterException`

#### engineInit

    protected void engineInit(java.security.Key key,
                  java.security.SecureRandom random)
                       throws java.security.InvalidKeyException

Specified by:
  `engineInit` in class `javax.crypto.KeyAgreementSpi`
Throws:
  `java.security.InvalidKeyException`