package signaturescheme import ( "testing" "github.com/magiconair/properties/assert" "github.com/mr-tron/base58" ) var dataToSign = []byte("Hello Boneh-Lynn-Shacham (BLS) --> Boneh-Drijvers-Neven (BDN)") func TestBLS_rndSigScheme(t *testing.T) { sigScheme := RandBLS() t.Logf("generating random BLS signature scheme: %s\n", sigScheme.(*blsSignatureScheme).String()) signature := sigScheme.Sign(dataToSign) assert.Equal(t, sigScheme.Address(), signature.Address()) res := signature.IsValid(dataToSign) 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 const numSigs = 100 func TestBLS_aggregation(t *testing.T) { sigs := make([]Signature, numSigs) sigSchemes := make([]SignatureScheme, numSigs) for i := range sigs { sigSchemes[i] = RandBLS() sigs[i] = sigSchemes[i].Sign(dataToSign) } // aggregate 2 signatures a01, err := AggregateBLSSignatures(sigs[0], sigs[1]) assert.Equal(t, err, nil) assert.Equal(t, a01.IsValid(dataToSign), true) // aggregate N signatures aN, err := AggregateBLSSignatures(sigs...) assert.Equal(t, err, nil) assert.Equal(t, aN.IsValid(dataToSign), true) }