---
title: "hmac( algorithm, secret, data, outputEncoding ) | Grafana k6 documentation"
description: "Use HMAC to sign input data."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# hmac( algorithm, secret, data, outputEncoding )

> Note
> 
> A module with a better and standard API exists.
> 
> The [crypto module](/docs/k6/latest/javascript-api/crypto/) partially implements the [WebCrypto API](https://www.w3.org/TR/WebCryptoAPI/), supporting more features than [k6/crypto](/docs/k6/latest/javascript-api/k6-crypto/).

Use [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) to sign a piece of data using a shared secret.

Expand table

| Parameter      | Type                 | Description                                                                                                                         |
|----------------|----------------------|-------------------------------------------------------------------------------------------------------------------------------------|
| algorithm      | string               | The hashing algorithm to use. One of `md4`, `md5`, `sha1`, `sha256`, `sha384`, `sha512`, `sha512_224`, `sha512_256` or `ripemd160`. |
| secret         | string / ArrayBuffer | A shared secret used to sign the data.                                                                                              |
| data           | string / ArrayBuffer | The data to sign.                                                                                                                   |
| outputEncoding | string               | Describes the type of encoding to use for the hash value. Can be “base64”, “base64url”, “base64rawurl”, “hex” or “binary”.          |

### Returns

Expand table

| Type           | Description                                                                                                                                             |
|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| string / Array | The hash digest as string (for “base64”, “base64url”, “base64rawurl”, “hex” `outputEncoding`) or raw array of integers (for “binary” `outputEncoding`). |

### Example

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
import crypto from 'k6/crypto';

export default function () {
  let hash = crypto.hmac('sha256', 'mysecret', 'hello world!', 'hex');
  console.log(hash);
  const binArray = [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33];
  hash = crypto.hmac('sha256', 'mysecret', new Uint8Array(binArray).buffer, 'hex');
  console.log(hash);
}
```

The above script should result in the following being printed during execution:

Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```bash
INFO[0000] 893a72d8cab129e5ba85aea4599fd53f59bfe652cff4098a3780313228d8c20f
INFO[0000] 893a72d8cab129e5ba85aea4599fd53f59bfe652cff4098a3780313228d8c20f
```
