This repository provides implementations of Elliptic Curve Digital Signature Algorithm (ECDSA) operations for the P-384 curve using Circom. These implementations are designed for use in zero-knowledge proofs and other cryptographic applications.
Note: These circuits not audited and not yet recommended for production use.
yarn add @crema-labs/ecdsa-p384-circom
include "@crema-labs/ecdsa-p384-circom/circuits/ecdsa.circom";
$ git clone https://github.com/crema-labs/ecdsa-p384-circom
$ cd ecdsa-p384-circom
$ yarn
In this repository, we are using Circomkit to test some example circuits using Mocha. The circuits and the statements that they prove are as follows:
ecdsa.circom
: Implements the ECDSA signature verification and private key to public key conversion for the P-384 curve.- ECDSAPrivToPub - Converts a private key to a public key in P-384.
- ECDSAVerifyNoPubkeyCheck - Verifies an ECDSA signature for a given message and public key.
p384.circom
: Implements the basic operations for the P-384 curve.- P384AddUnequal - Adds two unequal points on the P-384 curve.
- P384Double - Doubles a point on the P-384 curve.
- P384ScalarMult - Multiplies a point on the P-384 curve by a scalar.
You can use the following commands to test the circuits:
# test everything
yarn test
# test a specific circuit
yarn test -g <template-name>
All tests were performed on a MacBook Pro M1 2020 with 8GB RAM.
Operation | Constraints | Time (ms) |
---|---|---|
ECDSA Signature Verification | 4,429,227 | 4,21,394 |
ECDSA Point Addition (Unequal) | 4,352 | 850 |
ECDSA Point Addition (Equal) | 6,000 | 573 |
ECDSA Scalar Multiplication | 3,977,848 | 4,20,964 |
This project was made possible thanks to the support of ZK Email and OpenPassport for the grant.
This project builds upon the excellent work of the circom-ecdsa-p256 by PSE and circom-ecdsa by 0xPARC. We are grateful for their contributions to implementation of ECDSA in Circom, which formed the foundation for our work.
Feel free to contribute to this repository by creating issues or pull requests. We are open to any suggestions or improvements.