code: function pointFpMultiply(k) {
      if(this.isInfinity()) return this;
      if(k.signum() == 0) return this.curve.getInfinity();
  
      var e = k;
      var h = e.multiply(new BigInteger("3"));
  
      var neg = this.negate();
      var R = this;
  
      var i;
      for(i = h.bitLength() - 2; i > 0; --i) {
  	R = R.twice();
  
  	var hBit = h.testBit(i);
  	var eBit = e.testBit(i);
  
  	if (hBit != eBit) {
  	    R = R.add(hBit ? this : neg);
  	}
      }
  
      return R;
  }
docs: Simple NAF (Non-Adjacent Form) multiplication algorithm TODO: modularize the multiplication algorithm