########################### # SCRIPT: rsa_quint.bdscr # ########################### # INPUT e=0x3 p=0xfb59a0610cab0727b06d211fa3226ef9dcdcea85e412a7f8347eabd2634b59a3 q=0xbf045d09d540ba9e8e05ebf5a18fb00fdf9f070c78a807baedb21139a1b1af77 printf("e=%x\n", e) printf("p=%x\n", p) printf("q=%x\n", q) printf("p>q is %q\n", p>q) puts "A test message..." m=0x20087ceac782889c0b8c2084ab36dbbc4b82b1f7e7cfe1b684ff69f4e47c266271eac302040912351d66224feca8f99cb72223de0df27937da9b533848f3d6c6 printf("m=%x\n",m) puts "Encrypted form..." c=0x3a07d5ffd94f7bfbd235697c3774a6f6ff16e3cbd44c5e1ea9bb20dbee8c525923abadfdf1c573f6ae5d7d973125cff6cef56d5b43474367326d1e89a07aef18 printf("c=%x\n",c) puts "Compute private key in CRT quintuple form (p,q,dP,dQ,qInv)..." r = modinv(e, p-1); printf("dP=%x\n", r) # dP s = modinv(e, q-1); printf("dQ=%x\n", s) # dQ v = modinv(q, p); printf("qInv=%x\n", v) # qInv puts "Decrypt c using CRT..." a = modexp(c, r, p); printf("a=%x\n", a) b = modexp(c, s, q); printf("b=%x\n", b) a = iif(a<b, a+p, a); printf("a'=%x\n", a) h = v * (a-b) mod p; printf("h=%x\n", h) t = b + h*q; printf("m'=%x\n", t) printf("m'==m is %q\n", m==t)