aboutsummaryrefslogtreecommitdiff
path: root/docs/api/hashing.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/api/hashing.md')
-rw-r--r--docs/api/hashing.md139
1 files changed, 139 insertions, 0 deletions
diff --git a/docs/api/hashing.md b/docs/api/hashing.md
new file mode 100644
index 000000000..58bb05034
--- /dev/null
+++ b/docs/api/hashing.md
@@ -0,0 +1,139 @@
+{% callout %}
+
+Bun implements the `createHash` and `createHmac` functions from [`node:crypto`](https://nodejs.org/api/crypto.html) in addition to the Bun-native APIs documented below.
+
+{% /callout %}
+
+## `Bun.hash`
+
+`Bun.hash` is a collection of utilities for _non-cryptographic_ hashing. Non-cryptographic hashing algorithms are optimized for speed of computation over collision-resistance or security.
+
+The standard `Bun.hash` functions uses [Wyhash](https://github.com/wangyi-fudan/wyhash) to generate a 64-bit hash from an input of arbitrary size.
+
+```ts
+Bun.hash("some data here");
+// 976213160445840
+```
+
+The input can be a string, `TypedArray`, `DataView`, `ArrayBuffer`, or `SharedArrayBuffer`.
+
+```ts
+const arr = new Uint8Array([1, 2, 3, 4]);
+
+Bun.hash("some data here");
+Bun.hash(arr);
+Bun.hash(arr.buffer);
+Bun.hash(new DataView(arr.buffer));
+```
+
+Optionally, an integer seed can be specified as the second parameter.
+
+```ts
+Bun.hash("some data here", 1234);
+// 1173484059023252
+```
+
+Additional hashing algorithms are available as properties on `Bun.hash`. The API is the same for each.
+
+```ts
+Bun.hash.wyhash("data", 1234); // equivalent to Bun.hash()
+Bun.hash.crc32("data", 1234);
+Bun.hash.adler32("data", 1234);
+Bun.hash.cityHash32("data", 1234);
+Bun.hash.cityHash64("data", 1234);
+Bun.hash.murmur32v3("data", 1234);
+Bun.hash.murmur64v2("data", 1234);
+```
+
+## `Bun.CryptoHasher`
+
+`Bun.CryptoHasher` is a general-purpose utility class that lets you incrementally compute a hash of string or binary data using a range of cryptographic hash algorithms. The following algorithms are supported:
+
+- `"blake2b256"`
+- `"md4"`
+- `"md5"`
+- `"ripemd160"`
+- `"sha1"`
+- `"sha224"`
+- `"sha256"`
+- `"sha384"`
+- `"sha512"`
+- `"sha512-256"`
+
+```ts
+const hasher = new Bun.CryptoHasher("sha256");
+hasher.update("hello world");
+hasher.digest();
+// Uint8Array(32) [ <byte>, <byte>, ... ]
+```
+
+Once initialized, data can be incrementally fed to to the hasher using `.update()`. This method accepts `string`, `TypedArray`, and `ArrayBuffer`.
+
+```ts
+const hasher = new Bun.CryptoHasher();
+
+hasher.update("hello world");
+hasher.update(new Uint8Array([1, 2, 3]));
+hasher.update(new ArrayBuffer(10));
+```
+
+If a `string` is passed, an optional second parameter can be used to specify the encoding (default `'utf-8'`). The following encodings are supported:
+
+{% table %}
+
+---
+
+- Binary encodings
+- `"base64"` `"base64url"` `"hex"` `"binary"`
+
+---
+
+- Character encodings
+- `"utf8"` `"utf-8"` `"utf16le"` `"latin1"`
+
+---
+
+- Legacy character encodings
+- `"ascii"` `"binary"` `"ucs2"` `"ucs-2"`
+
+{% /table %}
+
+```ts
+hasher.update("hello world"); // defaults to utf8
+hasher.update("hello world", "hex");
+hasher.update("hello world", "base64");
+hasher.update("hello world", "latin1");
+```
+
+After the data has been feed into the hasher, a final hash can be computed using `.digest()`. By default, this method returns a `Uint8Array` containing the hash.
+
+```ts
+const hasher = new Bun.CryptoHasher();
+hasher.update("hello world");
+
+hasher.digest();
+// => Uint8Array(32) [ 185, 77, 39, 185, 147, ... ]
+```
+
+The `.digest()` method can optionally return the hash as a string. To do so, specify an encoding:
+
+```ts
+hasher.digest("base64");
+// => "uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek="
+
+hasher.digest("hex");
+// => "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
+```
+
+Alternatively, the method can write the hash into a pre-existing `TypedArray` instance. This may be desirable in some performance-sensitive applications.
+
+```ts
+const arr = new Uint8Array(32);
+
+hasher.digest(arr);
+
+console.log(arr);
+// => Uint8Array(32) [ 185, 77, 39, 185, 147, ... ]
+```
+
+<!-- Bun.sha; -->