@@ -149,6 +149,36 @@ func TestMultiScalarMultMatchesBaseMult(t *testing.T) {
149149 }
150150}
151151
152+ func TestMultiScalarMultZeroReceiver (t * testing.T ) {
153+ // A zero-value (uninitialized) receiver should be handled correctly,
154+ // producing a valid point on the curve.
155+ var p Point
156+ p .MultiScalarMult ([]* Scalar {dalekScalar }, []* Point {B })
157+
158+ var check Point
159+ check .ScalarBaseMult (dalekScalar )
160+
161+ checkOnCurve (t , & p , & check )
162+ if p .Equal (& check ) != 1 {
163+ t .Error ("MultiScalarMult with zero-value receiver did not match ScalarBaseMult" )
164+ }
165+ }
166+
167+ func TestMultiScalarMultReceiverAliasing (t * testing.T ) {
168+ // The receiver v aliasing one of the input points should produce
169+ // the correct result.
170+ p := NewGeneratorPoint ()
171+ p .MultiScalarMult ([]* Scalar {dalekScalar }, []* Point {p })
172+
173+ var check Point
174+ check .ScalarBaseMult (dalekScalar )
175+
176+ checkOnCurve (t , p , & check )
177+ if p .Equal (& check ) != 1 {
178+ t .Error ("MultiScalarMult with aliased receiver did not match ScalarBaseMult" )
179+ }
180+ }
181+
152182func TestVarTimeMultiScalarMultMatchesBaseMult (t * testing.T ) {
153183 varTimeMultiScalarMultMatchesBaseMult := func (x , y , z Scalar ) bool {
154184 var p , q1 , q2 , q3 , check Point
0 commit comments