lockstitch 0.16.0

Lockstitch is an incremental, stateful cryptographic primitive for symmetric-key cryptographic operations in complex protocols.
Documentation
# Performance

## `x86_64` (GCP `n2-standard-4`, Intel Ice Lake, `+aes,+ssse3`)

```text
benchmarks      fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ aead                       │               │               │               │         │
│  ├─ 16        398.9 ns      │ 79.44 µs      │ 412 ns        │ 414.9 ns      │ 1913971 │ 1913971
│  │            38.24 MiB/s   │ 196.6 KiB/s   │ 37.03 MiB/s   │ 36.77 MiB/s   │         │
│  ├─ 256       407 ns        │ 3.563 µs      │ 412.2 ns      │ 414.2 ns      │ 270486  │ 2163888
│  │            599.8 MiB/s   │ 68.51 MiB/s   │ 592.1 MiB/s   │ 589.2 MiB/s   │         │
│  ├─ 1024      479.6 ns      │ 36.28 µs      │ 494.3 ns      │ 498 ns        │ 1551081 │ 1551081
│  │            1.988 GiB/s   │ 26.91 MiB/s   │ 1.929 GiB/s   │ 1.914 GiB/s   │         │
│  ├─ 16384     1.808 µs      │ 108.4 µs      │ 1.821 µs      │ 1.837 µs      │ 491783  │ 491783
│  │            8.435 GiB/s   │ 144 MiB/s     │ 8.378 GiB/s   │ 8.305 GiB/s   │         │
│  ╰─ 1048576   91.14 µs      │ 217.2 µs      │ 91.47 µs      │ 92.76 µs      │ 9095    │ 9095
│               10.71 GiB/s   │ 4.494 GiB/s   │ 10.67 GiB/s   │ 10.52 GiB/s   │         │
├─ hash                       │               │               │               │         │
│  ├─ 16        133.3 ns      │ 2.381 µs      │ 135.3 ns      │ 136.2 ns      │ 390679  │ 6250864
│  │            114.3 MiB/s   │ 6.407 MiB/s   │ 112.7 MiB/s   │ 112 MiB/s     │         │
│  ├─ 256       329.8 ns      │ 7.549 µs      │ 336.6 ns      │ 338.2 ns      │ 626000  │ 2504000
│  │            740 MiB/s     │ 32.33 MiB/s   │ 725.2 MiB/s   │ 721.8 MiB/s   │         │
│  ├─ 1024      905.8 ns      │ 64.18 µs      │ 937.3 ns      │ 943.8 ns      │ 926478  │ 926478
│  │            1.052 GiB/s   │ 15.21 MiB/s   │ 1.017 GiB/s   │ 1.01 GiB/s    │         │
│  ├─ 16384     12.42 µs      │ 67.98 µs      │ 12.66 µs      │ 12.71 µs      │ 77402   │ 77402
│  │            1.227 GiB/s   │ 229.8 MiB/s   │ 1.204 GiB/s   │ 1.199 GiB/s   │         │
│  ╰─ 1048576   795.5 µs      │ 888.6 µs      │ 803.3 µs      │ 804.9 µs      │ 1216    │ 1216
│               1.227 GiB/s   │ 1.098 GiB/s   │ 1.215 GiB/s   │ 1.213 GiB/s   │         │
├─ hash_writer                │               │               │               │         │
│  ├─ 16        168.1 ns      │ 19.13 µs      │ 176.6 ns      │ 177.9 ns      │ 3746008 │ 3746008
│  │            90.74 MiB/s   │ 816.6 KiB/s   │ 86.39 MiB/s   │ 85.72 MiB/s   │         │
│  ├─ 256       368.1 ns      │ 66.24 µs      │ 379.6 ns      │ 382.7 ns      │ 2114318 │ 2114318
│  │            663.1 MiB/s   │ 3.685 MiB/s   │ 642.9 MiB/s   │ 637.8 MiB/s   │         │
│  ├─ 1024      945.8 ns      │ 66.81 µs      │ 968.1 ns      │ 976.4 ns      │ 939151  │ 939151
│  │            1.008 GiB/s   │ 14.61 MiB/s   │ 1008 MiB/s    │ 1000 MiB/s    │         │
│  ├─ 16384     12.54 µs      │ 57.52 µs      │ 12.78 µs      │ 12.84 µs      │ 77339   │ 77339
│  │            1.216 GiB/s   │ 271.5 MiB/s   │ 1.193 GiB/s   │ 1.188 GiB/s   │         │
│  ╰─ 1048576   799 µs        │ 973.9 µs      │ 810 µs        │ 811.2 µs      │ 1233    │ 1233
│               1.222 GiB/s   │ 1.002 GiB/s   │ 1.205 GiB/s   │ 1.203 GiB/s   │         │
├─ prf                        │               │               │               │         │
│  ├─ 16        123.6 ns      │ 2.002 µs      │ 125.9 ns      │ 126.6 ns      │ 414526  │ 6632416
│  │            123.3 MiB/s   │ 7.621 MiB/s   │ 121.1 MiB/s   │ 120.5 MiB/s   │         │
│  ├─ 256       142.3 ns      │ 8.977 µs      │ 145.8 ns      │ 146.7 ns      │ 1221139 │ 4884556
│  │            1.674 GiB/s   │ 27.19 MiB/s   │ 1.634 GiB/s   │ 1.624 GiB/s   │         │
│  ├─ 1024      192.5 ns      │ 6.197 µs      │ 195.7 ns      │ 196.7 ns      │ 259338  │ 4149408
│  │            4.952 GiB/s   │ 157.5 MiB/s   │ 4.871 GiB/s   │ 4.846 GiB/s   │         │
│  ├─ 16384     1.238 µs      │ 31.61 µs      │ 1.267 µs      │ 1.29 µs       │ 673080  │ 673080
│  │            12.32 GiB/s   │ 494.2 MiB/s   │ 12.03 GiB/s   │ 11.82 GiB/s   │         │
│  ╰─ 1048576   71.63 µs      │ 138.1 µs      │ 71.88 µs      │ 72.61 µs      │ 11163   │ 11163
│               13.63 GiB/s   │ 7.066 GiB/s   │ 13.58 GiB/s   │ 13.44 GiB/s   │         │
╰─ stream                     │               │               │               │         │
   ├─ 16        267.4 ns      │ 5.754 µs      │ 271.2 ns      │ 272.9 ns      │ 413709  │ 3309672
   │            57.04 MiB/s   │ 2.651 MiB/s   │ 56.25 MiB/s   │ 55.9 MiB/s    │         │
   ├─ 256       285.4 ns      │ 10.92 µs      │ 290.8 ns      │ 292.1 ns      │ 709103  │ 2836412
   │            855.2 MiB/s   │ 22.34 MiB/s   │ 839.4 MiB/s   │ 835.6 MiB/s   │         │
   ├─ 1024      349.6 ns      │ 16.87 µs      │ 355 ns        │ 356.8 ns      │ 588053  │ 2352212
   │            2.727 GiB/s   │ 57.85 MiB/s   │ 2.685 GiB/s   │ 2.672 GiB/s   │         │
   ├─ 16384     1.688 µs      │ 84.88 µs      │ 1.698 µs      │ 1.724 µs      │ 520452  │ 520452
   │            9.034 GiB/s   │ 184 MiB/s     │ 8.985 GiB/s   │ 8.847 GiB/s   │         │
   ╰─ 1048576   91.02 µs      │ 169.5 µs      │ 91.25 µs      │ 92.05 µs      │ 9167    │ 9167
                10.72 GiB/s   │ 5.76 GiB/s    │ 10.7 GiB/s    │ 10.6 GiB/s    │         │
```

## `aarch64` (Apple M2 Air 2022, rustc 1.73)

```text
benchmarks      fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ aead                       │               │               │               │         │
│  ├─ 16        166.3 ns      │ 47.83 µs      │ 249.6 ns      │ 259.6 ns      │ 3175651 │ 3175651
│  │            91.72 MiB/s   │ 326.6 KiB/s   │ 61.11 MiB/s   │ 58.77 MiB/s   │         │
│  ├─ 256       254.9 ns      │ 3.624 µs      │ 267.9 ns      │ 270.2 ns      │ 197589  │ 3161424
│  │            957.7 MiB/s   │ 67.35 MiB/s   │ 911.2 MiB/s   │ 903.4 MiB/s   │         │
│  ├─ 1024      304.3 ns      │ 3.687 µs      │ 317.4 ns      │ 320.3 ns      │ 165652  │ 2650432
│  │            3.133 GiB/s   │ 264.8 MiB/s   │ 3.004 GiB/s   │ 2.976 GiB/s   │         │
│  ├─ 16384     1.239 µs      │ 12.83 µs      │ 1.301 µs      │ 1.311 µs      │ 164479  │ 657916
│  │            12.31 GiB/s   │ 1.189 GiB/s   │ 11.72 GiB/s   │ 11.63 GiB/s   │         │
│  ╰─ 1048576   65.54 µs      │ 115.8 µs      │ 65.87 µs      │ 66.68 µs      │ 13700   │ 13700
│               14.89 GiB/s   │ 8.43 GiB/s    │ 14.82 GiB/s   │ 14.64 GiB/s   │         │
├─ hash                       │               │               │               │         │
│  ├─ 16        88.88 ns      │ 927.4 ns      │ 90.83 ns      │ 91.77 ns      │ 114865  │ 7351360
│  │            171.6 MiB/s   │ 16.45 MiB/s   │ 167.9 MiB/s   │ 166.2 MiB/s   │         │
│  ├─ 256       187.1 ns      │ 3.135 µs      │ 197.6 ns      │ 198.6 ns      │ 255227  │ 4083632
│  │            1.273 GiB/s   │ 77.87 MiB/s   │ 1.206 GiB/s   │ 1.2 GiB/s     │         │
│  ├─ 1024      499.6 ns      │ 7.489 µs      │ 515.3 ns      │ 518.6 ns      │ 219829  │ 1758632
│  │            1.908 GiB/s   │ 130.3 MiB/s   │ 1.85 GiB/s    │ 1.838 GiB/s   │         │
│  ├─ 16384     6.833 µs      │ 68.12 µs      │ 6.916 µs      │ 7.068 µs      │ 137611  │ 137611
│  │            2.233 GiB/s   │ 229.3 MiB/s   │ 2.206 GiB/s   │ 2.158 GiB/s   │         │
│  ╰─ 1048576   434.8 µs      │ 526.9 µs      │ 435 µs        │ 443 µs        │ 2226    │ 2226
│               2.245 GiB/s   │ 1.853 GiB/s   │ 2.244 GiB/s   │ 2.204 GiB/s   │         │
├─ hash_writer                │               │               │               │         │
│  ├─ 16        111 ns        │ 767.2 ns      │ 118.1 ns      │ 118.8 ns      │ 128962  │ 8253568
│  │            137.4 MiB/s   │ 19.88 MiB/s   │ 129.1 MiB/s   │ 128.3 MiB/s   │         │
│  ├─ 256       213.2 ns      │ 3.137 µs      │ 221 ns        │ 222.4 ns      │ 276452  │ 4423232
│  │            1.118 GiB/s   │ 77.8 MiB/s    │ 1.078 GiB/s   │ 1.071 GiB/s   │         │
│  ├─ 1024      536.1 ns      │ 7.02 µs       │ 551.7 ns      │ 553.5 ns      │ 223687  │ 1789496
│  │            1.778 GiB/s   │ 139.1 MiB/s   │ 1.728 GiB/s   │ 1.722 GiB/s   │         │
│  ├─ 16384     6.999 µs      │ 66.62 µs      │ 7.083 µs      │ 7.199 µs      │ 138315  │ 138315
│  │            2.179 GiB/s   │ 234.5 MiB/s   │ 2.154 GiB/s   │ 2.119 GiB/s   │         │
│  ╰─ 1048576   447.8 µs      │ 831.5 µs      │ 454.1 µs      │ 468 µs        │ 2136    │ 2136
│               2.18 GiB/s    │ 1.174 GiB/s   │ 2.15 GiB/s    │ 2.086 GiB/s   │         │
├─ prf                        │               │               │               │         │
│  ├─ 16        83.02 ns      │ 734 ns        │ 86.93 ns      │ 88.2 ns       │ 117812  │ 7539968
│  │            183.7 MiB/s   │ 20.78 MiB/s   │ 175.5 MiB/s   │ 172.9 MiB/s   │         │
│  ├─ 256       101.2 ns      │ 9.804 µs      │ 106.4 ns      │ 107.8 ns      │ 204696  │ 6550272
│  │            2.354 GiB/s   │ 24.9 MiB/s    │ 2.239 GiB/s   │ 2.211 GiB/s   │         │
│  ├─ 1024      146.8 ns      │ 1.641 µs      │ 153.3 ns      │ 154.7 ns      │ 151469  │ 4847008
│  │            6.495 GiB/s   │ 594.8 MiB/s   │ 6.219 GiB/s   │ 6.161 GiB/s   │         │
│  ├─ 16384     1.041 µs      │ 13.34 µs      │ 1.114 µs      │ 1.126 µs      │ 175117  │ 700468
│  │            14.65 GiB/s   │ 1.143 GiB/s   │ 13.69 GiB/s   │ 13.54 GiB/s   │         │
│  ╰─ 1048576   61.74 µs      │ 123.1 µs      │ 66.12 µs      │ 69.75 µs      │ 12433   │ 12433
│               15.81 GiB/s   │ 7.931 GiB/s   │ 14.76 GiB/s   │ 14 GiB/s      │         │
╰─ stream                     │               │               │               │         │
   ├─ 16        158.5 ns      │ 7.379 µs      │ 166.3 ns      │ 169.4 ns      │ 145565  │ 4658080
   │            96.24 MiB/s   │ 2.067 MiB/s   │ 91.72 MiB/s   │ 90.06 MiB/s   │         │
   ├─ 256       172.8 ns      │ 1.762 µs      │ 181.9 ns      │ 182.4 ns      │ 137278  │ 4392896
   │            1.379 GiB/s   │ 138.5 MiB/s   │ 1.31 GiB/s    │ 1.306 GiB/s   │         │
   ├─ 1024      218.4 ns      │ 25.95 µs      │ 231.4 ns      │ 235.1 ns      │ 217376  │ 3478016
   │            4.365 GiB/s   │ 37.63 MiB/s   │ 4.12 GiB/s    │ 4.055 GiB/s   │         │
   ├─ 16384     1.166 µs      │ 15.13 µs      │ 1.187 µs      │ 1.214 µs      │ 176156  │ 704624
   │            13.08 GiB/s   │ 1.008 GiB/s   │ 12.85 GiB/s   │ 12.56 GiB/s   │         │
   ╰─ 1048576   65.37 µs      │ 853 µs        │ 65.54 µs      │ 66.9 µs       │ 13675   │ 13675
                14.93 GiB/s   │ 1.144 GiB/s   │ 14.89 GiB/s   │ 14.59 GiB/s   │         │
```