Skip to content

Commit aa5f9b9

Browse files
committed
use kyber v4
1 parent 88970f2 commit aa5f9b9

23 files changed

Lines changed: 154 additions & 77 deletions

api/http.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import (
88

99
"github.com/MixinNetwork/tip/logger"
1010
"github.com/MixinNetwork/tip/store"
11-
"github.com/drand/kyber"
12-
"github.com/drand/kyber/share"
13-
"github.com/drand/kyber/share/dkg"
1411
"github.com/unrolled/render"
12+
"go.dedis.ch/kyber/v4"
13+
"go.dedis.ch/kyber/v4/share"
14+
"go.dedis.ch/kyber/v4/share/dkg/pedersen"
1515
)
1616

1717
type Handler struct {

api/http_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import (
1010
"time"
1111

1212
"github.com/MixinNetwork/tip/crypto"
13-
"github.com/drand/kyber"
14-
"github.com/drand/kyber/pairing/bn256"
15-
"github.com/drand/kyber/share"
16-
"github.com/drand/kyber/share/dkg"
17-
"github.com/drand/kyber/util/random"
1813
"github.com/stretchr/testify/require"
1914
"github.com/unrolled/render"
15+
"go.dedis.ch/kyber/v4"
16+
"go.dedis.ch/kyber/v4/pairing/bn256"
17+
"go.dedis.ch/kyber/v4/share"
18+
"go.dedis.ch/kyber/v4/share/dkg/pedersen"
19+
"go.dedis.ch/kyber/v4/util/random"
2020
)
2121

2222
type stubStore struct {

api/json.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import (
1111
"github.com/MixinNetwork/tip/keeper"
1212
"github.com/MixinNetwork/tip/logger"
1313
"github.com/MixinNetwork/tip/store"
14-
"github.com/drand/kyber"
15-
"github.com/drand/kyber/pairing/bn256"
16-
"github.com/drand/kyber/share"
17-
"github.com/drand/kyber/share/dkg"
18-
"github.com/drand/kyber/sign/tbls"
14+
"go.dedis.ch/kyber/v4"
15+
"go.dedis.ch/kyber/v4/pairing/bn256"
16+
"go.dedis.ch/kyber/v4/share"
17+
"go.dedis.ch/kyber/v4/share/dkg/pedersen"
18+
"go.dedis.ch/kyber/v4/sign/tbls"
1919
)
2020

2121
type SignRequest struct {

api/sign_test.go

Lines changed: 78 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package api
33
import (
44
"bytes"
55
"context"
6+
crand "crypto/rand"
67
"encoding/base64"
78
"encoding/binary"
89
"encoding/hex"
@@ -17,12 +18,12 @@ import (
1718
"github.com/MixinNetwork/tip/crypto"
1819
"github.com/MixinNetwork/tip/keeper"
1920
"github.com/MixinNetwork/tip/store"
20-
"github.com/drand/kyber"
21-
"github.com/drand/kyber/pairing/bn256"
22-
"github.com/drand/kyber/share"
23-
"github.com/drand/kyber/util/random"
2421
"github.com/stretchr/testify/require"
2522
"github.com/unrolled/render"
23+
"go.dedis.ch/kyber/v4"
24+
"go.dedis.ch/kyber/v4/pairing/bn256"
25+
"go.dedis.ch/kyber/v4/share"
26+
"go.dedis.ch/kyber/v4/util/random"
2627
)
2728

2829
type signStoreStub struct {
@@ -182,6 +183,79 @@ func TestSignSuccess(t *testing.T) {
182183
require.Equal(uint64(1), binary.BigEndian.Uint64(plain[assignorOffset+136:]))
183184
}
184185

186+
func TestSignMatchesLegacyKyberFixture(t *testing.T) {
187+
require := require.New(t)
188+
189+
const (
190+
serverKeyHex = "1d86753d770a1ced1103edb2ffd11728ee4ab6aed41094732c1748c72f2e181d"
191+
userKeyHex = "8bee954d5315684caa46d78fb8456a165bdd0cb44643d335a6b15c21d8c1872b"
192+
shareHex = "000000030e296d4c585d3aca61ebaf6a0e56ec11288baf0ab2b659d78a7b661a782fe092"
193+
ephemeralHex = "2b5a6b0cb9576ea218d081baa14d2cea82a6839165a29b3bdfc6ef8582b0ce5a"
194+
watcherHex = "2b5a6b0cb9576ea218d081baa14d2cea82a6839165a29b3bdfc6ef8582b0ce5a"
195+
196+
legacyRequestIdentity = "5JmMpYk6NEw3uMzciJ99iTpA9m5oLw3c8ocXd29CphTfdwc45FH3SFXYXKKATQqoF6FQHfCS9jZmSPpPbRuB1sj61QU2NxZ4388NVuXhXLLXfFp9gfKHSTtkGnSdsz8JyeZ3fKHD5ni8QVXXHkuftMdvkPswT2VmnyaMuRv3Dddt2sNk4EF3LL"
197+
legacyRequestSignature = "63abc17b385815e0636e690e582184bccdfbf64cc124828ce77964dfc0a174fb5756021009e35d30954f15ab923c9793e7f109a0c2f23a7e08da4fe58d93e3ee"
198+
legacyRequestData = "AAECAwQFBgcICQoL6WEvq0fOzUj9nxQTHRPzgwrEOk_n0VEjb6SAvDvhpZ-xStL3ki2iVh-DRyA570SZTl7tPacABMcVpXN6eMhjyU1p9iqjAOPid8oIVdS6xmq5N7OcNdtayngyHbWpKlERMh1_M_MCOxJV4xLg7tamdG5cdc9UBE5LItT-VmvxCrCyCOBQFZDqCiBF7Vhk9D8pzy9s147Zd9W1vJEPYquY_f1WPuXBnN5SpFn7e6zP1hbFssFZQtky_wmSBFtmN8dqvcyrIOH86gfivxUtGDSr5LjH3TV7DvOZfUqp43Ei4hPPlKHMSocoGHjYNhF3N58AggxsrLeLMW4Q77q4JQWd0HNaoZ3ugPjiyqlOnV5u9t1bZlPuhGSG9_4MCdpjHh_nJDrxgVIor9byghX_4Gd-bqxc21s6POUqB6yddyKS564nQX2h-SrgVHg7q5tFIDkM7vQT-wSd8nY763j4pt3d46qXCcnmFhWOcxukaFUhRy5NooVEBswtbY3sO5GxkV7MaQMu-znw4_FKpDtDJKfM-6-z0m7vFEby"
199+
legacyResponseCipher = "101112131415161718191a1b945842ae16cb61ef53e877257e70603814ed2f7aafe2acdc0b6a17dc7ea3bb017a5273a5df9e682444582718d8d1d9665a28f63ce07c14debc5bd0334653c28d7bae1d6dd71812ea84e971b05e6aecbddb39eb1cfff3b6bce8daa9c09e6a53714cd7f1f9f5c7a7d2c75e2b922abc19814390c9e09ad0094056c1a6d8636164e8b745ec6cb42c5fbe3d7dc7d71c55e507df3834b7b6b352285f52ca5cf8d978f2a201b70a506f8ba6fe5014d3a66929cc20886f79f14ddf0062d6afc7d66ab3b3dff58c9f2e7a69ee707ba0c10118d1179ec64bb84e462477f11b4e0bf28d4a25e8de03110b49c8ea4955"
200+
legacyResponseSignature = "7aba122edfcb613222322591ec133db26bcb5e70137334ce170d4b3baf72c79c676deb1b6146aa19caa6883b1dd50379ef8614e8f18c6078a68c15573bfbd18e"
201+
legacyResponsePlain = "00000000000004d200033e110b613b00caea0e0918da2f657595d749341a3c59f49b6163d64d3ed085271d939fe87abe13c16f892fcf4ea4e87c5b795e3983603ef5c7d6b0c1ed3095ad81e40f672aaf99d6a698ff4c57e2cc8ca9d15c1b295baff02de4569fa70ab21e44ec5aaa20c790ece45396c9124094c0ba4933e2bd6e9739ec7d9f74d6dfd8f529fe0e728169ee71856a62f59421a9a71b3426b817ca5c6ecac6b5e274dc0fef5b725833ebca07180a8031e9b44bcd1e852a017d6f4d85044af0e419f65bf3b117979d157ea0e87b0000000000000007"
202+
)
203+
204+
nonceBytes, err := hex.DecodeString("000102030405060708090a0b101112131415161718191a1b")
205+
require.NoError(err)
206+
oldReader := crand.Reader
207+
crand.Reader = bytes.NewReader(nonceBytes)
208+
t.Cleanup(func() {
209+
crand.Reader = oldReader
210+
})
211+
212+
serverKey, err := crypto.PrivateKeyFromHex(serverKeyHex)
213+
require.NoError(err)
214+
serverPub := crypto.PublicKey(serverKey)
215+
user, err := crypto.PrivateKeyFromHex(userKeyHex)
216+
require.NoError(err)
217+
ephmr, err := hex.DecodeString(ephemeralHex)
218+
require.NoError(err)
219+
220+
req := makeAPISignRequest(user, serverPub, ephmr, nil, 1234, uint64(keeper.EphemeralGracePeriod), "", watcherHex)
221+
require.Equal(legacyRequestIdentity, req.Identity)
222+
require.Equal(legacyRequestSignature, req.Signature)
223+
require.Equal(legacyRequestData, req.Data)
224+
225+
shareBytes, err := hex.DecodeString(shareHex)
226+
require.NoError(err)
227+
priv := &share.PriShare{
228+
I: binary.BigEndian.Uint32(shareBytes[:4]),
229+
V: bn256.NewSuiteG2().Scalar().SetBytes(shareBytes[4:]),
230+
}
231+
store := newSignStoreStub()
232+
store.writeSignRequestFn = func(assignor, watcher []byte) (time.Time, int, error) {
233+
require.Equal(crypto.PublicKeyBytes(crypto.PublicKey(user)), assignor)
234+
require.Equal(ephmr, watcher)
235+
return time.Unix(1700000100, 123), 7, nil
236+
}
237+
238+
data, sigHex, err := sign(serverKey, store, req, priv)
239+
require.NoError(err)
240+
require.Equal(legacyResponseSignature, sigHex)
241+
242+
body := data.(map[string]any)
243+
require.Equal(legacyResponseCipher, body["cipher"])
244+
245+
payload, err := json.Marshal(data)
246+
require.NoError(err)
247+
sig, err := hex.DecodeString(sigHex)
248+
require.NoError(err)
249+
require.NoError(crypto.Verify(serverPub, payload, sig))
250+
251+
cipher, err := hex.DecodeString(body["cipher"].(string))
252+
require.NoError(err)
253+
plain := crypto.DecryptECDH(serverPub, user, cipher)
254+
require.Equal(legacyResponsePlain, hex.EncodeToString(plain))
255+
require.Equal(uint64(1234), binary.BigEndian.Uint64(plain[:8]))
256+
require.Equal(uint64(7), binary.BigEndian.Uint64(plain[len(plain)-8:]))
257+
}
258+
185259
func TestSignMapsErrors(t *testing.T) {
186260
require := require.New(t)
187261

crypto/aes.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import (
66
"crypto/rand"
77
"crypto/sha3"
88

9-
"github.com/drand/kyber"
10-
"github.com/drand/kyber/pairing/bn256"
11-
"github.com/drand/kyber/util/random"
9+
"go.dedis.ch/kyber/v4"
10+
"go.dedis.ch/kyber/v4/pairing/bn256"
11+
"go.dedis.ch/kyber/v4/util/random"
1212
)
1313

1414
func ecdh(point kyber.Point, scalar kyber.Scalar) []byte {

crypto/aes_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package crypto
33
import (
44
"testing"
55

6-
"github.com/drand/kyber/pairing/bn256"
7-
"github.com/drand/kyber/util/random"
86
"github.com/stretchr/testify/require"
7+
"go.dedis.ch/kyber/v4/pairing/bn256"
8+
"go.dedis.ch/kyber/v4/util/random"
99
)
1010

1111
func TestDH(t *testing.T) {

crypto/bls.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import (
55
"fmt"
66

77
"github.com/btcsuite/btcd/address/v2/base58"
8-
"github.com/drand/kyber"
9-
"github.com/drand/kyber/pairing/bn256"
10-
"github.com/drand/kyber/sign/bdn"
8+
"go.dedis.ch/kyber/v4"
9+
"go.dedis.ch/kyber/v4/pairing/bn256"
10+
"go.dedis.ch/kyber/v4/sign/bdn"
1111
)
1212

1313
const (

crypto/bls_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import (
55
"testing"
66

77
"github.com/btcsuite/btcd/address/v2/base58"
8-
"github.com/drand/kyber/pairing/bn256"
9-
"github.com/drand/kyber/util/random"
108
"github.com/stretchr/testify/require"
9+
"go.dedis.ch/kyber/v4/pairing/bn256"
10+
"go.dedis.ch/kyber/v4/util/random"
1111
)
1212

1313
func TestBLSRoundTripAndConversions(t *testing.T) {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ require (
88
github.com/MixinNetwork/bot-api-go-client/v3 v3.24.4
99
github.com/btcsuite/btcd/address/v2 v2.0.0
1010
github.com/dgraph-io/badger/v4 v4.9.2
11-
github.com/drand/kyber v1.3.2
1211
github.com/fox-one/mixin-sdk-go/v2 v2.1.3
1312
github.com/gofrs/uuid/v5 v5.4.0
1413
github.com/pelletier/go-toml v1.9.5
1514
github.com/stretchr/testify v1.11.1
1615
github.com/unrolled/render v1.7.0
1716
github.com/urfave/cli/v2 v2.27.7
17+
go.dedis.ch/kyber/v4 v4.0.2
1818
golang.org/x/crypto v0.53.0
1919
)
2020

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
3636
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3737
github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU=
3838
github.com/dgraph-io/ristretto/v2 v2.4.0/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E=
39-
github.com/drand/kyber v1.3.2 h1:Cf3NNcb5bV3eODopr3XVHzImjDK40GiObhFUFG93Zeo=
40-
github.com/drand/kyber v1.3.2/go.mod h1:ciDFWoC7ajb89niGJnS4C1Xeo4lSJMmbi+km5w8juAI=
4139
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
4240
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
4341
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -127,6 +125,8 @@ github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
127125
github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=
128126
go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs=
129127
go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw=
128+
go.dedis.ch/kyber/v4 v4.0.2 h1:mhkEtisakzGJtzH5qWZL8KfXk28ihrb9YD9/r9eF6Gg=
129+
go.dedis.ch/kyber/v4 v4.0.2/go.mod h1:lwIPsXtmW8fw5Ap50SBfwgSQiSCvpGByP1gbWJ5XCqw=
130130
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
131131
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
132132
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=

0 commit comments

Comments
 (0)