.
This commit is contained in:
parent
2afece2a22
commit
9afae4a4db
2 changed files with 67 additions and 6 deletions
|
@ -20,17 +20,12 @@
|
|||
(link (swap 'E (/ E 2)))
|
||||
(gt0 E) ) ) ) ) )
|
||||
(de expmod (B E M)
|
||||
(println 'B B 'E E 'M M)
|
||||
(let R 1
|
||||
(for I (steps E)
|
||||
(println 'I I)
|
||||
(wait 100)
|
||||
(and
|
||||
(setq R (modulo (* R R) M))
|
||||
(bit? 1 I)
|
||||
|
||||
(setq R (modulo (* R B) M)) ) )
|
||||
(println 'R R)
|
||||
R ) )
|
||||
(de inv (X)
|
||||
(expmod X (- *Q 2) *Q) )
|
||||
|
@ -77,12 +72,15 @@
|
|||
(inv (- 1 (* *D X1 X2 Y1 Y2))) )
|
||||
*Q ) ) ) )
|
||||
(de scalarmult (P E)
|
||||
(println 'P P 'E E)
|
||||
(let Q (cons 0 1)
|
||||
(for I (steps E)
|
||||
(and
|
||||
(setq Q (edwards Q Q))
|
||||
(bit? 1 I)
|
||||
(setq Q (edwards Q P)) ) )
|
||||
(wait 1000)
|
||||
(println 'Q Q)
|
||||
Q ) )
|
||||
(de isoncurve (P)
|
||||
(let
|
||||
|
|
65
scalarmult.l
65
scalarmult.l
|
@ -1,5 +1,49 @@
|
|||
#{
|
||||
REFERENCE PYTHON:
|
||||
REFERENCE PYTHON:
|
||||
|
||||
def scalarmult(P,e):
|
||||
if e == 0: return [0,1]
|
||||
Q = scalarmult(P,e/2)
|
||||
Q = edwards(Q,Q)
|
||||
if e & 1: Q = edwards(Q,P)
|
||||
return Q
|
||||
P (15112221349535400772501151409588531511454012693041857206046113283949847762202 . 46316835694926478169428394003475163141307993866256225615783033603165251855960)
|
||||
E 36144925721603087658594284515452164870581325872720374094707712194495455132720
|
||||
|
||||
Q (38815646466658113194383306759739515082307681141926459231621296960732224964046 . 11903303657706407974989296177215005343713679411332034699907763981919547054807)
|
||||
}#
|
||||
|
||||
(de expmod (B E M)
|
||||
(if (=0 E)
|
||||
1
|
||||
(let R
|
||||
(%
|
||||
(** (expmod B (/ E 2) M) 2)
|
||||
M )
|
||||
(when (bit? 1 E)
|
||||
(setq R (% (* R B) M)) )
|
||||
R ) ) )
|
||||
(de inv (X)
|
||||
(expmod X (- *Q 2) *Q) )
|
||||
(de edwards (P Q)
|
||||
(println 'P P 'Q Q)
|
||||
(let
|
||||
(X1 (car P)
|
||||
Y1 (cdr P)
|
||||
X2 (car Q)
|
||||
Y2 (cdr Q) )
|
||||
(cons
|
||||
(%
|
||||
(*
|
||||
(+ (* X1 Y2) (* X2 Y1))
|
||||
(inv (inc (* *D X1 X2 Y1 Y2))) )
|
||||
*Q )
|
||||
(%
|
||||
(*
|
||||
(+ (* Y1 Y2) (* X1 X2))
|
||||
(inv (- 1 (* *D X1 X2 Y1 Y2))) )
|
||||
*Q ) ) ) )
|
||||
#{
|
||||
def scalarmult(P,e):
|
||||
if e == 0: return [0,1]
|
||||
Q = scalarmult(P,e/2)
|
||||
|
@ -7,6 +51,25 @@
|
|||
if e & 1: Q = edwards(Q,P)
|
||||
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)
|
||||
(println
|
||||
(scalarmult
|
||||
(15112221349535400772501151409588531511454012693041857206046113283949847762202 . 46316835694926478169428394003475163141307993866256225615783033603165251855960)
|
||||
36144925721603087658594284515452164870581325872720374094707712194495455132720 ) )
|
||||
|
||||
|
||||
|
||||
(msg 'ok)
|
||||
(bye)
|
||||
|
|
Loading…
Reference in a new issue