# CryptoAgreementBinding

`import { CryptoAgreementBinding } from "destack:crypto/binding";`

Agreement binding family.

```ds title="CryptoAgreementBinding"
export interface CryptoAgreementBinding {
    deriveSharedSecret(privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, algorithm: CryptoKeyAgreementAlgorithm): Result<uint8[], HostError>;
    deriveAgreementBits(privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, request: &'b readonly CryptoAgreementBits<'a>): Result<uint8[], HostError>;
    deriveAgreementKey(store: CryptoStoreHandle, privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, derivation: &'b readonly CryptoAgreementDerivation<'a>, key: &'c readonly CryptoDerivedKey): Result<CryptoKeyHandle, HostError>;
}
```

[language/library/src/crypto/binding/agreement.ds:82:126](https://github.com/destack-sh/destack/blob/main/language/library/src/crypto/binding/agreement.ds#L82-L126)

## Members

### `deriveSharedSecret(privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, algorithm: CryptoKeyAgreementAlgorithm): Result<uint8[], HostError>`

Derive one shared secret from one local private key and one peer public key.

### `deriveAgreementBits(privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, request: &'b readonly CryptoAgreementBits<'a>): Result<uint8[], HostError>`

Derive raw bytes from one local private key and one peer public key.

### `deriveAgreementKey(store: CryptoStoreHandle, privateKey: CryptoKeyHandle, peerPublicKey: CryptoKeyHandle, derivation: &'b readonly CryptoAgreementDerivation<'a>, key: &'c readonly CryptoDerivedKey): Result<CryptoKeyHandle, HostError>`

Derive one key from one local private key and one peer public key.
