@ -0,0 +1,28 @@ |
|||||
|
# go-blindsecp256k1 |
||||
|
Blind signature over [secp256k1](https://en.bitcoin.it/wiki/Secp256k1), based on *"[An Efficient Blind Signature Scheme Based on the Elliptic CurveDiscrete Logarithm Problem](http://www.isecure-journal.com/article_39171_47f9ec605dd3918c2793565ec21fcd7a.pdf)"* paper. |
||||
|
|
||||
|
**WARNING**: this repo is experimental, do not use in production. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
```go |
||||
|
// message to be signed |
||||
|
msg := new(big.Int).SetBytes([]byte("test")) |
||||
|
|
||||
|
// create new signer |
||||
|
signerPrivateData := blindsecp256k1.NewSigner() |
||||
|
signerPublicData := signerPrivateData.PublicData() |
||||
|
|
||||
|
// user blinds the msg |
||||
|
msgBlinded, user := blindsecp256k1.Blind(msg, signerPublicData) |
||||
|
|
||||
|
// signer signs the blinded message |
||||
|
sBlind := signerPrivateData.BlindSign(msgBlinded) |
||||
|
|
||||
|
// user unblinds the blinded signature |
||||
|
sig := blindsecp256k1.Unblind(sBlind, msg, user) |
||||
|
|
||||
|
// signature can be verified with signer PublicKey |
||||
|
verified := blindsecp256k1.Verify(msg, sig, signerPublicData.Q) |
||||
|
assert.True(t, verified) |
||||
|
``` |