You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
arnaucube f84bacb9ba Abstract curve from impl to use elliptic.Curve interface 3 years ago
.github/workflows Add Signature Compression & Decompression 3 years ago
v0 Update `Unblind` inputs removing unnecessary `m` 3 years ago
wasm Add checks to inputs at Blind & BlindSign 3 years ago
.gitignore Add WASM wrappers & compiled 3 years ago
.golangci.yml Add GHA (tests & lint), add descr, update readme 3 years ago
LICENSE init repo add LICENSE 3 years ago
README.md Add Signature Compression & Decompression 3 years ago
blindsecp256k1.go Abstract curve from impl to use elliptic.Curve interface 3 years ago
blindsecp256k1_test.go Abstract curve from impl to use elliptic.Curve interface 3 years ago
go.mod Update interface 3 years ago
go.sum Update interface 3 years ago
parsers.go Add Signature Compression & Decompression 3 years ago
parsers_test.go Abstract curve from impl to use elliptic.Curve interface 3 years ago

README.md

go-blindsecp256k1 GoDoc Go Report Card Test

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.

Usage

import (
	[...]
	"github.com/arnaucube/go-blindsecp256k1"
)

[...]

// signer: create new signer key pair
sk := blindsecp256k1.NewPrivateKey()
signerPubK := sk.Public()

// signer: when user requests new R parameter to blind a new msg,
// create new signerR (public) with its secret k
k, signerR := blindsecp256k1.NewRequestParameters()

// user: blinds the msg using signer's R
msg := new(big.Int).SetBytes([]byte("test"))
msgBlinded, userSecretData, err := blindsecp256k1.Blind(msg, signerR)
require.Nil(t, err)

// signer: signs the blinded message using its private key & secret k
sBlind, err := sk.BlindSign(msgBlinded, k)
require.Nil(t, err)

// user: unblinds the blinded signature
sig := blindsecp256k1.Unblind(sBlind, userSecretData)

// signature can be verified with signer PublicKey
verified := blindsecp256k1.Verify(msg, sig, signerPubK)
assert.True(t, verified)

WASM usage

WASM wrappers for browser usage can be found at the wasm directory with an example in html&js.