-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* just some readme stuff for @Divide-By-0 * some requested edits * some requested edits * some requested edits * version bump for publishing
- Loading branch information
Showing
2 changed files
with
44 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters