'Build a key from RSA numerical components.
@type n: L{int}
@param n: The \'n\' RSA variable.
@type e: L{int}
@param e: The \'e\' RSA variable.
@type d: L{int} or L{None}
@param d: The \'d\' RSA variable (optional for a public key).
@type p: L{int} or L{None}
@param p: The \'p\' RSA variable (optional for a public key).
@type q: L{int} or L{None}
@param q: The \'q\' RSA variable (optional for a public key).
@type u: L{int} or L{None}
@param u: The \'u\' RSA variable. Ignored, as its value is determined by
p and q.
@rtype: L{Key}
@return: An RSA key constructed from the values as given.'

@classmethod
def _fromRSAComponents(cls, n, e, d=None, p=None, q=None, u=None):

    publicNumbers = rsa.RSAPublicNumbers(e=e, n=n)
    if (d is None):
        keyObject = publicNumbers.public_key(default_backend())
    else:
        privateNumbers = rsa.RSAPrivateNumbers(p=p, q=q, d=d, dmp1=rsa.rsa_crt_dmp1(d, p), dmq1=rsa.rsa_crt_dmq1(d, q), iqmp=rsa.rsa_crt_iqmp(p, q), public_numbers=publicNumbers)
        keyObject = privateNumbers.private_key(default_backend())
    return cls(keyObject)
