deriveBits
It takes as its arguments the base key, the derivation algorithm to use, and the length of the bits to derive. It returns a Promise which will be fulfilled with an ArrayBuffer containing the derived bits. This array of bits can be used as a key for encryption or decryption as a shared secret.
Usage
deriveBits(algorithm, baseKey, length)Parameters
| Name | Type | Description | 
|---|---|---|
| algorithm | EcdhKeyDeriveParams | An object defining a derivation algorithm to use. | 
| baseKey | CryptoKey | Represent an input to derivation algorithm. Currently it could be only a private ECDH key. | 
| length | number | Optional. A length of the bits to derive. Currently, only multiplies of 8 are supported. | 
Supported algorithms
| ECDH | HKDF | PBKDF2 | 
|---|---|---|
| ✅ EcdhKeyDeriveParams | ❌ | ❌ | 
Return Value
A Promise that resolves to a new ArrayBuffer containing the derived bits.
Example
export default async function () {
  // Generate a key pair for Alice
  const aliceKeyPair = await crypto.subtle.generateKey(
    {
      name: 'ECDH',
      namedCurve: 'P-256',
    },
    true,
    ['deriveKey', 'deriveBits']
  );
  // Generate a key pair for Bob
  const bobKeyPair = await crypto.subtle.generateKey(
    {
      name: 'ECDH',
      namedCurve: 'P-256',
    },
    true,
    ['deriveKey', 'deriveBits']
  );
  // Derive shared secret for Alice
  const aliceSharedSecret = await deriveSharedSecret(aliceKeyPair.privateKey, bobKeyPair.publicKey);
  // Derive shared secret for Bob
  const bobSharedSecret = await deriveSharedSecret(bobKeyPair.privateKey, aliceKeyPair.publicKey);
  console.log('alice shared secret: ' + printArrayBuffer(aliceSharedSecret));
  console.log('bob shared secret: ' + printArrayBuffer(bobSharedSecret));
}
async function deriveSharedSecret(privateKey, publicKey) {
  return crypto.subtle.deriveBits(
    {
      name: 'ECDH',
      public: publicKey,
    },
    privateKey,
    256
  );
}
const printArrayBuffer = (buffer) => {
  const view = new Uint8Array(buffer);
  return Array.from(view);
};





