Package org.bouncycastle.jcajce.provider.asymmetric.ec

## Class KeyAgreementSpi

- java.lang.Object
- - javax.crypto.KeyAgreementSpi
  - - org.bouncycastle.jcajce.provider.asymmetric.util.BaseAgreementSpi
    - - org.bouncycastle.jcajce.provider.asymmetric.ec.KeyAgreementSpi

- Direct Known Subclasses:
    `KeyAgreementSpi.CDHwithSHA1KDFAndSharedInfo`, `KeyAgreementSpi.CDHwithSHA224KDFAndSharedInfo`, `KeyAgreementSpi.CDHwithSHA256KDFAndSharedInfo`, `KeyAgreementSpi.CDHwithSHA384KDFAndSharedInfo`, `KeyAgreementSpi.CDHwithSHA512KDFAndSharedInfo`, `KeyAgreementSpi.DH`, `KeyAgreementSpi.DHC`, `KeyAgreementSpi.DHUC`, `KeyAgreementSpi.DHUwithSHA1CKDF`, `KeyAgreementSpi.DHUwithSHA1KDF`, `KeyAgreementSpi.DHUwithSHA224CKDF`, `KeyAgreementSpi.DHUwithSHA224KDF`, `KeyAgreementSpi.DHUwithSHA256CKDF`, `KeyAgreementSpi.DHUwithSHA256KDF`, `KeyAgreementSpi.DHUwithSHA384CKDF`, `KeyAgreementSpi.DHUwithSHA384KDF`, `KeyAgreementSpi.DHUwithSHA512CKDF`, `KeyAgreementSpi.DHUwithSHA512KDF`, `KeyAgreementSpi.DHwithSHA1CKDF`, `KeyAgreementSpi.DHwithSHA1KDF`, `KeyAgreementSpi.DHwithSHA1KDFAndSharedInfo`, `KeyAgreementSpi.DHwithSHA224KDFAndSharedInfo`, `KeyAgreementSpi.DHwithSHA256CKDF`, `KeyAgreementSpi.DHwithSHA256KDFAndSharedInfo`, `KeyAgreementSpi.DHwithSHA384CKDF`, `KeyAgreementSpi.DHwithSHA384KDFAndSharedInfo`, `KeyAgreementSpi.DHwithSHA512CKDF`, `KeyAgreementSpi.DHwithSHA512KDFAndSharedInfo`, `KeyAgreementSpi.ECKAEGwithRIPEMD160KDF`, `KeyAgreementSpi.ECKAEGwithSHA1KDF`, `KeyAgreementSpi.ECKAEGwithSHA224KDF`, `KeyAgreementSpi.ECKAEGwithSHA256KDF`, `KeyAgreementSpi.ECKAEGwithSHA384KDF`, `KeyAgreementSpi.ECKAEGwithSHA512KDF`, `KeyAgreementSpi.MQV`, `KeyAgreementSpi.MQVwithSHA1CKDF`, `KeyAgreementSpi.MQVwithSHA1KDF`, `KeyAgreementSpi.MQVwithSHA1KDFAndSharedInfo`, `KeyAgreementSpi.MQVwithSHA224CKDF`, `KeyAgreementSpi.MQVwithSHA224KDF`, `KeyAgreementSpi.MQVwithSHA224KDFAndSharedInfo`, `KeyAgreementSpi.MQVwithSHA256CKDF`, `KeyAgreementSpi.MQVwithSHA256KDF`, `KeyAgreementSpi.MQVwithSHA256KDFAndSharedInfo`, `KeyAgreementSpi.MQVwithSHA384CKDF`, `KeyAgreementSpi.MQVwithSHA384KDF`, `KeyAgreementSpi.MQVwithSHA384KDFAndSharedInfo`, `KeyAgreementSpi.MQVwithSHA512CKDF`, `KeyAgreementSpi.MQVwithSHA512KDF`, `KeyAgreementSpi.MQVwithSHA512KDFAndSharedInfo`

      public class KeyAgreementSpi
      extends BaseAgreementSpi

  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
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `KeyAgreementSpi.CDHwithSHA1KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.CDHwithSHA224KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.CDHwithSHA256KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.CDHwithSHA384KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.CDHwithSHA512KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.DH` |
    `static class` | `KeyAgreementSpi.DHC` |
    `static class` | `KeyAgreementSpi.DHUC` |
    `static class` | `KeyAgreementSpi.DHUwithSHA1CKDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA1KDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA224CKDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA224KDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA256CKDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA256KDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA384CKDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA384KDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA512CKDF` |
    `static class` | `KeyAgreementSpi.DHUwithSHA512KDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA1CKDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA1KDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA1KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.DHwithSHA224KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.DHwithSHA256CKDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA256KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.DHwithSHA384CKDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA384KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.DHwithSHA512CKDF` |
    `static class` | `KeyAgreementSpi.DHwithSHA512KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.ECKAEGwithRIPEMD160KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.ECKAEGwithSHA1KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.ECKAEGwithSHA224KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.ECKAEGwithSHA256KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.ECKAEGwithSHA384KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.ECKAEGwithSHA512KDF` | KeyAgreement according to BSI TR-03111 chapter 4.3.1
    `static class` | `KeyAgreementSpi.MQV` |
    `static class` | `KeyAgreementSpi.MQVwithSHA1CKDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA1KDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA1KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.MQVwithSHA224CKDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA224KDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA224KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.MQVwithSHA256CKDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA256KDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA256KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.MQVwithSHA384CKDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA384KDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA384KDFAndSharedInfo` |
    `static class` | `KeyAgreementSpi.MQVwithSHA512CKDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA512KDF` |
    `static class` | `KeyAgreementSpi.MQVwithSHA512KDFAndSharedInfo` |

  - ### Field Summary

    - ### Fields inherited from class org.bouncycastle.jcajce.provider.asymmetric.util.BaseAgreementSpi

      `kdf, ukmParameters`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `KeyAgreementSpi​(java.lang.String kaAlgorithm, ECDHCUnifiedAgreement agreement, DerivationFunction kdf)` |
    `protected` | `KeyAgreementSpi​(java.lang.String kaAlgorithm, BasicAgreement agreement, DerivationFunction kdf)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected byte[]` | `bigIntToBytes​(java.math.BigInteger r)` |
    `protected byte[]` | `calcSecret()` |
    `protected java.security.Key` | `engineDoPhase​(java.security.Key key, boolean lastPhase)` |
    `protected void` | `engineInit​(java.security.Key key, java.security.SecureRandom random)` |
    `protected void` | `engineInit​(java.security.Key key, java.security.spec.AlgorithmParameterSpec params, java.security.SecureRandom random)` |

    - ### Methods inherited from class org.bouncycastle.jcajce.provider.asymmetric.util.BaseAgreementSpi

      `engineGenerateSecret, engineGenerateSecret, engineGenerateSecret, getAlgorithm, getKeySize, trimZeroes`

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

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

- - ### Constructor Detail

    - #### KeyAgreementSpi

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

    - #### KeyAgreementSpi

          protected KeyAgreementSpi​(java.lang.String kaAlgorithm,
                                    ECDHCUnifiedAgreement agreement,
                                    DerivationFunction kdf)

  - ### Method Detail

    - #### bigIntToBytes

          protected byte[] bigIntToBytes​(java.math.BigInteger r)

    - #### 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`

    - #### 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`

    - #### calcSecret

          protected byte[] calcSecret()

      Specified by:
        `calcSecret` in class `BaseAgreementSpi`