from Crypto.Util.number import getPrime, getRandomRange from ptrlib import crt p = getPrime(512) q = getPrime(512) e = 65537 n = p * q m = getRandomRange(0, n) c = pow(m, e, n) # decrypt by rsa-crt d_p = pow(e, -1, p-1) d_q = pow(e, -1, q-1) m_p = pow(c, d_p, p) m_q = pow(c, d_q, q) assert m == crt([(m_p, p), (m_q, q)])[0]