salut les développeurs j'ai un grand souci la :/
j'implémente l'algorithme de Montgomery power lader pour la multiplication scalaire je l'ai implémenté et testé en java et ça marche bien,
le but est de calculer la valeur kG ,G etant un point k un entier, voici la portion du code java;
je l'ai aussi implémenter de la meme façon en C mais la catastrophe ça me donne des résultat faux , le résultat est corecte sauf dans le cas ou la valeur des bits de k testé sont à 0 ,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 static Point multiScalairee(Point G, BigInteger a, BigInteger k, BigInteger o, BigInteger R,BigInteger RR) { Point R0, R1; R0=G; R1=doublement(G, a, o, R, RR); String s; BigInteger f=new BigInteger(""+k); s=f.toString(2); System.out.println("sss "+s); int h=0; for(int i=1;i<=s.length()-1;i++) { if(s.charAt(i)=='0') { // addition méthode pour additionner deux point //doublement méthode pour doubler un point R1=addition(R0, R1, o, a, R, RR); R0=doublement(R0, a, o, R, RR); } else { if(s.charAt(i)=='1') { R0=addition(R0, R1, o, a, R, RR); R1=doublement(R1, a, o, R, RR); } } } return R0; }
ps en c le k est envoyé en plusieurs paquets de 8 bits chacun.
voici le code C:
si quelqu'un aurait une idée sur le probléme qu'il m'aide s'il vous plait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 void MulScal(unsigned long X[9],unsigned long Y[9],unsigned long a[9],unsigned long k[9],unsigned long E[9],unsigned long M[9],unsigned long R[9],unsigned long m,int nbrPaquet,unsigned long x[9],unsigned long y[9]){ unsigned long x0[9],y0[9],x1[9],y1[9],x0i[9],y0i[9],x1i[9],y1i[9];int np,i,j,ii=0;// np nombre de paquet utilisé pour le k //nbrPaquet=3; int init=30; //R0=G for(i=0;i<9;i++) { x0[i]=X[i]; y0[i]=Y[i]; } //R1=doublemen G doublement(X,Y,a,E,M,R,m,nbrPaquet,x1,y1); for(i=np-1;i>=0;i--) { for(j=init;j>=0;j--) { //cette condition marche trés bien,et donne des resultat correcte dans le cas ou tous les bits de k sont a 0 if(getBitIndex1(k[i],j)==0){ addition(x0,y0,x1,y1,a,E,M,R,m,nbrPaquet,x1,y1); doublement(x0,y0,a,E,M,R,m,nbrPaquet,x0,y0); } //par contre celle la donne des résultat incorecte meme quand tous les bit sont à 1 if(getBitIndex1(k[i],j)==1){ addition(x1,y1,x0,y0,a,E,M,R,m,nbrPaquet,x0,y0); doublement(x1,y1,a,E,M,R,m,nbrPaquet,x1,y1); } } init=31; }
Partager