code: func (curve *KoblitzCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {
  	// A point at infinity is the identity according to the group law for
  	// elliptic curve cryptography.  Thus, ∞ + P = P and P + ∞ = P.
  	if x1.Sign() == 0 && y1.Sign() == 0 {
  		return x2, y2
  	}
  	if x2.Sign() == 0 && y2.Sign() == 0 {
  		return x1, y1
  	}
  
  	// Convert the affine coordinates from big integers to field values
  	// and do the point addition in Jacobian projective space.
  	fx1, fy1 := curve.bigAffineToField(x1, y1)
  	fx2, fy2 := curve.bigAffineToField(x2, y2)
  	fx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal)
  	fOne := new(fieldVal).SetInt(1)
  	curve.addJacobian(fx1, fy1, fOne, fx2, fy2, fOne, fx3, fy3, fz3)
  
  	// Convert the Jacobian coordinate field values back to affine big
  	// integers.
  	return curve.fieldJacobianToBigAffine(fx3, fy3, fz3)
  }
docs: // Add returns the sum of (x1,y1) and (x2,y2). Part of the elliptic.Curve
  // interface.