GoBit
GoBit copied to clipboard
Issue in affineFromJacobian
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: https://github.com/ethereum/go-ethereum/pull/18419