twenty-first 1.1.0

Collection of mathematics routines and cryptography for the twenty-first century.
Documentation
# Building and Testing `twenty-first` for wasm32

This document provides instructions on how to build and test the `twenty-first` crate for the `wasm32-unknown-unknown`
target, which allows the library to run in WebAssembly environments.

## What is wasm32?

WebAssembly (Wasm) is a binary instruction format for a stack-based virtual machine. The `wasm32-unknown-unknown` target
allows Rust code to be compiled into Wasm, enabling high-performance applications to run directly in web browsers and
other Wasm-compatible environments. This is ideal for bringing computationally intensive tasks, like the cryptographic
operations in `twenty-first`, to the web without sacrificing performance.

For more detailed information, see the official [WebAssembly website](https://webassembly.org/).

## Required Tools and Setup

To build and test for `wasm32`, you need to set up your Rust environment with the correct target and tooling.

### Add the `wasm32` Target

First, add the `wasm32-unknown-unknown` target to your Rust toolchain using `rustup`:

```shell
rustup target add wasm32-unknown-unknown
```

### Install `wasm-pack`

`wasm-pack` is the primary tool for building, testing, and publishing Rust-generated WebAssembly. It coordinates the
build process and handles the interaction with other tools like `wasm-bindgen`.

Install `wasm-pack` using `cargo`:

```shell
cargo install wasm-pack
```

### Install Node.js (for Testing)

Running the `wasm32` test suite requires a JavaScript runtime. `wasm-pack` uses Node.js for this purpose.

You must have Node.js v20 (LTS) or later installed. The `getrandom` crate, a dependency for our tests, requires the Web
Crypto API, which is stable and fully supported in all modern LTS releases of Node.js.

You can download Node.js from the [official Node.js website](https://nodejs.org/) or install it using a version manager
like `nvm`.

## Build and Test Commands

With the environment configured, you can now build and test the crate. Make sure your current working directory is
`twenty-first/twenty-first` before executing any of the commands below.

### Build the Crate

To compile the `twenty-first` crate for WebAssembly, run the following command:

```shell
wasm-pack build --target nodejs
```

This command compiles the crate and generates the necessary JavaScript bindings, placing the output in a `pkg/`
directory.

### Run Tests

To run the test suite for the `wasm32` target, use the `test` command from `wasm-pack`. This command will compile the
tests and execute them using your installed Node.js runtime.

```shell
wasm-pack test --node
```