From 73e0df0b5ec4e424c482d8e0ec355445458f3a31 Mon Sep 17 00:00:00 2001 From: Miguel Oliveira Date: Mon, 2 Jan 2023 16:02:03 -0300 Subject: [PATCH] Add masked signing --- ccryptolib/ed25519.lua | 7 +- ccryptolib/internal/edwards25519.lua | 1 + ccryptolib/internal/fq.lua | 48 ++++------ ccryptolib/x25519c.lua | 138 ++++++++++++++++++++------- spec/x25519c_spec.lua | 6 +- 5 files changed, 128 insertions(+), 72 deletions(-) diff --git a/ccryptolib/ed25519.lua b/ccryptolib/ed25519.lua index b282eea..01b2036 100644 --- a/ccryptolib/ed25519.lua +++ b/ccryptolib/ed25519.lua @@ -11,11 +11,6 @@ local random = require "ccryptolib.random" local mod = {} ---- Converts a signing key to an equivalent exchange key. -function mod.exchangeKey(sk) - return sha512.digest(sk):sub(1, 32) -end - --- Computes a public key from a secret key. -- -- @tparam string sk A random 32-byte secret key. @@ -59,7 +54,7 @@ function mod.sign(sk, pk, msg) -- Response. local m = fq.decodeWide(random.random(64)) - local s = fq.add(fq.add(k, fq.mul(fq.add(x, m), e)), fq.mul(m, e)) + local s = fq.sub(fq.add(k, fq.mul(fq.add(x, m), e)), fq.mul(m, e)) local sStr = fq.encode(s) return rStr .. sStr diff --git a/ccryptolib/internal/edwards25519.lua b/ccryptolib/internal/edwards25519.lua index c61d0a7..898920b 100644 --- a/ccryptolib/internal/edwards25519.lua +++ b/ccryptolib/internal/edwards25519.lua @@ -276,6 +276,7 @@ return { add = add, sub = sub, niels = niels, + scale = scale, encode = encode, decode = decode, mulG = mulG, diff --git a/ccryptolib/internal/fq.lua b/ccryptolib/internal/fq.lua index 205a7bc..64693c3 100644 --- a/ccryptolib/internal/fq.lua +++ b/ccryptolib/internal/fq.lua @@ -20,7 +20,7 @@ local ufq = packing.compileUnpack(fmtfq) local ufql, fmtfql = packing.compileUnpack("