diff --git a/x25519.lua b/x25519.lua index fca2ae3..dc4d74d 100644 --- a/x25519.lua +++ b/x25519.lua @@ -1,29 +1,20 @@ local expect = require "cc.expect".expect local fp = require "ccryptolib.fp" -local add = fp.add -local sub = fp.sub -local kmul = fp.kmul -local mul = fp.mul -local square = fp.square -local invert = fp.invert -local encode = fp.encode -local decode = fp.decode - local function step(dx, x1, z1, x2, z2) - local a = add(x1, z1) - local aa = square(a) - local b = sub(x1, z1) - local bb = square(b) - local e = sub(aa, bb) - local c = add(x2, z2) - local d = sub(x2, z2) - local da = mul(d, a) - local cb = mul(c, b) - local x4 = square(add(da, cb)) - local z4 = mul(dx, square(sub(da, cb))) - local x3 = mul(aa, bb) - local z3 = mul(e, add(bb, kmul(e, 121666))) + local a = fp.add(x1, z1) + local aa = fp.square(a) + local b = fp.sub(x1, z1) + local bb = fp.square(b) + local e = fp.sub(aa, bb) + local c = fp.add(x2, z2) + local d = fp.sub(x2, z2) + local da = fp.mul(d, a) + local cb = fp.mul(c, b) + local x4 = fp.square(fp.add(da, cb)) + local z4 = fp.mul(dx, fp.square(fp.sub(da, cb))) + local x3 = fp.mul(aa, bb) + local z3 = fp.mul(e, fp.add(bb, fp.kmul(e, 121666))) return x3, z3, x4, z4 end @@ -40,7 +31,7 @@ local function x25519(dx, bits) end end - return mul(x1, invert(z1)) + return fp.mul(x1, fp.invert(z1)) end local function bits(str) @@ -72,7 +63,7 @@ function mod.publicKey(sk) expect(1, sk, "string") assert(#sk == 32, "secret key length must be 32") - return encode(x25519({9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, bits(sk))) + return fp.encode(x25519({9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, bits(sk))) end function mod.exchange(sk, pk) @@ -81,7 +72,7 @@ function mod.exchange(sk, pk) expect(2, pk, "string") assert(#pk == 32, "public key length must be 32") - return encode(x25519(decode(pk), bits(sk))) + return fp.encode(x25519(fp.decode(pk), bits(sk))) end return mod