}\r
\r
static car25519 (o: BigInt64Array): void {\r
- let v: bigint, c: bigint = 1n\r
+ let v: bigint\r
+ let c: bigint = 0n\r
+ let s: bigint = 1n << 16n\r
for (let i = 0; i < 16; i++) {\r
- v = o[i] + c + 65535n\r
- c = v / 65536n\r
- o[i] = v - c * 65536n\r
+ v = o[i] + c + s\r
+ o[i] = v % s\r
+ c = v / s - 1n\r
}\r
- o[0] += 38n * (c - 1n)\r
+ o[0] += 38n * c\r
}\r
\r
static inv25519 (o: BigInt64Array, i: BigInt64Array): void {\r
}\r
\r
static Multiply (o: BigInt64Array, a: BigInt64Array, b: BigInt64Array): void {\r
- let v: bigint, c: bigint\r
+ let v: bigint\r
+ let c: bigint\r
const s: bigint = 1n << 16n\r
const t: BigInt64Array = new BigInt64Array(31)\r
t.fill(0n)\r
}\r
\r
static Square (o: BigInt64Array, a: BigInt64Array): void {\r
- let v: bigint, c: bigint\r
+ let v: bigint\r
+ let c: bigint\r
const s: bigint = 1n << 16n\r
const t: BigInt64Array = new BigInt64Array(31)\r
t.fill(0n)\r