我们从Python开源项目中,提取了以下5个代码示例,用于说明如何使用cryptography.hazmat.primitives.asymmetric.rsa.rsa_crt_dmq1()。
def deserialize(self, data): pgp_key, _ = pgpy.PGPKey.from_blob(data) password = "" if self.password: password = self.password with pgp_key.unlock(password): key_material = pgp_key._key.keymaterial # https://tools.ietf.org/html/rfc4880#section-5.5.3 # "multiprecision integer (MPI) of RSA secret exponent d." self._d = key_material.d # "MPI of RSA secret prime value p." self._p = key_material.p # "MPI of RSA secret prime value q (p < q)." self._q = key_material.q self._iqmp = rsa.rsa_crt_iqmp(key_material.p, key_material.q) self._dmp1 = rsa.rsa_crt_dmp1(key_material.d, key_material.q) self._dmq1 = rsa.rsa_crt_dmq1(key_material.d, key_material.q) self._public_numbers = ErisPublic( e=key_material.e, n=key_material.n)
def fields_from_json(cls, jobj): # pylint: disable=invalid-name n, e = (cls._decode_param(jobj[x]) for x in ('n', 'e')) public_numbers = rsa.RSAPublicNumbers(e=e, n=n) if 'd' not in jobj: # public key key = public_numbers.public_key(default_backend()) else: # private key d = cls._decode_param(jobj['d']) if ('p' in jobj or 'q' in jobj or 'dp' in jobj or 'dq' in jobj or 'qi' in jobj or 'oth' in jobj): # "If the producer includes any of the other private # key parameters, then all of the others MUST be # present, with the exception of "oth", which MUST # only be present when more than two prime factors # were used." p, q, dp, dq, qi, = all_params = tuple( jobj.get(x) for x in ('p', 'q', 'dp', 'dq', 'qi')) if tuple(param for param in all_params if param is None): raise errors.Error( 'Some private parameters are missing: {0}'.format( all_params)) p, q, dp, dq, qi = tuple( cls._decode_param(x) for x in all_params) # TODO: check for oth else: # cryptography>=0.8 p, q = rsa.rsa_recover_prime_factors(n, e, d) dp = rsa.rsa_crt_dmp1(d, p) dq = rsa.rsa_crt_dmq1(d, q) qi = rsa.rsa_crt_iqmp(p, q) key = rsa.RSAPrivateNumbers( p, q, d, dp, dq, qi, public_numbers).private_key( default_backend()) return cls(key=key)
def compute_rsa_private_key(cls, p, q, e, n, d): """ Computes RSA private key based on provided RSA semi-primes and returns cryptography lib instance. @developer: tnanoba :param p: int :param q: int :param e: int :param n: int :param d: int :return: object """ # Computes: d % (p - 1) dmp1 = rsa.rsa_crt_dmp1(d, p) # Computes: d % (q - 1) dmq1 = rsa.rsa_crt_dmq1(d, q) # Modular inverse q of p, (q ^ -1 mod p) iqmp = rsa.rsa_crt_iqmp(p, q) public_numbers = rsa.RSAPublicNumbers(e, n) return rsa.RSAPrivateNumbers(p, q, d, dmp1, dmq1, iqmp, public_numbers).private_key(default_backend())
def _fromRSAComponents(cls, n, e, d=None, p=None, q=None, u=None): """ 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. """ publicNumbers = rsa.RSAPublicNumbers(e=e, n=n) if d is None: # We have public components. 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)