Skip to content
Snippets Groups Projects
Commit 8c4ecaa7 authored by lunfardo314's avatar lunfardo314
Browse files

BLS signatures: bug fix in test, removed unnecessary function, added new test

parent 7f4f1727
No related branches found
No related tags found
No related merge requests found
...@@ -170,36 +170,6 @@ func (sig *blsSignature) String() string { ...@@ -170,36 +170,6 @@ func (sig *blsSignature) String() string {
return base58.Encode(sig[:]) return base58.Encode(sig[:])
} }
func AggregateBLSSignatureSchemes(sigSchemes ...SignatureScheme) (SignatureScheme, error) {
priKeys := make([]kyber.Scalar, len(sigSchemes))
pubKeys := make([]kyber.Point, len(sigSchemes))
for i, s := range sigSchemes {
ss, ok := s.(*blsSignatureScheme)
if !ok {
return nil, fmt.Errorf("not a BLS signature scheme")
}
priKeys[i] = ss.priKey
pubKeys[i] = ss.pubKey
}
aggregatedPriKey := suite.G2().Scalar().Zero()
// sum up all private keys
for i := range priKeys {
aggregatedPriKey = aggregatedPriKey.Add(aggregatedPriKey, priKeys[i])
}
mask, _ := sign.NewMask(suite, pubKeys, nil)
for i := range pubKeys {
_ = mask.SetBit(i, true)
}
aggregatedPubKey, err := bdn.AggregatePublicKeys(suite, mask)
if err != nil {
return nil, err
}
return &blsSignatureScheme{
priKey: aggregatedPriKey,
pubKey: aggregatedPubKey,
}, nil
}
func AggregateBLSSignatures(sigs ...Signature) (Signature, error) { func AggregateBLSSignatures(sigs ...Signature) (Signature, error) {
if len(sigs) == 0 { if len(sigs) == 0 {
return nil, fmt.Errorf("must be at least one signature to aggregate") return nil, fmt.Errorf("must be at least one signature to aggregate")
......
...@@ -2,20 +2,40 @@ package signaturescheme ...@@ -2,20 +2,40 @@ package signaturescheme
import ( import (
"github.com/magiconair/properties/assert" "github.com/magiconair/properties/assert"
"github.com/mr-tron/base58"
"testing" "testing"
) )
var dataToSign = []byte("Hello Boneh-Lynn-Shacham (BLS) --> Boneh-Drijvers-Neven (BDN)") var dataToSign = []byte("Hello Boneh-Lynn-Shacham (BLS) --> Boneh-Drijvers-Neven (BDN)")
func TestBLS_base(t *testing.T) { func TestBLS_rndSigSheme(t *testing.T) {
blsSigScheme := RandBLS() sigScheme := RandBLS()
t.Logf("generating random BLS signature scheme: %s\n", blsSigScheme.(*blsSignatureScheme).String()) t.Logf("generating random BLS signature scheme: %s\n", sigScheme.(*blsSignatureScheme).String())
signature := blsSigScheme.Sign(dataToSign) signature := sigScheme.Sign(dataToSign)
assert.Equal(t, blsSigScheme.Address(), signature.Address()) assert.Equal(t, sigScheme.Address(), signature.Address())
res := signature.IsValid(dataToSign) assert.Equal(t, signature.IsValid(dataToSign), true)
assert.Equal(t, res, true) }
const (
priKeyTest = "Cjsu52qf28G4oLiUDcimEY7SPbWJQA9zoKCNi4ywMxg"
pubKeyTest = "28LgNCDp52gTotmd21hcEXKar5tTyxuJKqQdGHCJnZ5Z1M7Rdh4Qo2BYC3s3NicLD99tZ3yX9mZvRmsnQLMRcHnzqgq2CQp7CYWCKfTUT9yzJKUTQ4JmN2DhSkSNc5kau4KE8PRGByQxpiYQq4DRF4Qb3Dn4cHmhTrDi9xQiYTxoAYW"
)
func TestBLS_sigScheme(t *testing.T) {
priKeyBin, err := base58.Decode(priKeyTest)
assert.Equal(t, err, nil)
pubKeyBin, err := base58.Decode(pubKeyTest)
assert.Equal(t, err, nil)
sigScheme, err := BLS(priKeyBin, pubKeyBin)
assert.Equal(t, err, nil)
signature := sigScheme.Sign(dataToSign)
assert.Equal(t, sigScheme.Address(), signature.Address())
assert.Equal(t, signature.IsValid(dataToSign), true)
} }
// number of signatures to aggregate // number of signatures to aggregate
...@@ -29,16 +49,13 @@ func TestBLS_aggregation(t *testing.T) { ...@@ -29,16 +49,13 @@ func TestBLS_aggregation(t *testing.T) {
sigSchemes[i] = RandBLS() sigSchemes[i] = RandBLS()
sigs[i] = sigSchemes[i].Sign(dataToSign) sigs[i] = sigSchemes[i].Sign(dataToSign)
} }
aggregatedSig1, err := AggregateBLSSignatures(sigs...) // aggregate 2 signatures
a01, err := AggregateBLSSignatures(sigs[0], sigs[1])
assert.Equal(t, err, nil) assert.Equal(t, err, nil)
assert.Equal(t, a01.IsValid(dataToSign), true)
assert.Equal(t, aggregatedSig1.IsValid(dataToSign), true) // aggregate N signatures
aN, err := AggregateBLSSignatures(sigs...)
aggregatedScheme, err := AggregateBLSSignatureSchemes(sigSchemes...)
assert.Equal(t, err, nil) assert.Equal(t, err, nil)
assert.Equal(t, aN.IsValid(dataToSign), true)
if err == nil {
aggregatedSig2 := aggregatedScheme.Sign(dataToSign)
assert.Equal(t, aggregatedSig2, aggregatedSig2)
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment