Ecdsa - module d'addition et de soustraction modulaires

Jerry...CAT 2021-08-19 22:41:01 阅读数:804

ecdsa module addition et soustraction

Sia,b GF(P), Puis ajouter a+b=r (mod p),Parmi euxrSatisfaction0<r<p-1,C'est - à - dire:a+bDivisé parpLe reste de, Cette opération devient un module pAjouter. Les opérations de soustraction modulaire peuvent être considérées comme des opérations d'addition modulaire alternatives ,C'est - à - dire:a+(-b)=k (mod p). Ce module regroupe le module plus et le module moins dans le même module , Sélection de l'utilisation de l'opération de soustraction ou de soustraction par commande de signal externe .


                                                                                                                              

Nom du signal

Orientation

Largeur du BIT

Définition du port

clk

Input

1

Horloge

reset

Input

1

Signal de réinitialisation

add_en

Input

1

Signal d'activation de l'opération

op

Input

1

Signal de sélection de l'addition et de la soustraction de mode

a

Input

256

EntieraEntrée

b

Input

256

EntierbEntrée

sum

Output

256

Résultat de l'opération

mod_add_done

Output

1

Marque d'achèvement de l'addition et de la soustraction modulaires

Les codes sont les suivants::

 // op = 1, a-b mod p
// op = 0, a+b mod p
module mod_add(
input clk,
input reset,
input en,
input [255:0] a,
input [255:0] b,
input op,
output reg [255:0] sum,
output reg mod_add_done
);
parameter params_p=256'd15424654874903;
//parameter params_p = 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F;
reg [256:0] temp1;//temp2; //the [256] is the sign bit
reg [1:0] cs,ns;
parameter idle = 0;
parameter s1 = 1;
parameter s2 = 2;
parameter s3 = 3;
always@(posedge clk) begin
if(reset)
cs <= idle;
else
cs <= ns;
end
always@(*) begin
case(cs)
idle:
ns <= s1;
s1:
ns <= s2;
s2:
if(temp1[256])
ns <= s2;
else if(temp1 >= params_p)
ns <= s2;
else
ns <= s3;
s3:
ns <= en ? idle : s3;
endcase
end
always@(*) begin
case(cs)
idle: begin
sum <= 0;
mod_add_done <= 0;
end
s1:
if(op) begin
temp1 <= a - b;
//temp2 = temp1 + params_p;
end
else begin
temp1 <= a + b;
//temp2 = temp1 - params_p;
end
s2:
if(op) begin
if(temp1[256]) begin //if temp1[256] is 1, 'a<b', 'a-b mod p' = 'params_p+(b-a)'
temp1 <= temp1 + params_p;
end
else if(temp1 >= params_p)
temp1 <= temp1 - params_p;
end
else begin
if(temp1 >= params_p) //if temp1[256] is 1, 'a<b', 'a-b mod p' = 'params_p-(b-a)'
temp1 <= temp1 - params_p;
//else
//temp2 = temp1;
end
s3: begin
sum <= temp1[255:0];
mod_add_done <= 1;
end
endcase
end
endmodule

 

Les paramètres de courbe sélectionnés sont les suivants: :https://blog.csdn.net/cccchhhh6819/article/details/100660139

testbeach:

`timescale 1ns/1ns
module mod_add_tb();
reg clk, reset,en;
reg [255:0] a, b;
wire [255:0] sum;
reg op;
wire mod_add_done;
mod_add add0(
.clk(clk),
.reset(reset),
.en(en),
.a(a),
.b(b),
.sum(sum),
.op(op),
.mod_add_done(mod_add_done)
);
always #5 clk = ~clk;
initial begin
clk = 0;
reset = 1'b1;
en = 0;
#20
reset = 1'b0;
op = 1;//P=29
a = 256'd15424654874903;
b =256'd15424654874906;
#
10000 $stop;

end endmodule

 

Ce calcul de simulation est a-b(mod p)  C'est - à - dire15424654874903 - 15424654874906(mod 15424654874903 )Les résultats de, C'est tout. -3 mod 15424654874903 .

Les résultats de la simulation sont les suivants: :Pour15424654874900. Règles de fonctionnement analogiques négatives Par exemple,-2 mod 5 = -2+5=3 .-6 mod 5 = -6+5+5=4. Toutes les conclusions sont normales .

Bien sûr, nous nous concentrons davantage sur les ressources que l'algorithme consomme. , Les blogueurs n'ont pas encore appris la synthèse. , Cette partie fera l'objet d'un suivi. . Bien sûr, l'algorithme devrait prendre plus de ressources , Après tout, deux registres de largeur de BIT sont utilisés pour ajouter directement , Retardera le chemin critique entre les registres , La dernière fréquence d'horloge ne peut pas courir .

 

Copyright:Cet article est[Jerry...CAT]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819224039289o.html