This is documentation for the next version of K6. For the latest stable release, go to the latest version.
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
import { crypto } from 'k6/experimental/webcrypto';
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);
};