The problem is at generating either e or d. But what? The math seems good to me.
e > 1 and coprime to ϕ
d satisfies de≡1(modϕ(n))
Please help
var m = 4, //Message
p = 13
q = 7
n = p * q
T = (q - 1) * (p - 1)
d = new Number;
//Calculate e:
for (let i = 2; i < T; i++) {
if( (gcd(i,T) == 1) ) { var e = i; break; }
}
//Calculate d:
while ( e * d % T != 1 ) d++;
function gcd(k, n) {
return k ? gcd(n % k, k) : n;
}
var e_m = m ** e % n, // To encrypt
d_m = e_m ** d % n // To decrypt
console.log(`m: ${m}\np: ${p}\nq: ${q}\nn: ${n}\nT: ${T}\n\ne: ${e}\nd: ${d}\n\nencrypted: ${e_m}\ndecrypted: ${d_m}`);
//Results:
// encrypted: 23
// decrypted: 28 (not 4)