morus 0.1.3

MORUS authenticated cipher (MORUS-1280-128)
Documentation
# MORUS for Rust

This is a Rust implementation of
[MORUS](https://competitions.cr.yp.to/round3/morusv2.pdf) (MORUS-1280-128)

MORUS is a fast authenticated cipher for platforms without hardware AES acceleration.

It performs especially well on WebAssembly compared to alternatives.

# Cargo flags

- `std`: allow dynamic allocations

`std` is the default.

A benchmark can be run that way:

```sh
export RUSTFLAGS="-C target-cpu=native"
cargo bench
```

# Benchmarks

Benchmarks take a 16384 bytes input block. Results are in bytes per second.

## Rust implementations

Crates:

- `aes-gcm`
- `chacha20poly1305`
- `morus`

Macbook Pro - 2,4 GHz Intel Core i9.

| cipher            | speed    |
| ----------------- | -------- |
| aes128-gcm        | 1.91 G/s |
| chacha20-poly1305 | 1.48 G/s |
| morus             | 3.76 G/s |

WebAssembly (Wasmtime)

| cipher                       | speed      |
| ---------------------------- | ---------- |
| aes128-gcm                   | 44.13 M/s  |
| chacha20-poly1305            | 193.05 M/s |
| chacha20-poly1305 (+simd128) | 196.54 M/s |
| morus                        | 1.07 G/s   |
| morus (+simd128)             | 1.38 G/s   |

WebAssembly (WAVM)

| cipher            | speed      |
| ----------------- | ---------- |
| aes128-gcm        | 57.01 M/s  |
| chacha20-poly1305 | 335.82 M/s |
| morus             | 1.95 G/s   |

Other implementations (macOS native)

| cipher (implementation, runtime) | speed    |
| -------------------------------- | -------- |
| zig-morus (Zig)                  | 5.89 G/s |

Other implementations (WebAssembly)

| cipher (implementation, runtime)  | speed    |
| --------------------------------- | -------- |
| zig-morus (Zig, wasmtime+simd128) | 1.77 G/s |
| zig-morus (Zig, WAVM)             | 3.50 G/s |