code: func (curve *KoblitzCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {
  	newK := curve.moduloReduce(k)
  	diff := len(curve.bytePoints) - len(newK)
  
  	// Point Q = ∞ (point at infinity).
  	qx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal)
  
  	// curve.bytePoints has all 256 byte points for each 8-bit window. The
  	// strategy is to add up the byte points. This is best understood by
  	// expressing k in base-256 which it already sort of is.
  	// Each "digit" in the 8-bit window can be looked up using bytePoints
  	// and added together.
  	for i, byteVal := range newK {
  		p := curve.bytePoints[diff+i][byteVal]
  		curve.addJacobian(qx, qy, qz, &p[0], &p[1], &p[2], qx, qy, qz)
  	}
  	return curve.fieldJacobianToBigAffine(qx, qy, qz)
  }
docs: // ScalarBaseMult returns k*G where G is the base point of the group and k is a
  // big endian integer.
  // Part of the elliptic.Curve interface.