negate: () => Point
double: () => Point
add: (other: Point) => Point
- multiply: (n: bigint, safe?: boolean) => Point
+ multiply: (n: bigint) => Point
toAffine: () => AffinePoint
assertValidity: () => Point
toBytes: (isCompressed?: boolean) => Bytes
* @param n scalar by which point is multiplied
* @param safe safe mode guards against timing attacks; unsafe mode is faster
*/
- multiply (n: bigint, safe = true): Point {
- if (!safe && n === 0n) return secp256k1.I
- secp256k1.bigintInRange(n, 1n, secp256k1.N)
- if (n === 1n) return this
+ multiply (n: bigint): Point {
+ if (secp256k1.bigintInRange(n, 1n, secp256k1.N) === 1n) return this
if (this.equals(secp256k1.G)) return secp256k1.wNAF(n).p
// init result point & fake point
let p = secp256k1.I
// if bit is present, add to point
// if not present, add to fake, for timing safety
if (n & 1n) p = p.add(d)
- else if (safe) f = f.add(d)
+ else f = f.add(d)
}
return p
},