Skip to content

Commit

Permalink
prep for release
Browse files Browse the repository at this point in the history
  • Loading branch information
Janis Erdmanis committed Oct 31, 2024
1 parent 292f7ac commit bbdc413
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 8 deletions.
42 changes: 36 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,23 @@ Unlike traditional cryptographic tools that focus solely on confidentiality and
- Reorganised, flat directory structure for proof serializations

- **Cryptographic Infrastructure**
- Abstract and extensible cryptographic group support:
- Elliptic curves (with planned OpenSSL optimization)
- Modular prime groups
- Secure random number generation for proof components
- Extensible group support for arbitrary cyclic groups
- Native elliptic curves over prime fields (P-192, P-256, secp256k1)
- High-performance OpenSSL curve integration via [OpenSSLGroups.jl](https://github.com/PeaceFounder/OpenSSLGroups.jl)
- Modular prime groups with flexible parameter selection
- Secure hash based random number generation for proof components via [CryptoPRG.jl](https://github.com/PeaceFounder/CryptoPRG.jl)
- Flexible verifier interface for custom implementations

- **Verificatum Compatibility**
- Loading and verification of Verificatum-generated proofs
- Proof generation matching Verificatum verifier specification
- Compliant with Verificatum file format specifications

- **Developer Experience**
- **Developer-Friendly Design**
- Clean implementation following [Haenni et al.](https://link.springer.com/chapter/10.1007/978-3-319-70278-0_23#citeas) pseudocode
- Comprehensive test suite with high coverage
- Type-safe implementation leveraging Julia's type system
- Readiness to integrate with Julia's high-performance computing ecosystem
- Readiness to integrate with Julias high-performance computing ecosystem via threading, distributed parallelism, or even GPUs.
- Modular architecture supporting extension and customization

The package implements state-of-the-art protocols according to the Verificatum verifier specification, with which Verificatum-generated proofs pass. The prover is implemented according to Haenni et al. pseudocode, which is mapped to the Verificatum verifier specification, so the created shuffle proofs are Verificatum verifier compatible. The Verificatum specification has been deployed in national-scale electronic voting systems in Estonia, Norway, and Switzerland, making this implementation suitable for aspiring production environments.
Expand Down Expand Up @@ -167,6 +168,35 @@ challenge_reenc(verifier::HonestVerifier, proposition, 𝐜, 𝐜̂, t) = verifi

The verifier architecture is designed to be extensible, allowing users to implement custom verification strategies. This is particularly useful for specialized applications or research purposes where the standard verification process needs to be modified.

## Using OpenSSL

OpenSSL's elliptic curve implementation is 10-20x faster than the one in CryptoGroups. We can leverage this performance advantage through the [OpenSSLGroups.jl](https://github.com/PeaceFounder/OpenSSLGroups.jl) package to accelerate ShuffleProofs operations:
```
using CryptoGroups
using OpenSSLGroups
import SigmaProofs.ElGamal: Enc
import SigmaProofs.Verificatum: ProtocolSpec
import ShuffleProofs: shuffle, verify
g = @ECGroup{OpenSSLGroups.Prime256v1}()
verifier = ProtocolSpec(; g)
sk = 123
pk = g^sk
enc = Enc(pk, g)
𝐦 = [g^4, g^2, g^3] .|> tuple
𝐞 = enc(𝐦, [2, 3, 4])
𝐫′ = [4, 2, 10]
e_enc = enc(𝐞, 𝐫′)
simulator = shuffle(𝐞, g, pk, verifier)
verify(simulator)
```

## References

- Wikstrom, "How To Implement A Stand-Alone Verifier for the Verificatum Mix-Net"
Expand Down
4 changes: 2 additions & 2 deletions test/serializer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ hasher = HashSpec("sha256")


@test treespec(Simulator{Shuffle}) == (
"ProtInfo.xml",
"protInfo.xml",

# proposition
"publicKey.bt",
Expand All @@ -64,7 +64,7 @@ hasher = HashSpec("sha256")
)

@test treespec(Simulator{Braid}) == (
"ProtInfo.xml",
"protInfo.xml",

# proposition
"shuffle/publicKey.bt",
Expand Down

2 comments on commit bbdc413

@JanisErdmanis
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/118439

Tip: Release Notes

Did you know you can add release notes too? Just add markdown formatted text underneath the comment after the text
"Release notes:" and it will be added to the registry PR, and if TagBot is installed it will also be added to the
release that TagBot creates. i.e.

@JuliaRegistrator register

Release notes:

## Breaking changes

- blah

To add them here just re-invoke and the PR will be updated.

Tagging

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v0.4.0 -m "<description of version>" bbdc41350be6ba3c727bd59ff62582dafd3d9ac6
git push origin v0.4.0

Please sign in to comment.