commit c21eaf2ed183c526149cbe497dfd4f4f020e7067
parent 821f87dd4b5e0a0d98501448c8deec0dd19237d1
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 29 Jan 2023 20:32:11 -0800
cleanup + add doc
Diffstat:
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()