From 83dc5ff82b8d79281c245e9ff84651ec491dace3 Mon Sep 17 00:00:00 2001 From: Sergey Kaunov Date: Sun, 10 Mar 2024 16:28:40 +0300 Subject: [PATCH] Readme (#106) * just some readme stuff for @Divide-by-0 * some requested edits * some requested edits * some requested edits * version bump for publishing --- javascript/README.MD | 57 +++++++++++++++++++++++++++++++---------- javascript/package.json | 2 +- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/javascript/README.MD b/javascript/README.MD index 1b0b707..71ef9d5 100644 --- a/javascript/README.MD +++ b/javascript/README.MD @@ -1,20 +1,49 @@ -JavaScript implementation of the PLUME signature scheme. +`plume-sig` +============== +TypeScript implementation of the ERC-7524 PLUME signature scheme. -## API -### sign(message, privateKey) -Signs a message using the provided private key. -* `message` - String message to sign -* `privateKey` - Hex private key +A new type of cryptographic signature that would allow for anonymous and unique digital identities on the Ethereum blockchain in a verifiable way. -Returns the PLUME signature. +## Installation +`npm install plume-sig` -### `verify(message, publicKey, signature)` -Verifies a signature matches the message and public key. -* `message` - Original string message -* `publicKey` - Hex public key -* `signature` - PLUME signature +## Usage -Returns true if the signature is valid, false otherwise. +```ts +import { computeAllInputs, PlumeVersion } from 'plume-sig'; -### License +return computeAllInputs(message: string | Uint8Array, + sk: string | Uint8Array,); +``` + +The function returns the signature w.r.t. to given arguments as the object of the following structure. +### `plume` +`secp256k1` point +### `s` +`secp256k1` scalar hexstring +### `pk` +Public key of the signer; SEC1 encoded. +### `c` +SHA-256 hash. It's value depends on `PlumeVersion` of the signature. +### `rPoint` +`secp256k1` point representing the unique random scalar used for signing. V1 specific. +### `hashedToCurveR` +`secp256k1` point. V1 specific. + +## Signature variants +The scheme comes in two variants. V2 is default for this implementation. + +### Version 1: Verifier Optimized + +In a situation where there is a verifier who must *not* know the signer's `pk`, but the signer must nevertheless prove that they know `secretKey` corresponding to the signature given `message`, a zero-knowledge proof is required. + +The following verification function may be described via a circuit as part of a non-interactive zero-knowledge proving system, such as Groth16. To create a proof, the prover supplies the following inputs: + +### Version 2: Prover Optimized + +Currently, SHA-256 hashing operations are particularly expensive with zk proofs in the browser. In the context of PLUME, the computation of $c$ is a bottleneck for efficient proof times, so one modification suggested by the Poseidon team was to move this hash computation outside the circuit, into the verifier. + +Due to SHA-256 being a native precompile on Ethereum, this operation will still be efficient for smart contract verifiers. + +## License MIT \ No newline at end of file diff --git a/javascript/package.json b/javascript/package.json index b52e7d1..307bfac 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -1,6 +1,6 @@ { "name": "plume-sig", - "version": "2.0.5", + "version": "2.0.7", "repository": "https://github.com/plume-sig/zk-nullifier-sig/", "pnpm": { "overrides": {