This makes the caller's life easier. They can catch
mega.errors.EFAILED instead of catching mega.errors.RequestError
and checking the message attribute.
Because these classes inherit from RequestError, and they have a code
and message attribute, anyone currently catching RequestError should
not have any backwards compatibility issues.
Furthermore, this fixes an existing issue in the codebase where
RequestError is raised with a custom string message, which was causing
IndexError since that message wasn't in CODE_TO_DESCRIPTIONS.
The code was using a hardcoded 257 as the RSA public exponent, but
it was raising RSA Invalid Construct. From reading MEGA's webclient js
I found that the public exponent sometimes defaults to 257, but in
other cases is calculated from a modular inverse on the private
exponent and phi=p-1*q-1.
Updated the reqs to use pycryptodome, fixed the RSA public exponent issue that was causing the logn failure, as well as general updates to patch up slight changes.