Skip to content

Issue in affineFromJacobian #1

@MariusVanDerWijden

Description

@MariusVanDerWijden

Solution:

diff --git a/crypto/secp256k1/curve.go b/crypto/secp256k1/curve.go
index 5409ee1d2..c305f58da 100644
--- a/crypto/secp256k1/curve.go
+++ b/crypto/secp256k1/curve.go
@@ -116,6 +116,9 @@ func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool {
 // affineFromJacobian reverses the Jacobian transform. See the comment at the
 // top of the file.
 func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) {
+       if z.Sign() == 0 {
+               return new(big.Int), new(big.Int)
+       }
        zinv := new(big.Int).ModInverse(z, BitCurve.P)
        zinvsq := new(big.Int).Mul(zinv, zinv)

Tests:

func TestAffine(t *testing.T) {
	x := new(big.Int)
	y := new(big.Int)
	z := new(big.Int)
	theCurve.affineFromJacobian(x, y, z)
}

func TestAdd(t *testing.T) {
	x := new(big.Int)
	y := new(big.Int)
	z := new(big.Int)
	w := new(big.Int)
	theCurve.Add(x, y, z, w)
}

see also: ethereum/go-ethereum#18419

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions