Elliptic Curve Digital Signature Algorithm: Difference between revisions
Content added Content deleted
(→{{header|Raku}}: cleaning, use dynamic variables and FiniteFields module) |
(→{{header|Raku}}: expand tabs) |
||
Line 2,734: | Line 2,734: | ||
my $z = :16(sha256-hex $message) % $*n; |
my $z = :16(sha256-hex $message) % $*n; |
||
loop (my $k = my $s = my $r = 0; $r == 0; ) { |
loop (my $k = my $s = my $r = 0; $r == 0; ) { |
||
loop ( $r = $s = 0 ; $r == 0 ; ) { |
|||
$r = (( $k = (1..^$*n).roll ) * $*G).x % $*n; |
|||
} |
|||
} |
|||
{ |
|||
{ |
|||
use FiniteField; my $*modulus = $*n; |
|||
$s = ($z + $r*$private-key) / $k; |
|||
} |
|||
} |
|||
} |
} |
||
samewith c => $r, d => $s; |
samewith c => $r, d => $s; |
||
Line 2,748: | Line 2,748: | ||
my ($u1, $u2); |
my ($u1, $u2); |
||
{ |
{ |
||
use FiniteField; |
|||
my $*modulus = $*n; |
|||
my $w = 1/$!d; |
|||
($u1, $u2) = $z*$w, $!c*$w; |
|||
} |
} |
||
my $p = ($u1 * $*G) + ($u2 * $public-key); |
my $p = ($u1 * $*G) + ($u2 * $public-key); |