diff --git a/packages/binary/valuetransfer/address/signaturescheme/bls.go b/packages/binary/valuetransfer/address/signaturescheme/bls.go index 8ff3a296209c9e4eb7da2db0c7bc5e9abc88cd3c..83e403d98383d46952fc22cd4e2d7020773346bc 100644 --- a/packages/binary/valuetransfer/address/signaturescheme/bls.go +++ b/packages/binary/valuetransfer/address/signaturescheme/bls.go @@ -170,36 +170,6 @@ func (sig *blsSignature) String() string { 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) { if len(sigs) == 0 { return nil, fmt.Errorf("must be at least one signature to aggregate") diff --git a/packages/binary/valuetransfer/address/signaturescheme/bls_test.go b/packages/binary/valuetransfer/address/signaturescheme/bls_test.go index 28e1a3a78b508d3d304f2aa365eabeb696e44694..d1376109a4025fceefd2c1f4d8de327505cf8d01 100644 --- a/packages/binary/valuetransfer/address/signaturescheme/bls_test.go +++ b/packages/binary/valuetransfer/address/signaturescheme/bls_test.go @@ -2,20 +2,40 @@ package signaturescheme import ( "github.com/magiconair/properties/assert" + "github.com/mr-tron/base58" "testing" ) 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() - t.Logf("generating random BLS signature scheme: %s\n", blsSigScheme.(*blsSignatureScheme).String()) - signature := blsSigScheme.Sign(dataToSign) + sigScheme := RandBLS() + t.Logf("generating random BLS signature scheme: %s\n", sigScheme.(*blsSignatureScheme).String()) + signature := sigScheme.Sign(dataToSign) - assert.Equal(t, blsSigScheme.Address(), signature.Address()) - res := signature.IsValid(dataToSign) - assert.Equal(t, res, true) + assert.Equal(t, sigScheme.Address(), signature.Address()) + assert.Equal(t, signature.IsValid(dataToSign), 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 @@ -29,16 +49,13 @@ func TestBLS_aggregation(t *testing.T) { sigSchemes[i] = RandBLS() 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, a01.IsValid(dataToSign), true) - assert.Equal(t, aggregatedSig1.IsValid(dataToSign), true) - - aggregatedScheme, err := AggregateBLSSignatureSchemes(sigSchemes...) + // aggregate N signatures + aN, err := AggregateBLSSignatures(sigs...) assert.Equal(t, err, nil) - - if err == nil { - aggregatedSig2 := aggregatedScheme.Sign(dataToSign) - assert.Equal(t, aggregatedSig2, aggregatedSig2) - } + assert.Equal(t, aN.IsValid(dataToSign), true) }