From 70182f71679d0a19b1a63e976ee055b5c26d4db8 Mon Sep 17 00:00:00 2001 From: Mike Date: Thu, 1 Feb 2024 16:12:33 +0200 Subject: [PATCH] . --- ed25519.l | 1 + expmod.l | 13 ++----------- scalarmult.l | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/ed25519.l b/ed25519.l index e3f94c7..eaf6733 100644 --- a/ed25519.l +++ b/ed25519.l @@ -55,6 +55,7 @@ (% *By *Q) ) ) (de edwards (P Q) + (println 'ed 'P P 'Q Q) (let (X1 (car P) Y1 (cdr P) diff --git a/expmod.l b/expmod.l index 4f2ce9e..3bc3414 100644 --- a/expmod.l +++ b/expmod.l @@ -28,15 +28,6 @@ R 37095705934669439343138083508754565189542113879843219016388785533085940283556 (bit? 1 I) (setq R (modulo (* R B) M)) ) ) R ) ) - -(de **Mod (X Y N) - (let M 1 - (loop - (when (bit? 1 Y) - (setq M (% (* M X) N)) ) - (T (=0 (setq Y (>> 1 Y))) - M ) - (setq X (% (* X X) N)) ) ) ) (de expmod-NEW (B E M) (if (=0 E) 1 @@ -49,7 +40,7 @@ R 37095705934669439343138083508754565189542113879843219016388785533085940283556 R ) ) ) (println 'expmod-NEW) (bench - (do 10000 + (do 100 (test 37095705934669439343138083508754565189542113879843219016388785533085940283556 (expmod-NEW @@ -58,7 +49,7 @@ R 37095705934669439343138083508754565189542113879843219016388785533085940283556 57896044618658097711785492504343953926634992332820282019728792003956564819949 ) ) ) ) (println 'expmod-OLD) (bench - (do 10000 + (do 100 (test 37095705934669439343138083508754565189542113879843219016388785533085940283556 (expmod-NEW diff --git a/scalarmult.l b/scalarmult.l index 47e0fcb..adf3ba1 100644 --- a/scalarmult.l +++ b/scalarmult.l @@ -13,6 +13,8 @@ E 36144925721603087658594284515452164870581325872720374094707712194495455132720 Q (38815646466658113194383306759739515082307681141926459231621296960732224964046 . 11903303657706407974989296177215005343713679411332034699907763981919547054807) }# +(de inv (X) + (expmod X (- *Q 2) *Q) ) (de expmod (B E M) (if (=0 E) 1 @@ -23,10 +25,30 @@ Q (38815646466658113194383306759739515082307681141926459231621296960732224964046 (when (bit? 1 E) (setq R (% (* R B) M)) ) R ) ) ) -(de inv (X) - (expmod X (- *Q 2) *Q) ) +(de xrecover (Y) + (let + (YY (* Y Y) + XX (* (dec YY) (inv (inc (* *D YY)))) + X (expmod XX (/ (+ *Q 3) 8) *Q) ) + (and + (n0 (% (- (* X X) XX) *Q)) + (setq X (% (* *I X) *Q)) ) + (and + (n0 (% X 2)) + (setq X (- *Q X)) ) + X ) ) +(setq *S (0 -1 -2 -3 -4 -5 -6 -7 .)) +(setq *B 256) +(setq *Q `(- (** 2 255) 19)) +(setq *L `(+ (** 2 252) 27742317777372353535851937790883648493)) +(setq *D `(* -121665 (inv 121666))) +(setq *I `(expmod 2 (/ (dec *Q) 4) *Q)) +(setq *By `(* 4 (inv 5))) +(setq *Bxy + (cons + (% (xrecover *By) *Q) + (% *By *Q) ) ) (de edwards (P Q) - (println 'P P 'Q Q) (let (X1 (car P) Y1 (cdr P) @@ -36,12 +58,12 @@ Q (38815646466658113194383306759739515082307681141926459231621296960732224964046 (% (* (+ (* X1 Y2) (* X2 Y1)) - (inv (inc (* *D X1 X2 Y1 Y2))) ) + (inv (inc (* X1 X2 Y1 Y2))) ) *Q ) (% (* (+ (* Y1 Y2) (* X1 X2)) - (inv (- 1 (* *D X1 X2 Y1 Y2))) ) + (inv (- 1 (* X1 X2 Y1 Y2))) ) *Q ) ) ) ) #{ def scalarmult(P,e): @@ -52,24 +74,19 @@ Q (38815646466658113194383306759739515082307681141926459231621296960732224964046 return Q }# (de scalarmult (P E) - (wait 100) (if (=0 E) (cons 0 1) (let Q (scalarmult P (/ E 2)) - (println 1) (setq Q (edwards Q Q)) - (println 2) - (when (bit? 1 E) (setq Q (edwards Q P)) ) Q ) ) ) -(trace 'scalarmult) +# (trace 'scalarmult) (println (scalarmult (15112221349535400772501151409588531511454012693041857206046113283949847762202 . 46316835694926478169428394003475163141307993866256225615783033603165251855960) 36144925721603087658594284515452164870581325872720374094707712194495455132720 ) ) - (msg 'ok) (bye)