Remove Ed25519 exports for now
Old exports used masking which isn't supported anymore.
This commit is contained in:
parent
03f8835eb2
commit
7fa854c06b
65
ed25519.lua
65
ed25519.lua
|
@ -228,67 +228,4 @@ local function mul(P, bits)
|
|||
return R
|
||||
end
|
||||
|
||||
local function publicKey(sk)
|
||||
expect(1, sk, "string")
|
||||
assert(#sk == 32, "secret key length must be 32")
|
||||
-- FIXME SHA512 isn't constant-time.
|
||||
local h = sha512.digest(sk):sub(1, 32)
|
||||
local kBits, xkInvBits = blinding.decodeBlinded(h)
|
||||
local Y0 = mulG(xkInvBits)
|
||||
local Y1 = mul(Y0, kBits)
|
||||
return encode(scale(Y1))
|
||||
end
|
||||
|
||||
local function sign(sk, pk, msg)
|
||||
expect(1, sk, "string")
|
||||
assert(#sk == 32, "secret key length must be 32")
|
||||
expect(2, pk, "string")
|
||||
assert(#pk == 32, "public key length must be 32")
|
||||
expect(3, msg, "string")
|
||||
|
||||
-- Decode cwords and clamp with a mask.
|
||||
local h = sha512.digest(sk):sub(1, 32)
|
||||
local xm, m = fq.maskedDecode(h, random.random(32))
|
||||
|
||||
-- Commitment.
|
||||
local k = fq.decodeWide(random.random(64))
|
||||
local kBits = fq.bits(k)
|
||||
local R = mulG(kBits)
|
||||
|
||||
-- Challenge.
|
||||
local rStr = encode(scale(R))
|
||||
local e = fq.decodeWide(sha512.digest(rStr .. pk .. msg))
|
||||
|
||||
-- Response.
|
||||
local exm = fq.mul(e, xm)
|
||||
local em = fq.mul(e, m)
|
||||
local s = fq.add(fq.sub(k, exm), em)
|
||||
local sStr = fq.encode(s)
|
||||
|
||||
return rStr .. sStr
|
||||
end
|
||||
|
||||
local function verify(pk, msg, sig)
|
||||
expect(1, pk, "string")
|
||||
assert(#pk == 32, "public key length must be 32")
|
||||
expect(2, msg, "string")
|
||||
expect(3, sig, "string")
|
||||
assert(#sig == 64, "public key length must be 32")
|
||||
|
||||
local rStr = sig:sub(1, 32)
|
||||
local sStr = sig:sub(33)
|
||||
local Y = decode(pk)
|
||||
|
||||
local ev = fq.decodeWide(sha512.digest(rStr .. pk .. msg))
|
||||
local evBits = fq.bits(ev)
|
||||
local sBits = util.rebaseLE({sStr:byte(1, -1)}, 256, 2)
|
||||
local Rv = add(mulG(sBits), mul(Y, evBits))
|
||||
|
||||
return encode(scale(Rv)) == rStr
|
||||
end
|
||||
|
||||
return {
|
||||
publicKey = publicKey,
|
||||
sign = sign,
|
||||
verify = verify,
|
||||
}
|
||||
error("TODO")
|
||||
|
|
Loading…
Reference in a new issue