From 6457634565ff0e8a2a19463c7a35d644887e8bde Mon Sep 17 00:00:00 2001 From: Franziskus Kiefer Date: Tue, 21 Jan 2025 11:17:47 +0100 Subject: [PATCH] updatge readme and docs --- README.md | 25 ++++++++-------- docs/index.md | 2 ++ docs/manual/index.md | 71 ++++++++++++++++++++++++++++++++++++++------ docs/publications.md | 16 ++++++++++ 4 files changed, 92 insertions(+), 22 deletions(-) create mode 100644 docs/publications.md diff --git a/README.md b/README.md index 7984d4c6a..56fdeb0a1 100644 --- a/README.md +++ b/README.md @@ -3,27 +3,25 @@

- 🌐 Website | - 📖 Book | - 📝 Blog | + 🌐 Website | + 📝 Blog | 💬 Zulip | - 🛠️ Internal docs | 🛝 Playground

# Hax -hax is a tool for high assurance translations that translates a large subset of -Rust into formal languages such as [F\*](https://www.fstar-lang.org/) or [Coq](https://coq.inria.fr/). -This extends the scope of the hacspec project, which was previously a DSL embedded in Rust, -to a usable tool for verifying Rust programs. +hax is a tool for high assurance translations of a large subset of +Rust into formal languages such as [F\*](https://www.fstar-lang.org/) or [Rocq](https://rocq-prover.org/). -> So what is hacspec now? +
+ So what is hacspec now? hacspec is the functional subset of Rust that can be used, together with a hacspec standard library, to write succinct, executable, and verifiable specifications in Rust. These specifications can be translated into formal languages with hax. +

@@ -34,9 +32,9 @@ These specifications can be translated into formal languages with hax. ## Learn more Here are some resources for learning more about hax: - - [Book](https://hacspec.org/book) (work in progress) - + [Quick start](https://hacspec.org/book/quick_start/intro.html) - + [Tutorial](https://hacspec.org/book/tutorial/index.html) + - [Manual](https://hax.cryspen.com/manual/index.html) (work in progress) + + [Quick start](https://hax.cryspen.com/manual/quick_start/index.html) + + [Tutorial](https://hax.cryspen.com/manual/tutorial/index.html) - [Examples](./examples/): the [examples directory](./examples/) contains a set of examples that show what hax can do for you. - Other [specifications](https://github.com/hacspec/specs) of cryptographic protocols. @@ -123,7 +121,8 @@ Quicklinks: ## Hacking on Hax The documentation of the internal crate of hax and its engine can be -found [here](https://hacspec.org/hax/). +found [here for the engine](https://hax.cryspen.com/engine/index.html) +and [here for the frontent](https://hax.cryspen.com/frontend/index.html). ### Edit the sources (Nix) diff --git a/docs/index.md b/docs/index.md index 824e07f98..2bf6412cd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,3 +2,5 @@ hax is a tool for high assurance translations of a large subset of Rust into formal languages such as [F\*](https://www.fstar-lang.org/) or [Rocq](https://rocq-prover.org/). + +Head over to the [Manual](./manual/index.md) to get started! diff --git a/docs/manual/index.md b/docs/manual/index.md index 2c29acec3..eacda1c2f 100644 --- a/docs/manual/index.md +++ b/docs/manual/index.md @@ -4,15 +4,68 @@ weight: -5 # Introduction -hax is a tool for high assurance translations that translates a large subset of -Rust into formal languages such as [F\*](https://www.fstar-lang.org/) or [Coq](https://coq.inria.fr/). -This extends the scope of the hacspec project, which was previously a DSL embedded in Rust, -to a usable tool for verifying Rust programs. +hax is a tool for high assurance translations of a large subset of +Rust into formal languages such as [F\*](https://www.fstar-lang.org/) or [Rocq](https://rocq-prover.org/). -> So what is **hacspec** now? +## Usage -hacspec is the functional subset of Rust that can be used, together with a hacspec -standard library, to write succinct, executable, and verifiable specifications in -Rust. -These specifications can be translated into formal languages with hax. +Hax is a cargo subcommand. +The command `cargo hax` accepts the following subcommands: + +* **`into`** (`cargo hax into BACKEND`): translate a Rust crate to the backend `BACKEND` (e.g. `fstar`, `coq`). +* **`json`** (`cargo hax json`): extract the typed AST of your crate as a JSON file. + +Note: + +* `BACKEND` can be `fstar`, `coq`, `easycrypt` or `pro-verif`. `cargo hax into --help` + gives the full list of supported backends. +* The subcommands `cargo hax`, `cargo hax into` and `cargo hax into + ` takes options. For instance, you can `cargo hax into + fstar --z3rlimit 100`. Use `--help` on those subcommands to list + all options. + +## Installation + +### Manual installation + +1. Make sure to have the following installed on your system: + + - [`opam`](https://opam.ocaml.org/) (`opam switch create 5.1.1`) + - [`rustup`](https://rustup.rs/) + - [`nodejs`](https://nodejs.org/) + - [`jq`](https://jqlang.github.io/jq/) + +2. Clone this repo: `git clone git@github.com:hacspec/hax.git && cd hax` +3. Run the [setup.sh](./setup.sh) script: `./setup.sh`. +4. Run `cargo-hax --help` + +### Nix + +This should work on [Linux](https://nixos.org/download.html#nix-install-linux), [MacOS](https://nixos.org/download.html#nix-install-macos) and [Windows](https://nixos.org/download.html#nix-install-windows). + +Prerequisites: Nix package +manager (with flakes enabled) + + - Either using the [Determinate Nix Installer](https://github.com/DeterminateSystems/nix-installer), with the following bash one-liner: + ```bash + curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install + ``` + - or following [those steps](https://github.com/mschwaig/howto-install-nix-with-flake-support). + ++ **Run hax on a crate directly** to get F\*/Coq/... (assuming you are in the crate's folder): + - `nix run github:hacspec/hax -- into fstar` extracts F*. + ++ **Install hax**: `nix profile install github:hacspec/hax`, then run `cargo hax --help` anywhere ++ **Note**: in any of the Nix commands above, replace `github:hacspec/hax` by `./dir` to compile a local checkout of hax that lives in `./some-dir` ++ **Setup binary cache**: [using Cachix](https://app.cachix.org/cache/hax), just `cachix use hax` + +### Docker + +1. Clone this repo: `git clone git@github.com:hacspec/hax.git && cd hax` +2. Build the docker image: `docker build -f .docker/Dockerfile . -t hax` +3. Get a shell: `docker run -it --rm -v /some/dir/with/a/crate:/work hax bash` +4. You can now run `cargo-hax --help` (notice here we use `cargo-hax` instead of `cargo hax`) + +Note: Please make sure that `$HOME/.cargo/bin` is in your `$PATH`, as +that is where `setup.sh` will install hax. diff --git a/docs/publications.md b/docs/publications.md new file mode 100644 index 000000000..bfcd23a56 --- /dev/null +++ b/docs/publications.md @@ -0,0 +1,16 @@ +--- +weight: 5 +--- + +# Publications + +* [📕 hacspec Tech report](https://hal.inria.fr/hal-03176482) +* [📕 HACSpec: A gateway to high-assurance cryptography](https://github.com/hacspec/hacspec/blob/master/rwc2023-abstract.pdf) +* [📕 Original hacspec paper](https://www.franziskuskiefer.de/publications/hacspec-ssr18-paper.pdf) + +### Secondary literature, using hacspec & hax: +* [📕 Last yard](https://eprint.iacr.org/2023/185) +* [📕 A Verified Pipeline from a Specification Language to Optimized, Safe Rust](https://github.com/hacspec/hacspec.github.io/blob/master/coqpl22-final61.pdf) at [CoqPL'22](https://popl22.sigplan.org/details/CoqPL-2022-papers/5/A-Verified-Pipeline-from-a-Specification-Language-to-Optimized-Safe-Rust) +* [📕 Hax - Enabling High Assurance Cryptographic Software](https://github.com/hacspec/hacspec.github.io/blob/master/RustVerify24.pdf) at [RustVerify24](https://sites.google.com/view/rustverify2024) +* [📕 A formal security analysis of Blockchain voting](https://github.com/hacspec/hacspec.github.io/blob/master/coqpl24-paper8-2.pdf) at [CoqPL'24](https://popl24.sigplan.org/details/CoqPL-2024-papers/8/A-formal-security-analysis-of-Blockchain-voting) +* [📕 Specifying Smart Contract with Hax and ConCert](https://github.com/hacspec/hacspec.github.io/blob/master/coqpl24-paper9-13.pdf) at [CoqPL'24](https://popl24.sigplan.org/details/CoqPL-2024-papers/9/Specifying-Smart-Contract-with-Hax-and-ConCert)