arnaucube ec095bba83 | 3 years ago | |
---|---|---|
.github/workflows | 3 years ago | |
v0 | 3 years ago | |
wasm | 3 years ago | |
.gitignore | 3 years ago | |
.golangci.yml | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago | |
blindsecp256k1.go | 3 years ago | |
blindsecp256k1_test.go | 3 years ago | |
go.mod | 3 years ago | |
go.sum | 3 years ago |
Blind signature over secp256k1, based on "New Blind Signature Schemes Based on the (Elliptic Curve) Discrete Logarithm Problem" paper by Hamid Mala & Nafiseh Nezhadansari.
WARNING: this repo is experimental, do not use in production.
// 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)
WASM wrappers for browser usage can be found at the wasm directory with an example in html&js.