dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit c21eaf2ed183c526149cbe497dfd4f4f020e7067
parent 821f87dd4b5e0a0d98501448c8deec0dd19237d1
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 29 Jan 2023 20:32:11 -0800

cleanup + add doc

Diffstat:
Mcmd/torsign/torsign.py | 37+++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/cmd/torsign/torsign.py b/cmd/torsign/torsign.py @@ -2,6 +2,9 @@ import argparse import base64 import hashlib +# All the code come from onionbalance codebase +# https://gitlab.torproject.org/tpo/core/onionbalance/-/blob/main/onionbalance/hs_v3/ext/slow_ed25519.py + def load_tor_key_from_disk(key_bytes): if key_bytes[:29] != b'== ed25519v1-secret: type0 ==': @@ -22,8 +25,13 @@ def publickeyFromESK(h): return encodepoint(A) -def decodeint(s): - return sum(2**i * bit(s,i) for i in range(0,b)) +def signatureWithESK(m,h,pk): + a = decodeint(h[:32]) + tohint = b''.join([bytes([h[i]]) for i in range(b//8,b//4)]) + m + r = Hint(tohint) + R = scalarmult(B,r) + S = (r + Hint(encodepoint(R) + pk + m) * a) % l + return encodepoint(R) + encodeint(S) def scalarmult(P,e): @@ -64,15 +72,6 @@ By = 4 * inv(5) Bx = xrecover(By) B = [Bx % q,By % q] - -def encodepoint(P): - x = P[0] - y = P[1] - bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1] - return b''.join([bytes([sum([bits[i * 8 + j] << j for j in range(8)])]) for i in range(b//8)]) - - - def edwards(P,Q): x1 = P[0] y1 = P[1] @@ -96,18 +95,20 @@ def Hint(m): return sum(2**i * bit(h,i) for i in range(2*b)) +def encodepoint(P): + x = P[0] + y = P[1] + bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1] + return b''.join([bytes([sum([bits[i * 8 + j] << j for j in range(8)])]) for i in range(b//8)]) + + def encodeint(y): bits = [(y >> i) & 1 for i in range(b)] return b''.join([bytes([sum([bits[i * 8 + j] << j for j in range(8)])]) for i in range(b//8)]) -def signatureWithESK(m,h,pk): - a = decodeint(h[:32]) - tohint = b''.join([bytes([h[i]]) for i in range(b//8,b//4)]) + m - r = Hint(tohint) - R = scalarmult(B,r) - S = (r + Hint(encodepoint(R) + pk + m) * a) % l - return encodepoint(R) + encodeint(S) +def decodeint(s): + return sum(2**i * bit(s,i) for i in range(0,b)) parser = argparse.ArgumentParser()