diff --git a/chain/gen/mining.go b/chain/gen/mining.go index 1fc27ec5c..d0d454fdf 100644 --- a/chain/gen/mining.go +++ b/chain/gen/mining.go @@ -153,13 +153,21 @@ func aggregateSignatures(sigs []crypto.Signature) (*crypto.Signature, error) { return nil, xerrors.Errorf("bls.Aggregate returned nil with %d signatures", len(sigs)) } - // Note: for blst this condition should not happen - nil should not be returned + // Note: for blst this condition should not happen - nil should not + // be returned return &crypto.Signature{ Type: crypto.SigTypeBLS, Data: new(bls.Signature).Compress(), }, nil } - aggSig := aggregator.ToAffine().Compress() + aggSigAff := aggregator.ToAffine() + if aggSigAff == nil { + return &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: new(bls.Signature).Compress(), + }, nil + } + aggSig := aggSigAff.Compress() return &crypto.Signature{ Type: crypto.SigTypeBLS, Data: aggSig, diff --git a/chain/sync.go b/chain/sync.go index 8459d4b94..6917cba98 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -25,7 +25,6 @@ import ( "go.opencensus.io/trace" "golang.org/x/xerrors" - blst "github.com/supranational/blst/bindings/go" "github.com/filecoin-project/go-address" amt "github.com/filecoin-project/go-amt-ipld/v2" "github.com/filecoin-project/sector-storage/ffiwrapper" @@ -34,6 +33,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/builtin/power" "github.com/filecoin-project/specs-actors/actors/crypto" "github.com/filecoin-project/specs-actors/actors/util/adt" + blst "github.com/supranational/blst/bindings/go" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" diff --git a/go.mod b/go.mod index 87901d1a2..0e29613ed 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/filecoin-project/lotus go 1.14 +replace github.com/supranational/blst => github.com/supranational/blst v0.1.2-alpha.1 + require ( contrib.go.opencensus.io/exporter/jaeger v0.1.0 contrib.go.opencensus.io/exporter/prometheus v0.1.0 @@ -119,7 +121,7 @@ require ( go.uber.org/multierr v1.5.0 go.uber.org/zap v1.15.0 go4.org v0.0.0-20190313082347-94abd6928b1d // indirect - golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a + golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 diff --git a/go.sum b/go.sum index f7b825211..8ca92405b 100644 --- a/go.sum +++ b/go.sum @@ -1316,10 +1316,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/supranational/blst v0.1.0 h1:2LzeBbOidhTD87UezqGvIffWZAd3FOCfhi2b7IbJCMc= -github.com/supranational/blst v0.1.0/go.mod h1:Z70pOaiBHpXP+JFNOwIyCHKjec/He56CC5UdLaYpuzY= -github.com/supranational/blst v0.1.1 h1:GsK4oq7QZ7yfHI6dCh2NQsUe4imjlFwm5NXF5PWAWoo= -github.com/supranational/blst v0.1.1/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.1.2-alpha.1 h1:v0UqVlvbRNZIaSeMPr+T01kvTUq1h0EZuZ6gnDR1Mlg= +github.com/supranational/blst v0.1.2-alpha.1/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1567,6 +1565,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/lib/sigs/bls/init.go b/lib/sigs/bls/init.go index 9876827a4..c63cf0b65 100644 --- a/lib/sigs/bls/init.go +++ b/lib/sigs/bls/init.go @@ -28,21 +28,22 @@ func (blsSigner) GenPrivate() ([]byte, error) { if err != nil { return nil, fmt.Errorf("bls signature error generating random data") } - pk := blst.KeyGen(ikm[:]).Serialize() + // Note private keys seem to be serialized little-endian! + pk := blst.KeyGen(ikm[:]).ToLEndian() return pk, nil } func (blsSigner) ToPublic(priv []byte) ([]byte, error) { - pk := new(SecretKey).Deserialize(priv) - if pk == nil { + pk := new(SecretKey).FromLEndian(priv) + if pk == nil || !pk.Valid() { return nil, fmt.Errorf("bls signature invalid private key") } return new(PublicKey).From(pk).Compress(), nil } func (blsSigner) Sign(p []byte, msg []byte) ([]byte, error) { - pk := new(SecretKey).Deserialize(p) - if pk == nil { + pk := new(SecretKey).FromLEndian(p) + if pk == nil || !pk.Valid() { return nil, fmt.Errorf("bls signature invalid private key") } return new(Signature).Sign(pk, msg, []byte(DST)).Compress(), nil