ark-zkey 0.1.2

Library to read zkey faster by serializing to arkworks friendly format.
Documentation
# ark-zkey

![Crates.io](https://img.shields.io/crates/v/ark-zkey?label=ark-zkey)

Library to read `zkey` faster by serializing to `arkworks` friendly format.

See https://github.com/zkmopro/mopro/issues/25 for context.

## How to use

Run the following to convert a `zkey` to an `arkzkey`. This should be done as a pre-processing step.

`cargo run --bin arkzkey-util --release -- ./test-vectors/keccak256_256_test_final.zkey`

This will generate and place an `arkzkey` file in the same directory as the original zkey.

You can also install it locally:

`cargo install --bin arkzkey-util --path .`

## Tests

```
cargo test multiplier2 --release -- --nocapture
cargo test keccak256 --release -- --nocapture
cargo test rsa --release -- --nocapture
```

## Benchmark (Keccak)

`cargo test keccak256 --release -- --nocapture`

```
running 1 test
Reading zkey from: ./test-vectors/keccak256_256_test_final.zkey
Time to read zkey: 101.761584ms
Serializing proving key and constraint matrices
Time to serialize proving key and constraint matrices: 42ns
[build] Writing arkzkey to: ./test-vectors/keccak256_256_test_final.arkzkey
[build] Time to write arkzkey: 9.048011125s
Reading arkzkey from: ./test-vectors/keccak256_256_test_final.arkzkey
Time to open arkzkey file: 40.875µs
Time to mmap arkzkey: 14.541µs
Time to deserialize proving key: 9.050112917s
Time to deserialize matrices: 26.763958ms
Time to read arkzkey: 9.077114958s
test tests::test_keccak256_serialization_deserialization ... ok
```

| circuits | zkey | ark-zkey |
| :--: | :--: | :--: |
| multiplier| 3 KB | 1KB |
| keccak256 | 81.1 MB | 49.5 MB |
| rsa| 134.9 MB| 97.8 MB|