Salve a tutti^^
Ancora una volta eccomi a rompere :/
Questa volta un problema con l'RSA, nello specifico la generazione di chiavi (E,N) (D,N)...
Ho generato i due numeri primi, li ho moltiplicati tra loro, e li ho rimoltiplicati tra loro questa volta togliendo -1 da ogni numero primo...
poi ho trovato la E tale che l'mcd di E ed 0(N) sia 1...
il problema appunto è D...


strutture dati
codice:
typedef struct 
{     
vector<int> num;     
int sign; // 1 negativo 0 positivo 
} bigInt;  

typedef struct 
{     
bigInt esp;     
bigInt mod; 
} key;

ecco il codice di generazione delle chiavi (che poi salverò su file...etc...)
codice:
void genKey (key *publicKey, key *privateKey) 
{     
 int dim;      
bigInt p,q,n,e,d,mcd1,eulero,x,y,e1;      
dim = 5;      
p=bprimo(dim);           
printf("numero primo P: ");       
bprint(p);     
q=bprimo(dim);         
printf("numero primo Q: ");      
bprint(q);      
n = karatsuba (p,q);      
printf("Modulo N: ");      
bprint(n);     
 p = bsub(p,int2bint(1));      
q = bsub(q,int2bint(1));      
eulero = karatsuba (p,q);      
printf("eulero: ");bprint(eulero);                           

//generazione random E, ed mcd      
do{                 
e=brandom (10);             
mcd1 = bmcd(e,eulero,&x,&y);      
} 
while (mcd1.num[0]!=1);               

//GENERAZIONE D

MANCA

///////////////////////////

printf("e: ");bprint(e);      
printf("d: ");bprint(d);      
publicKey->mod = n;      
privateKey->mod = n;      
publicKey->esp = e;      
privateKey->esp = d;           
}
ho provato con la formula

d= e^-1 mod 0(n)... ma alla fine del decript il risultato è sbagliato...
ho anche provato a calcolare l'inverso moltiplicativo al quale D dovrebbe corrispondere...ma anche lì il risultato poi non è corretto.


Sapete aiutarmi?

Grazie in anticipo!