diff --git a/deps.bzl b/deps.bzl index 0647e8eba6..19f705d9be 100644 --- a/deps.bzl +++ b/deps.bzl @@ -693,8 +693,8 @@ def prysm_deps(): name = "com_github_ferranbt_fastssz", importpath = "github.com/ferranbt/fastssz", nofuzz = True, - sum = "h1:8DS7uDmUkGF6UKNU1HivEsjrTusxLPb05KUr/D8ONWQ=", - version = "v0.0.0-20200826142241-3a913c5a1313", + sum = "h1:FnpkCo1TAj/eq0ETLPhAplYYB4KlFQy3kVb8cLludAc=", + version = "v0.0.0-20201020132831-68dc48984fd3", ) go_repository( @@ -3044,14 +3044,14 @@ def prysm_deps(): "gazelle:resolve go github.com/prysmaticlabs/go-ssz @com_github_prysmaticlabs_go_ssz//:go_default_library", ], importpath = "github.com/wealdtech/go-eth2-types/v2", - sum = "h1:L8sl3yoICAbn3134CBLNUt0o5h2voe0Es2KD5O9r8YQ=", - version = "v2.5.0", + sum = "h1:59VZuwgqRaTjBu3b3CCaxG05XTmANtuTKA8hy3C6IFQ=", + version = "v2.5.1", ) go_repository( name = "com_github_wealdtech_go_eth2_util", importpath = "github.com/wealdtech/go-eth2-util", - sum = "h1:l2OR0SqfYdEnb1I1Ggnk0w+B9/LA5aHdQ2KK2FPnGkY=", - version = "v1.6.0", + sum = "h1:Gk7xVTG/bY1IUw/8wxOf97DuPbLTGGoZ0k5dNayudhk=", + version = "v1.6.2", ) go_repository( name = "com_github_wealdtech_go_eth2_wallet", diff --git a/go.mod b/go.mod index a97f0f012d..1a629efe2d 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/emicklei/dot v0.11.0 github.com/ethereum/go-ethereum v0.0.0-00010101000000-000000000000 github.com/fatih/color v1.9.0 // indirect - github.com/ferranbt/fastssz v0.0.0-20200826142241-3a913c5a1313 + github.com/ferranbt/fastssz v0.0.0-20201020132831-68dc48984fd3 github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 github.com/fsnotify/fsnotify v1.4.9 github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect @@ -76,7 +76,6 @@ require ( github.com/manifoldco/promptui v0.7.0 github.com/minio/highwayhash v1.0.1 github.com/minio/sha256-simd v0.1.1 - github.com/mitchellh/mapstructure v1.3.3 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/multiformats/go-multiaddr v0.3.1 github.com/multiformats/go-multiaddr-net v0.2.0 @@ -105,8 +104,8 @@ require ( github.com/tyler-smith/go-bip39 v1.0.2 github.com/urfave/cli/v2 v2.2.0 github.com/wealdtech/go-bytesutil v1.1.1 - github.com/wealdtech/go-eth2-types/v2 v2.5.0 - github.com/wealdtech/go-eth2-util v1.6.0 + github.com/wealdtech/go-eth2-types/v2 v2.5.1 + github.com/wealdtech/go-eth2-util v1.6.2 github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.1 github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3 github.com/x-cray/logrus-prefixed-formatter v0.5.2 diff --git a/go.sum b/go.sum index 668280e601..f07ac473c1 100644 --- a/go.sum +++ b/go.sum @@ -178,7 +178,6 @@ github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzA github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= -github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= @@ -219,11 +218,9 @@ github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/ferranbt/fastssz v0.0.0-20200514094935-99fccaf93472 h1:maoKvILdMk6CSWHanFcUdxXIZGKD9YpWIaVbUQ/4kfg= -github.com/ferranbt/fastssz v0.0.0-20200514094935-99fccaf93472/go.mod h1:LlFXPmgrgVYsuoFDwV8rDJ9tvt1pLQdjKvU1b5IRES0= github.com/ferranbt/fastssz v0.0.0-20200728110133-0b6e349af87a/go.mod h1:DyEu2iuLBnb/T51BlsiO3yLYdJC6UbGMrIkqK1KmQxM= -github.com/ferranbt/fastssz v0.0.0-20200826142241-3a913c5a1313 h1:8DS7uDmUkGF6UKNU1HivEsjrTusxLPb05KUr/D8ONWQ= -github.com/ferranbt/fastssz v0.0.0-20200826142241-3a913c5a1313/go.mod h1:DyEu2iuLBnb/T51BlsiO3yLYdJC6UbGMrIkqK1KmQxM= +github.com/ferranbt/fastssz v0.0.0-20201020132831-68dc48984fd3 h1:FnpkCo1TAj/eq0ETLPhAplYYB4KlFQy3kVb8cLludAc= +github.com/ferranbt/fastssz v0.0.0-20201020132831-68dc48984fd3/go.mod h1:DyEu2iuLBnb/T51BlsiO3yLYdJC6UbGMrIkqK1KmQxM= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= @@ -408,8 +405,6 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v0.0.0-20170914154624-68e816d1c783/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/herumi/bls-eth-go-binary v0.0.0-20200706085701-832d8c2c0f7d h1:P8yaFmLwc5ZlUx2sHuawcdQvpv5/0GM+WEGJ07ljN3g= -github.com/herumi/bls-eth-go-binary v0.0.0-20200706085701-832d8c2c0f7d/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= github.com/herumi/bls-eth-go-binary v0.0.0-20201019012252-4b463a10c225 h1:S7pKW74AvYc89WawL6IxGSnJRxF4TkE1GITYqKFyYy4= github.com/herumi/bls-eth-go-binary v0.0.0-20201019012252-4b463a10c225/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= @@ -780,8 +775,6 @@ github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7 github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.0 h1:iMSDhgUILCr0TNm8LWlSjF8N0ZIj2qbO8WHp6Q/J2BA= -github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= @@ -970,20 +963,16 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= -github.com/protolambda/zssz v0.1.3/go.mod h1:a4iwOX5FE7/JkKA+J/PH0Mjo9oXftN6P8NZyL28gpag= github.com/protolambda/zssz v0.1.5 h1:7fjJjissZIIaa2QcvmhS/pZISMX21zVITt49sW1ouek= github.com/protolambda/zssz v0.1.5/go.mod h1:a4iwOX5FE7/JkKA+J/PH0Mjo9oXftN6P8NZyL28gpag= github.com/prysmaticlabs/bazel-go-ethereum v0.0.0-20201016095414-974cbc1dd92e h1:+AspXGWVJzMtcy24DkGEJqut1grik397nnb7JybNBy8= github.com/prysmaticlabs/bazel-go-ethereum v0.0.0-20201016095414-974cbc1dd92e/go.mod h1:JIfVb6esrqALTExdz9hRYvrP0xBDf6wCncIu1hNwHpM= github.com/prysmaticlabs/ethereumapis v0.0.0-20201003171600-a72e5f77d233 h1:dGeuKeaXxCepTbwsz7kYSfP1yazw1uRMn58CqNCcPP4= github.com/prysmaticlabs/ethereumapis v0.0.0-20201003171600-a72e5f77d233/go.mod h1:k7b2dxy6RppCG6kmOJkNOXzRpEoTdsPygc2aQhsUsZk= -github.com/prysmaticlabs/go-bitfield v0.0.0-20191017011753-53b773adde52/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s= github.com/prysmaticlabs/go-bitfield v0.0.0-20200322041314-62c2aee71669 h1:cX6YRZnZ9sgMqM5U14llxUiXVNJ3u07Res1IIjTOgtI= github.com/prysmaticlabs/go-bitfield v0.0.0-20200322041314-62c2aee71669/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s= github.com/prysmaticlabs/go-bitfield v0.0.0-20200618145306-2ae0807bef65 h1:hJfAWrlxx7SKpn4S/h2JGl2HHwA1a2wSS3HAzzZ0F+U= github.com/prysmaticlabs/go-bitfield v0.0.0-20200618145306-2ae0807bef65/go.mod h1:hCwmef+4qXWjv0jLDbQdWnL0Ol7cS7/lCSS26WR+u6s= -github.com/prysmaticlabs/go-ssz v0.0.0-20200101200214-e24db4d9e963 h1:Th5ufPIaL5s/7i3gXHTgiTwfsUhWDP/PwFRiI6qV6v0= -github.com/prysmaticlabs/go-ssz v0.0.0-20200101200214-e24db4d9e963/go.mod h1:VecIJZrewdAuhVckySLFt2wAAHRME934bSDurP8ftkc= github.com/prysmaticlabs/go-ssz v0.0.0-20200612203617-6d5c9aa213ae h1:7qd0Af1ozWKBU3c93YW2RH+/09hJns9+ftqWUZyts9c= github.com/prysmaticlabs/go-ssz v0.0.0-20200612203617-6d5c9aa213ae/go.mod h1:VecIJZrewdAuhVckySLFt2wAAHRME934bSDurP8ftkc= github.com/prysmaticlabs/prombbolt v0.0.0-20200324184628-09789ef63796 h1:bVD46NhbqEE6bsIqj42TCS3ELUdumti3WfAw9DXNtkg= @@ -1083,10 +1072,10 @@ github.com/urfave/cli/v2 v2.2.0 h1:JTTnM6wKzdA0Jqodd966MVj4vWbbquZykeX1sKbe2C4= github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/wealdtech/go-bytesutil v1.1.1 h1:ocEg3Ke2GkZ4vQw5lp46rmO+pfqCCTgq35gqOy8JKVc= github.com/wealdtech/go-bytesutil v1.1.1/go.mod h1:jENeMqeTEU8FNZyDFRVc7KqBdRKSnJ9CCh26TcuNb9s= -github.com/wealdtech/go-eth2-types/v2 v2.5.0 h1:L8sl3yoICAbn3134CBLNUt0o5h2voe0Es2KD5O9r8YQ= -github.com/wealdtech/go-eth2-types/v2 v2.5.0/go.mod h1:321w9X26lAnNa/lQJi2A6Lap5IsNORoLwFPoJ1i8QvY= -github.com/wealdtech/go-eth2-util v1.6.0 h1:l2OR0SqfYdEnb1I1Ggnk0w+B9/LA5aHdQ2KK2FPnGkY= -github.com/wealdtech/go-eth2-util v1.6.0/go.mod h1:0PGWeWWc6qjky/aNjdPdguJdZ2HSEHHCA+3cTjvT+Hk= +github.com/wealdtech/go-eth2-types/v2 v2.5.1 h1:59VZuwgqRaTjBu3b3CCaxG05XTmANtuTKA8hy3C6IFQ= +github.com/wealdtech/go-eth2-types/v2 v2.5.1/go.mod h1:UUtEgRum8HkPvImpu5+hFYRanMUjP0k6KWqHlYkOGbk= +github.com/wealdtech/go-eth2-util v1.6.2 h1:Gk7xVTG/bY1IUw/8wxOf97DuPbLTGGoZ0k5dNayudhk= +github.com/wealdtech/go-eth2-util v1.6.2/go.mod h1:0hCjncDU0yi6dzGgrCgWAj6grdvJ6loEKCGpCMfxo9c= github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.1 h1:PYwMOCt92iWEHXdnsBaAk1/xygPfuBMkrXEgO8WtFdw= github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.1/go.mod h1:JelKMM10UzDJNXdIcojMj6SCIsHC8NYn4c1S2FFk7OQ= github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3 h1:shC1HB1UogxN5Ech3Yqaaxj1X/P656PPCB4RbojIJqc= @@ -1344,14 +1333,13 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 h1:AvbQYmiaaaza3cW3QXRyPo5kYgpFIzOAfeAAN7m3qQ4= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201024232916-9f70ab9862d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201027140754-0fcbb8f4928c h1:2+jF2APAgFgXJnYOQGDGGiRvvEo6OhqZGQf46n9xgEw= golang.org/x/sys v0.0.0-20201027140754-0fcbb8f4928c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/validator/keymanager/derived/BUILD.bazel b/validator/keymanager/derived/BUILD.bazel index 40db7acda6..636a5a2057 100644 --- a/validator/keymanager/derived/BUILD.bazel +++ b/validator/keymanager/derived/BUILD.bazel @@ -26,7 +26,6 @@ go_library( "//shared/rand:go_default_library", "//validator/accounts/iface:go_default_library", "//validator/keymanager:go_default_library", - "//validator/keymanager/derived/v1derivation:go_default_library", "@com_github_google_uuid//:go_default_library", "@com_github_pkg_errors//:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", diff --git a/validator/keymanager/derived/eip_test.go b/validator/keymanager/derived/eip_test.go index cae1558d3b..06669517a1 100644 --- a/validator/keymanager/derived/eip_test.go +++ b/validator/keymanager/derived/eip_test.go @@ -101,9 +101,6 @@ func TestDerivationFromSeed(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if tt.name == "Case 1" || tt.name == "Case 2" { - t.Skip("Skipping due to https://github.com/wealdtech/go-eth2-util/issues/2") - } seedBytes, err := hex.DecodeString(tt.fields.seed) require.NoError(t, err) km := &Keymanager{ diff --git a/validator/keymanager/derived/keymanager.go b/validator/keymanager/derived/keymanager.go index 717cfeaca6..5ab59fcfa4 100644 --- a/validator/keymanager/derived/keymanager.go +++ b/validator/keymanager/derived/keymanager.go @@ -23,11 +23,10 @@ import ( "github.com/prysmaticlabs/prysm/shared/petnames" "github.com/prysmaticlabs/prysm/shared/rand" "github.com/prysmaticlabs/prysm/validator/accounts/iface" - "github.com/prysmaticlabs/prysm/validator/keymanager/derived/v1derivation" "github.com/sirupsen/logrus" "github.com/tyler-smith/go-bip39" types "github.com/wealdtech/go-eth2-types/v2" - v2derivation "github.com/wealdtech/go-eth2-util" + util "github.com/wealdtech/go-eth2-util" keystorev4 "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4" ) @@ -489,10 +488,7 @@ func (dr *Keymanager) initializeKeysCachesFromSeed() error { } func (dr *Keymanager) deriveKey(path string) (*types.BLSPrivateKey, error) { - if dr.opts.DerivedVersion == "2" { - return v2derivation.PrivateKeyFromSeedAndPath(dr.seed, path) - } - return v1derivation.PrivateKeyFromSeedAndPath(dr.seed, path) + return util.PrivateKeyFromSeedAndPath(dr.seed, path) } func checkEncodedKeyFile( diff --git a/validator/keymanager/derived/v1derivation/BUILD.bazel b/validator/keymanager/derived/v1derivation/BUILD.bazel deleted file mode 100644 index b0cbd2965f..0000000000 --- a/validator/keymanager/derived/v1derivation/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@prysm//tools/go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["util.go"], - importpath = "github.com/prysmaticlabs/prysm/validator/keymanager/derived/v1derivation", - visibility = [ - "//validator:__pkg__", - "//validator:__subpackages__", - ], - deps = [ - "//shared/hashutil:go_default_library", - "@com_github_pkg_errors//:go_default_library", - "@com_github_wealdtech_go_bytesutil//:go_default_library", - "@com_github_wealdtech_go_eth2_types_v2//:go_default_library", - "@org_golang_x_crypto//hkdf:go_default_library", - ], -) diff --git a/validator/keymanager/derived/v1derivation/util.go b/validator/keymanager/derived/v1derivation/util.go deleted file mode 100644 index c1206b6694..0000000000 --- a/validator/keymanager/derived/v1derivation/util.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2019, 2020 Weald Technology Trading -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package v1derivation - -import ( - "crypto/sha256" - "fmt" - "math/big" - "strconv" - "strings" - - "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/shared/hashutil" - "github.com/wealdtech/go-bytesutil" - e2types "github.com/wealdtech/go-eth2-types/v2" - "golang.org/x/crypto/hkdf" -) - -func _bigInt(input string) *big.Int { - result, _ := new(big.Int).SetString(input, 10) - return result -} - -var ( - r = _bigInt("52435875175126190479447740508185965837690552500527637822603658699938581184513") - // 48 comes from ceil((1.5 * ceil(log2(r))) / 8) - l = 48 -) - -// PrivateKeyFromSeedAndPath generates a private key given a seed and a path. -// Follows ERC-2334. -func PrivateKeyFromSeedAndPath(seed []byte, path string) (*e2types.BLSPrivateKey, error) { - if path == "" { - return nil, errors.New("no path") - } - if len(seed) < 16 { - return nil, errors.New("seed must be at least 128 bits") - } - pathBits := strings.Split(path, "/") - var sk *big.Int - var err error - for i := range pathBits { - if pathBits[i] == "" { - return nil, fmt.Errorf("no entry at path component %d", i) - } - if pathBits[i] == "m" { - if i != 0 { - return nil, fmt.Errorf("invalid master at path component %d", i) - } - sk, err = DeriveMasterSK(seed) - if err != nil { - return nil, errors.Wrapf(err, "failed to generate master key at path component %d", i) - } - } else { - if i == 0 { - return nil, fmt.Errorf("not master at path component %d", i) - } - index, err := strconv.ParseInt(pathBits[i], 10, 32) - if err != nil || index < 0 { - return nil, fmt.Errorf("invalid index %q at path component %d", pathBits[i], i) - } - sk, err = DeriveChildSK(sk, uint32(index)) - if err != nil { - return nil, errors.Wrapf(err, "failed to derive child SK at path component %d", i) - } - } - } - - // SK can be shorter than 32 bytes so left-pad it here. - bytes := make([]byte, 32) - skBytes := sk.Bytes() - copy(bytes[32-len(skBytes):], skBytes) - - return e2types.BLSPrivateKeyFromBytes(bytes) -} - -// DeriveMasterSK derives the master secret key from a seed. -// Follows ERC-2333. -func DeriveMasterSK(seed []byte) (*big.Int, error) { - if len(seed) < 16 { - return nil, errors.New("seed must be at least 128 bits") - } - return hkdfModR(seed, "") -} - -// DeriveChildSK derives the child secret key from a parent key. -// Follows ERC-2333. -func DeriveChildSK(parentSK *big.Int, index uint32) (*big.Int, error) { - pk, err := parentSKToLamportPK(parentSK, index) - if err != nil { - return nil, err - } - return hkdfModR(pk, "") -} - -// ikmToLamportSK creates a Lamport secret key. -func ikmToLamportSK(ikm, salt []byte) ([255][32]byte, error) { - prk := hkdf.Extract(sha256.New, ikm, salt) - okm := hkdf.Expand(sha256.New, prk, nil) - var lamportSK [255][32]byte - for i := 0; i < 255; i++ { - var result [32]byte - read, err := okm.Read(result[:]) - if err != nil { - return lamportSK, err - } - if read != 32 { - return lamportSK, fmt.Errorf("only read %d bytes", read) - } - lamportSK[i] = result - } - - return lamportSK, nil -} - -// parentSKToLamportPK generates the Lamport private key from a BLS secret key. -func parentSKToLamportPK(parentSK *big.Int, index uint32) ([]byte, error) { - salt := i2OSP(big.NewInt(int64(index)), 4) - ikm := i2OSP(parentSK, 32) - lamport0, err := ikmToLamportSK(ikm, salt) - if err != nil { - return nil, err - } - notIKM := bytesutil.XOR(ikm) - lamport1, err := ikmToLamportSK(notIKM, salt) - if err != nil { - return nil, err - } - lamportPK := make([]byte, (255+255)*32) - for i := 0; i < 255; i++ { - h := hashutil.Hash(lamport0[i][:]) - copy(lamportPK[32*i:], h[:]) - } - for i := 0; i < 255; i++ { - h := hashutil.Hash(lamport1[i][:]) - copy(lamportPK[(i+255)*32:], h[:]) - } - compressedLamportPK := hashutil.Hash(lamportPK) - return compressedLamportPK[:], nil -} - -// hkdfModR hashes 32 random bytes into the subgroup of the BLS12-381 private keys. -func hkdfModR(ikm []byte, keyInfo string) (*big.Int, error) { - prk := hkdf.Extract(sha256.New, append(ikm, i2OSP(big.NewInt(0), 1)...), []byte("BLS-SIG-KEYGEN-SALT-")) - okm := hkdf.Expand(sha256.New, prk, append([]byte(keyInfo), i2OSP(big.NewInt(int64(l)), 2)...)) - okmOut := make([]byte, l) - read, err := okm.Read(okmOut) - if err != nil { - return nil, err - } - if read != l { - return nil, fmt.Errorf("only read %d bytes", read) - } - return new(big.Int).Mod(osToIP(okmOut), r), nil -} - -// osToIP turns a byte array in to an integer as per https://ietf.org/rfc/rfc3447.txt -func osToIP(data []byte) *big.Int { - return new(big.Int).SetBytes(data) -} - -// i2OSP turns an integer in to a byte array as per https://ietf.org/rfc/rfc3447.txt -func i2OSP(data *big.Int, resLen int) []byte { - res := make([]byte, resLen) - bytes := data.Bytes() - copy(res[resLen-len(bytes):], bytes) - return res -}