I am using python3-pycryptodome version 3.9.0-150200.9.1 on openSUSE Leap version 15.6. While using Crypto.PublicKey.RSA class, I noticed that generated RSA keys have some algorithmic inconsistency. First, let me show you snippet of my code, from Crypto.PublicKey import RSA import gmpy2 as gm zero = gm.mpz(0) one = gm.mpz(1) key = RSA.generate(1024) p = gm.mpz(key.p) q = gm.mpz(key.q) n = gm.mpz(key.n) d = gm.mpz(key.d) e = gm.mpz(key.e) f = gm.mul(gm.sub(p, one), gm.sub(q, one)) t, r = gm.t_divmod(gm.sub(gm.mul(e, d), one), f) print("T:", t, "\nR:", r, "\n") assert(r == zero) Since e and d are multiplicative inverse of each other with respect to f, so the value of r should always be zero, but this assert randomly fails when I generate multiple keys this way. Any idea why? Do note that however, the generated keys correctly encrypt and decrypt even if the above assert fails. Here is an example output, N: 148502774403628390194611500709682347814667593710263804255157829583856187369359709690285563468375111786415727941281838364540498319732753028415238432642064018564768129734406037062641477861055248558990411663521667242748082850681361695820916286468764801272766079977549468298872839357850688001921905070150870021617 F: 148502774403628390194611500709682347814667593710263804255157829583856187369359709690285563468375111786415727941281838364540498319732753028415238432642063994175826236354417984972173597931150214536367983662042569355961801875348542016817518199738121181705454851577038738077546432331820850702935944555788782117440 D: 3786287874221628833060271941142911125529353972159943582788217876798211113616120434328141578912323768742993739941575982481376680422409348089969728845438894796344787140928803863554860738865651625260009135296914439478294793149354932137846389802769093381050561713735488167704149676139058582518170514697039795113 P: 12644301210276125955062852673893145078336308093529189288020587426377781795770169081395069044878276629331783016359362180011337579202434183256912567514342137 Q: 11744640683103862097027615206036759955686314334472289809866198854597551023908834316691661598741290681896617494370859146395688450634864802703601794573562041 E: 65537 T: 1670 R: 142315158803477207269836021513445583322389777305669479077859586684528846228969721786523664990526148795315072610395095099351310889743888318897936831281977994418500143172983902264999698017352288930685984342790795632796726797209019432783454941415699465801060899427995457324315330984661648590313613532630916195880 Traceback (most recent call last): File "./utils.py", line 226, in <module> (n, f, d, p, q, s, k, u, e, g, h) = generate_rsa(1024, TYPE_CRYPTODOME, debug=True) File "./utils.py", line 83, in generate_rsa assert(r == zero) AssertionError I am expecting the assert in code snippet to be always true but it randomly fails. Continue reading...