a b:, @sXddlZddlZddlmZddlmZmZddlmZddl m Z Gdddej dZ e ZGd d d ej dZeZd+eeeje d d d ZeeddddZeeeeeeeedd ddZeeddddZeeedddZeeedddZeeedddZeeed d!d"Zd#Zeeeejeefd$d%d&ZGd'd(d(ZGd)d*d*ZdS),N)gcd)_serializationhashes)AsymmetricPadding)utilsc@seZdZejeeedddZeje dddZ ejdddd Z ejeee j ejejfed d d Zejd dddZejejejejedddZdS) RSAPrivateKey) ciphertextpaddingreturncCsdS)z3 Decrypts the provided ciphertext. N)selfrr r r T/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/asymmetric/rsa.pydecryptszRSAPrivateKey.decryptr cCsdSz7 The bit length of the public modulus. Nr r r r r key_sizeszRSAPrivateKey.key_size RSAPublicKeycCsdS)zD The RSAPublicKey associated with this private key. Nr rr r r public_keyszRSAPrivateKey.public_key)datar algorithmr cCsdS)z! Signs the data. Nr )r rr rr r r sign$szRSAPrivateKey.signRSAPrivateNumberscCsdS)z/ Returns an RSAPrivateNumbers. Nr rr r r private_numbers/szRSAPrivateKey.private_numbers)encodingformatencryption_algorithmr cCsdSz6 Returns the key serialized as bytes. Nr )r rrrr r r private_bytes5szRSAPrivateKey.private_bytesN)__name__ __module__ __qualname__abcabstractmethodbytesrrabstractpropertyintrrtypingUnion asym_utils Prehashedr HashAlgorithmrrrEncodingZ PrivateFormatZKeySerializationEncryptionrr r r r rs( r) metaclassc@seZdZejeeedddZeje dddZ ejdddd Z eje j e jed d d Zejeeeejejejfd dddZejeeejejedddZd S)r) plaintextr r cCsdS)z/ Encrypts the given plaintext. Nr )r r.r r r r encryptEszRSAPublicKey.encryptrcCsdSrr rr r r rKszRSAPublicKey.key_sizeRSAPublicNumberscCsdS)z- Returns an RSAPublicNumbers Nr rr r r public_numbersQszRSAPublicKey.public_numbers)rrr cCsdSrr )r rrr r r public_bytesWszRSAPublicKey.public_bytesN) signaturerr rr cCsdS)z5 Verifies the signature of the data. Nr )r r3rr rr r r verifyaszRSAPublicKey.verify)r3r rr cCsdS)z@ Recovers the original data from the signature. Nr )r r3r rr r r recover_data_from_signaturemsz(RSAPublicKey.recover_data_from_signature)rr r!r"r#r$rr/r%r&rr1rr,Z PublicFormatr2r'r(r)r*rr+r4Optionalr5r r r r rDs0   r)public_exponentrbackendr cCs"ddlm}t|||||SNr)r8),cryptography.hazmat.backends.openssl.backendr8_verify_rsa_parametersZgenerate_rsa_private_key)r7rr8osslr r r generate_private_key|s  r=)r7rr cCs$|dvrtd|dkr tddS)N)izopublic_exponent must be either 3 (for legacy compatibility) or 65537. Almost everyone should choose 65537 here!iz#key_size must be at least 512-bits. ValueError)r7rr r r r;s r;) pqprivate_exponentdmp1dmq1iqmpr7modulusr cCs|dkrtd||kr td||kr0td||kr@td||krPtd||kr`td||krptd|dks||krtd |d @d krtd |d @d krtd |d @d krtd|||krtddS)Nr>zmodulus must be >= 3.zp must be < modulus.zq must be < modulus.zdmp1 must be < modulus.zdmq1 must be < modulus.ziqmp must be < modulus.z#private_exponent must be < modulus.z+public_exponent must be >= 3 and < modulus.rzpublic_exponent must be odd.zdmp1 must be odd.zdmq1 must be odd.zp*q must equal modulus.r?)rArBrCrDrErFr7rGr r r _check_private_key_componentss0     rI)enr cCs@|dkrtd|dks ||kr(td|d@dkrzn must be >= 3.ze must be >= 3 and < n.rHrze must be odd.r?rJrKr r r _check_public_key_componentss  rM)rJmr c CsRd\}}||}}|dkrJt||\}}|||}||||f\}}}}q||S)zO Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 )rHrr)divmod) rJrNx1Zx2abrBrZxnr r r _modinvs  rT)rArBr cCs t||S)zF Compute the CRT (q ** -1) % p value from RSA primes p and q. )rT)rArBr r r rsa_crt_iqmpsrU)rCrAr cCs ||dS)zg Compute the CRT private_exponent % (p - 1) value from the RSA private_exponent (d) and p. rHr )rCrAr r r rsa_crt_dmp1srV)rCrBr cCs ||dS)zg Compute the CRT private_exponent % (q - 1) value from the RSA private_exponent (d) and q. rHr )rCrBr r r rsa_crt_dmq1srWi)rKrJdr c Cs||d}|}|ddkr&|d}qd}d}|s|tkr|}||krt|||}|dkr||dkrt|d|dkrt|d|} d}q|d9}q>|d7}q.|stdt|| \} } | dksJt| | fdd\} } | | fS)z Compute factors p and q from the private exponent d. We assume that n has no more than two factors. This function is adapted from code in PyCrypto. rHrFTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowrr@rOsorted) rKrJrXZktottZspottedrQkcandrArBrSr r r rsa_recover_prime_factorss,     $   rac@seZdZeeeeeeddddZeedddZeeddd Zeedd d Zeedd d Z eedddZ eedddZ eddddZ de jedddZeedddZedddZdS)rr0)rArBrXrDrErFr1cCst|tr)rrr r r __repr__szRSAPublicNumbers.__repr__rpcCs&t|tstS|j|jko$|j|jkSrl)rbr0rrrJrKrsr r r rts zRSAPublicNumbers.__eq__cCst|j|jfSrl)rurJrKrr r r rvszRSAPublicNumbers.__hash__)N)rr r!r&rkrwrJrKr'rxrrstrr}ryrzrtrvr r r r r0sr0)N) r"r'mathrZcryptography.hazmat.primitivesrrZ*cryptography.hazmat.primitives._asymmetricrZ)cryptography.hazmat.primitives.asymmetricrr)ABCMetarZRSAPrivateKeyWithSerializationrZRSAPublicKeyWithSerializationr&rxr=r;rIrMrTrUrVrWr[Tuplerarr0r r r r sL   05   /    -e