twenty-first 0.43.0

Collection of mathematics routines and cryptography for the twenty-first century.
Documentation
# twenty-first

[![GitHub CI](https://github.com/Neptune-Crypto/twenty-first/actions/workflows/main.yml/badge.svg)](https://github.com/Neptune-Crypto/twenty-first/actions)
[![crates.io](https://img.shields.io/crates/v/twenty-first.svg)](https://crates.io/crates/twenty-first)
[![Coverage Status](https://coveralls.io/repos/github/Neptune-Crypto/twenty-first/badge.svg?branch=master)](https://coveralls.io/github/Neptune-Crypto/twenty-first?branch=master)

A collection of cryptography primitives written in Rust.

## Content of this library

This library contains primarily the following cryptographic primitives:

- The Tip5 hash function
  - [The Tip5 Hash Function for Recursive STARKs]https://eprint.iacr.org/2023/107
- Lattice-crypto
  - arithmetic for the quotient ring $\mathbb{F}_ p[X] / \langle X^{64} + 1 \rangle$
  - arithmetic for modules over this quotient ring
  - a IND-CCA2-secure key encapsulation mechanism
  - [Lattice-Based Cryptography in Miden VM]https://eprint.iacr.org/2022/1041
- `BFieldElement`, `XFieldElement`
  - The prime-field type $\mathbb{F}_p$ where $p = 2^{64} - 2^{32} + 1$
  - The extension field $\mathbb{F}_p[x]/(x^3 - x + 1)$
  - A codec trait for encoding and decoding structs as `Vec`s of `BFieldElement`
  - [An efficient prime for number-theoretic transforms]https://cp4space.hatsya.com/2021/09/01/an-efficient-prime-for-number-theoretic-transforms/
- NTT
  - Number Theoretic Transform (discrete Fast Fourier Transform)
  - [Anatomy of a STARK, Part 6: Speeding Things Up]https://neptune.cash/learn/stark-anatomy/faster/
- Univariate and multivariate polynomials
- Merkle Trees
- Merkle Mountain Ranges

## Release protocol

While twenty-first's version is `0.x.y`, releasing a new version:

1. Is the release backwards-compatible?
   Then the new version is `0.x.y+1`. Otherwise the new version is `0.x+1.0`.
2. Checkout the last commit on Mjolnir, and run `make bench-publish`. Save the benchmark's result
   and verify that there is no performance degredation.
3. Create a commit that increases `version = "0.x.y"` in twenty-first/Cargo.toml.
   The commit message should give a one-line summary of each release change. Include the benchmark
   result at the bottom.
4. Have a `v0.x.y` [git tag][tag] on this commit created. (`git tag v0.x.y [sha]`, `git push upstream --tags`)
5. Have this commit `cargo publish`ed on [crates.io][crates] and in GitHub [tags][tags].

[tag]: https://git-scm.com/book/en/v2/Git-Basics-Tagging
[tags]: https://github.com/Neptune-Crypto/twenty-first/tags
[crates]: https://crates.io/crates/twenty-first/versions

If you do not have the privilege to create git tags or run `cargo publish`, submit a PR and the merger will take care of these.

## Building

For detailed buildings instructions, see the description in `HACKING.md`.