###########################
# 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)