Skip to content

Commit 3729331

Browse files
authored
Merge branch 'master' into dependabot/npm_and_yarn/docs/benchmark-app/micromatch-4.0.8
2 parents d48e28f + 23debab commit 3729331

33 files changed

+4049
-492
lines changed

benchmark/benchmark.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,16 @@ func benchmarkSign(sigType string) map[string]interface{} {
146146
// Signing
147147
for _, i := range keys {
148148
results["sign"][fmt.Sprintf("%d", i)] = testing.Benchmark(func(b *testing.B) {
149-
_, scheme, _, privates, _, _ := test.PrepareBLS(i)
149+
scheme, _, privates, _, _ := test.PrepareBLS(i)
150150
test.BenchSign(b, scheme, benchMessage, privates)
151151
})
152152
}
153153

154154
// Verification
155155
for _, i := range keys {
156156
results["verify"][fmt.Sprintf("%d", i)] = testing.Benchmark(func(b *testing.B) {
157-
suite, scheme, publics, _, msgs, sigs := test.PrepareBLS(i)
158-
test.BLSBenchVerify(b, sigs, scheme, suite, publics, msgs)
157+
scheme, publics, _, msgs, sigs := test.PrepareBLS(i)
158+
test.BLSBenchVerify(b, sigs, scheme, publics, msgs)
159159
})
160160
}
161161
}

docs/benchmark-app/package-lock.json

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

group/edwards25519/curve.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (c *Curve) NewKeyAndSeedWithInput(buffer []byte) (kyber.Scalar, []byte, []b
5454
digest[31] &= 0x7f
5555
digest[31] |= 0x40
5656

57-
secret := c.Scalar().(*scalar) //nolint:errcheck // V4 may bring better error handling
57+
secret := c.Scalar().(*scalar) //nolint:errcheck // Design pattern to emulate generics
5858
copy(secret.v[:], digest[:])
5959
return secret, buffer, digest[32:]
6060
}

group/edwards25519/point.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ func (P *point) Data() ([]byte, error) {
185185
}
186186

187187
func (P *point) Add(P1, P2 kyber.Point) kyber.Point {
188-
E1 := P1.(*point) //nolint:errcheck // V4 may bring better error handling
189-
E2 := P2.(*point) //nolint:errcheck // V4 may bring better error handling
188+
E1 := P1.(*point) //nolint:errcheck // Design pattern to emulate generics
189+
E2 := P2.(*point) //nolint:errcheck // Design pattern to emulate generics
190190

191191
var t2 cachedGroupElement
192192
var r completedGroupElement
@@ -199,8 +199,8 @@ func (P *point) Add(P1, P2 kyber.Point) kyber.Point {
199199
}
200200

201201
func (P *point) Sub(P1, P2 kyber.Point) kyber.Point {
202-
E1 := P1.(*point) //nolint:errcheck // V4 may bring better error handling
203-
E2 := P2.(*point) //nolint:errcheck // V4 may bring better error handling
202+
E1 := P1.(*point) //nolint:errcheck // Design pattern to emulate generics
203+
E2 := P2.(*point) //nolint:errcheck // Design pattern to emulate generics
204204

205205
var t2 cachedGroupElement
206206
var r completedGroupElement

group/edwards25519/scalar.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (s *scalar) Div(a, b kyber.Scalar) kyber.Scalar {
113113
func (s *scalar) Inv(a kyber.Scalar) kyber.Scalar {
114114
var res scalar
115115
res.One()
116-
ac := a.(*scalar) //nolint:errcheck // V4 may bring better error handling
116+
ac := a.(*scalar) //nolint:errcheck // Design pattern to emulate generics
117117
// Modular inversion in a multiplicative group is a^(phi(m)-1) = a^-1 mod m
118118
// Since m is prime, phi(m) = m - 1 => a^(m-2) = a^-1 mod m.
119119
// The inverse is computed using the exponentation-and-square algorithm.

group/edwards25519vartime/ext.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type extPoint struct {
1717
}
1818

1919
func (P *extPoint) initXY(x, y *big.Int, c kyber.Group) {
20-
P.c = c.(*ExtendedCurve) //nolint:errcheck // V4 may bring better error handling
20+
P.c = c.(*ExtendedCurve) //nolint:errcheck // Design pattern to emulate generics
2121

2222
P.X.Init(x, &P.c.P)
2323
P.Y.Init(y, &P.c.P)
@@ -69,15 +69,15 @@ func (P *extPoint) UnmarshalFrom(r io.Reader) (int, error) {
6969
// iff
7070
// (X1*Z2,Y1*Z2) == (X2*Z1,Y2*Z1)
7171
func (P *extPoint) Equal(CP2 kyber.Point) bool {
72-
p2 := CP2.(*extPoint) //nolint:errcheck // V4 may bring better error handling
72+
p2 := CP2.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
7373
var t1, t2 mod.Int
7474
xeq := t1.Mul(&P.X, &p2.Z).Equal(t2.Mul(&p2.X, &P.Z))
7575
yeq := t1.Mul(&P.Y, &p2.Z).Equal(t2.Mul(&p2.Y, &P.Z))
7676
return xeq && yeq
7777
}
7878

7979
func (P *extPoint) Set(CP2 kyber.Point) kyber.Point {
80-
p2 := CP2.(*extPoint) //nolint:errcheck // V4 may bring better error handling
80+
p2 := CP2.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
8181
P.c = p2.c
8282
P.X.Set(&p2.X)
8383
P.Y.Set(&p2.Y)
@@ -149,8 +149,8 @@ func (P *extPoint) Data() ([]byte, error) {
149149
//
150150
//nolint:dupl //Doesn't make sense to extract part of Add(), Sub(), double()
151151
func (P *extPoint) Add(CP1, CP2 kyber.Point) kyber.Point {
152-
p1 := CP1.(*extPoint) //nolint:errcheck // V4 may bring better error handling
153-
p2 := CP2.(*extPoint) //nolint:errcheck // V4 may bring better error handling
152+
p1 := CP1.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
153+
p2 := CP2.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
154154
X1, Y1, Z1, T1 := &p1.X, &p1.Y, &p1.Z, &p1.T
155155
X2, Y2, Z2, T2 := &p2.X, &p2.Y, &p2.Z, &p2.T
156156
X3, Y3, Z3, T3 := &P.X, &P.Y, &P.Z, &P.T
@@ -175,8 +175,8 @@ func (P *extPoint) Add(CP1, CP2 kyber.Point) kyber.Point {
175175
//
176176
//nolint:dupl //Doesn't make sense to extract part of Add(), Sub(), double()
177177
func (P *extPoint) Sub(CP1, CP2 kyber.Point) kyber.Point {
178-
p1 := CP1.(*extPoint) //nolint:errcheck // V4 may bring better error handling
179-
p2 := CP2.(*extPoint) //nolint:errcheck // V4 may bring better error handling
178+
p1 := CP1.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
179+
p2 := CP2.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
180180
X1, Y1, Z1, T1 := &p1.X, &p1.Y, &p1.Z, &p1.T
181181
X2, Y2, Z2, T2 := &p2.X, &p2.Y, &p2.Z, &p2.T
182182
X3, Y3, Z3, T3 := &P.X, &P.Y, &P.Z, &P.T
@@ -200,7 +200,7 @@ func (P *extPoint) Sub(CP1, CP2 kyber.Point) kyber.Point {
200200
// Find the negative of point A.
201201
// For Edwards curves, the negative of (x,y) is (-x,y).
202202
func (P *extPoint) Neg(CA kyber.Point) kyber.Point {
203-
A := CA.(*extPoint) //nolint:errcheck // V4 may bring better error handling
203+
A := CA.(*extPoint) //nolint:errcheck // Design pattern to emulate generics
204204
P.c = A.c
205205
P.X.Neg(&A.X)
206206
P.Y.Set(&A.Y)

group/edwards25519vartime/proj.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type projPoint struct {
1616
}
1717

1818
func (P *projPoint) initXY(x, y *big.Int, c kyber.Group) {
19-
P.c = c.(*ProjectiveCurve) //nolint:errcheck // V4 may bring better error handling
19+
P.c = c.(*ProjectiveCurve) //nolint:errcheck // Design pattern to emulate generics
2020
P.X.Init(x, &P.c.P)
2121
P.Y.Init(y, &P.c.P)
2222
P.Z.Init64(1, &P.c.P)
@@ -61,15 +61,15 @@ func (P *projPoint) UnmarshalFrom(r io.Reader) (int, error) {
6161
// iff
6262
// (X1*Z2,Y1*Z2) == (X2*Z1,Y2*Z1)
6363
func (P *projPoint) Equal(CP2 kyber.Point) bool {
64-
P2 := CP2.(*projPoint) //nolint:errcheck // V4 may bring better error handling
64+
P2 := CP2.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
6565
var t1, t2 mod.Int
6666
xeq := t1.Mul(&P.X, &P2.Z).Equal(t2.Mul(&P2.X, &P.Z))
6767
yeq := t1.Mul(&P.Y, &P2.Z).Equal(t2.Mul(&P2.Y, &P.Z))
6868
return xeq && yeq
6969
}
7070

7171
func (P *projPoint) Set(CP2 kyber.Point) kyber.Point {
72-
P2 := CP2.(*projPoint) //nolint:errcheck // V4 may bring better error handling
72+
P2 := CP2.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
7373
P.c = P2.c
7474
P.X.Set(&P2.X)
7575
P.Y.Set(&P2.Y)
@@ -131,8 +131,8 @@ func (P *projPoint) Data() ([]byte, error) {
131131
//
132132
//nolint:dupl //Doesn't make sense to extract part of Add(), Sub()
133133
func (P *projPoint) Add(CP1, CP2 kyber.Point) kyber.Point {
134-
P1 := CP1.(*projPoint) //nolint:errcheck // V4 may bring better error handling
135-
P2 := CP2.(*projPoint) //nolint:errcheck // V4 may bring better error handling
134+
P1 := CP1.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
135+
P2 := CP2.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
136136
X1, Y1, Z1 := &P1.X, &P1.Y, &P1.Z
137137
X2, Y2, Z2 := &P2.X, &P2.Y, &P2.Z
138138
var A, B, C, D, E, F, G, X3, Y3, Z3 mod.Int
@@ -160,8 +160,8 @@ func (P *projPoint) Add(CP1, CP2 kyber.Point) kyber.Point {
160160
//
161161
//nolint:dupl //Doesn't make sense to extract part of Add(), Sub(), double()
162162
func (P *projPoint) Sub(CP1, CP2 kyber.Point) kyber.Point {
163-
P1 := CP1.(*projPoint) //nolint:errcheck // V4 may bring better error handling
164-
P2 := CP2.(*projPoint) //nolint:errcheck // V4 may bring better error handling
163+
P1 := CP1.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
164+
P2 := CP2.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
165165
X1, Y1, Z1 := &P1.X, &P1.Y, &P1.Z
166166
X2, Y2, Z2 := &P2.X, &P2.Y, &P2.Z
167167
var A, B, C, D, E, F, G, X3, Y3, Z3 mod.Int
@@ -188,7 +188,7 @@ func (P *projPoint) Sub(CP1, CP2 kyber.Point) kyber.Point {
188188
// Find the negative of point A.
189189
// For Edwards curves, the negative of (x,y) is (-x,y).
190190
func (P *projPoint) Neg(CA kyber.Point) kyber.Point {
191-
A := CA.(*projPoint) //nolint:errcheck // V4 may bring better error handling
191+
A := CA.(*projPoint) //nolint:errcheck // Design pattern to emulate generics
192192
P.c = A.c
193193
P.X.Neg(&A.X)
194194
P.Y.Set(&A.Y)

group/mod/int.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (i *Int) Nonzero() bool {
141141
// Since this method copies the modulus as well,
142142
// it may be used as an alternative to Init().
143143
func (i *Int) Set(a kyber.Scalar) kyber.Scalar {
144-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
144+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
145145
i.V.Set(&ai.V)
146146
i.M = ai.M
147147
return i
@@ -194,8 +194,8 @@ func (i *Int) Uint64() uint64 {
194194

195195
// Add sets the target to a + b mod M, where M is a's modulus..
196196
func (i *Int) Add(a, b kyber.Scalar) kyber.Scalar {
197-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
198-
bi := b.(*Int) //nolint:errcheck // V4 may bring better error handling
197+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
198+
bi := b.(*Int) //nolint:errcheck // Design pattern to emulate generics
199199
i.M = ai.M
200200
i.V.Add(&ai.V, &bi.V).Mod(&i.V, i.M)
201201
return i
@@ -204,16 +204,16 @@ func (i *Int) Add(a, b kyber.Scalar) kyber.Scalar {
204204
// Sub sets the target to a - b mod M.
205205
// Target receives a's modulus.
206206
func (i *Int) Sub(a, b kyber.Scalar) kyber.Scalar {
207-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
208-
bi := b.(*Int) //nolint:errcheck // V4 may bring better error handling
207+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
208+
bi := b.(*Int) //nolint:errcheck // Design pattern to emulate generics
209209
i.M = ai.M
210210
i.V.Sub(&ai.V, &bi.V).Mod(&i.V, i.M)
211211
return i
212212
}
213213

214214
// Neg sets the target to -a mod M.
215215
func (i *Int) Neg(a kyber.Scalar) kyber.Scalar {
216-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
216+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
217217
i.M = ai.M
218218
if ai.V.Sign() > 0 {
219219
i.V.Sub(i.M, &ai.V)
@@ -226,17 +226,17 @@ func (i *Int) Neg(a kyber.Scalar) kyber.Scalar {
226226
// Mul sets the target to a * b mod M.
227227
// Target receives a's modulus.
228228
func (i *Int) Mul(a, b kyber.Scalar) kyber.Scalar {
229-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
230-
bi := b.(*Int) //nolint:errcheck // V4 may bring better error handling
229+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
230+
bi := b.(*Int) //nolint:errcheck // Design pattern to emulate generics
231231
i.M = ai.M
232232
i.V.Mul(&ai.V, &bi.V).Mod(&i.V, i.M)
233233
return i
234234
}
235235

236236
// Div sets the target to a * b^-1 mod M, where b^-1 is the modular inverse of b.
237237
func (i *Int) Div(a, b kyber.Scalar) kyber.Scalar {
238-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
239-
bi := b.(*Int) //nolint:errcheck // V4 may bring better error handling
238+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
239+
bi := b.(*Int) //nolint:errcheck // Design pattern to emulate generics
240240
var t big.Int
241241
i.M = ai.M
242242
i.V.Mul(&ai.V, t.ModInverse(&bi.V, i.M))
@@ -246,7 +246,7 @@ func (i *Int) Div(a, b kyber.Scalar) kyber.Scalar {
246246

247247
// Inv sets the target to the modular inverse of a with respect to modulus M.
248248
func (i *Int) Inv(a kyber.Scalar) kyber.Scalar {
249-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
249+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
250250
i.M = ai.M
251251
i.V.ModInverse(&a.(*Int).V, i.M)
252252
return i
@@ -255,7 +255,7 @@ func (i *Int) Inv(a kyber.Scalar) kyber.Scalar {
255255
// Exp sets the target to a^e mod M,
256256
// where e is an arbitrary big.Int exponent (not necessarily 0 <= e < M).
257257
func (i *Int) Exp(a kyber.Scalar, e *big.Int) kyber.Scalar {
258-
ai := a.(*Int) //nolint:errcheck // V4 may bring better error handling
258+
ai := a.(*Int) //nolint:errcheck // Design pattern to emulate generics
259259
i.M = ai.M
260260
// to protect against golang/go#22830
261261
var tmp big.Int
@@ -267,7 +267,7 @@ func (i *Int) Exp(a kyber.Scalar, e *big.Int) kyber.Scalar {
267267
// Jacobi computes the Jacobi symbol of (a/M), which indicates whether a is
268268
// zero (0), a positive square in M (1), or a non-square in M (-1).
269269
func (i *Int) Jacobi(as kyber.Scalar) kyber.Scalar {
270-
ai := as.(*Int) //nolint:errcheck // V4 may bring better error handling
270+
ai := as.(*Int) //nolint:errcheck // Design pattern to emulate generics
271271
i.M = ai.M
272272
i.V.SetInt64(int64(big.Jacobi(&ai.V, i.M)))
273273
return i
@@ -277,7 +277,7 @@ func (i *Int) Jacobi(as kyber.Scalar) kyber.Scalar {
277277
// Assumes the modulus M is an odd prime.
278278
// Returns true on success, false if input a is not a square.
279279
func (i *Int) Sqrt(as kyber.Scalar) bool {
280-
ai := as.(*Int) //nolint:errcheck // V4 may bring better error handling
280+
ai := as.(*Int) //nolint:errcheck // Design pattern to emulate generics
281281
out := i.V.ModSqrt(&ai.V, ai.M)
282282
i.M = ai.M
283283
return out != nil

group/p256/curve.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (P *curvePoint) String() string {
2323
}
2424

2525
func (P *curvePoint) Equal(P2 kyber.Point) bool {
26-
cp2 := P2.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
26+
cp2 := P2.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
2727

2828
// Make sure both coordinates are normalized.
2929
// Apparently Go's elliptic curve code doesn't always ensure this.
@@ -134,17 +134,17 @@ func (P *curvePoint) Data() ([]byte, error) {
134134
}
135135

136136
func (P *curvePoint) Add(A, B kyber.Point) kyber.Point {
137-
ca := A.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
138-
cb := B.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
137+
ca := A.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
138+
cb := B.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
139139
P.x, P.y = P.c.Add(ca.x, ca.y, cb.x, cb.y)
140140
return P
141141
}
142142

143143
func (P *curvePoint) Sub(A, B kyber.Point) kyber.Point {
144-
ca := A.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
145-
cb := B.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
144+
ca := A.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
145+
cb := B.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
146146

147-
cbn := P.c.Point().Neg(cb).(*curvePoint) //nolint:errcheck // V4 may bring better error handling
147+
cbn := P.c.Point().Neg(cb).(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
148148
P.x, P.y = P.c.Add(ca.x, ca.y, cbn.x, cbn.y)
149149
return P
150150
}
@@ -156,9 +156,9 @@ func (P *curvePoint) Neg(A kyber.Point) kyber.Point {
156156
}
157157

158158
func (P *curvePoint) Mul(s kyber.Scalar, B kyber.Point) kyber.Point {
159-
cs := s.(*mod.Int) //nolint:errcheck // V4 may bring better error handling
159+
cs := s.(*mod.Int) //nolint:errcheck // Design pattern to emulate generics
160160
if B != nil {
161-
cb := B.(*curvePoint) //nolint:errcheck // V4 may bring better error handling
161+
cb := B.(*curvePoint) //nolint:errcheck // Design pattern to emulate generics
162162
P.x, P.y = P.c.ScalarMult(cb.x, cb.y, cs.V.Bytes())
163163
} else {
164164
P.x, P.y = P.c.ScalarBaseMult(cs.V.Bytes())

group/p256/group_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package p256
22

33
import (
4+
"encoding/hex"
5+
"math/big"
6+
"strings"
47
"testing"
58

9+
"github.com/stretchr/testify/require"
610
"go.dedis.ch/kyber/v4/util/test"
711
)
812

@@ -24,6 +28,26 @@ func TestSetBytesBE(t *testing.T) {
2428
}
2529
}
2630

31+
func TestVectors(t *testing.T) {
32+
k := big.NewInt(0)
33+
s := testP256.Scalar()
34+
35+
BasePoint := testP256.Point().Base().(*curvePoint)
36+
BasePoint.x.SetString(basePointScalarMult[0].X, 16)
37+
BasePoint.y.SetString(basePointScalarMult[0].Y, 16)
38+
39+
for _, vec := range basePointScalarMult {
40+
// Read from strings
41+
k, ok := k.SetString(vec.K, 10)
42+
require.Equal(t, true, ok)
43+
s.SetBytes(k.Bytes())
44+
45+
Q := testP256.Point().Mul(s, BasePoint).(*curvePoint)
46+
require.Equal(t, strings.ToLower(vec.X), hex.EncodeToString(Q.x.Bytes()))
47+
require.Equal(t, strings.ToLower(vec.Y), hex.EncodeToString(Q.y.Bytes()))
48+
}
49+
}
50+
2751
var benchP256 = test.NewGroupBench(testP256)
2852

2953
func BenchmarkScalarAdd(b *testing.B) { benchP256.ScalarAdd(b.N) }

0 commit comments

Comments
 (0)