a a. @sdddlZddlZddlmZddlmZmZddlmZddl m Z m Z m Z GdddejdZeZGd d d ejdZeZd+eeejed d d ZeeddddZeeeeeeeedd ddZeeddddZeeedddZeeedddZeeedddZeeed d!d"Zd#Zeeeejeefd$d%d&ZGd'd(d(e Z!Gd)d*d*e Z"dS),N)gcd)_serializationhashes)AsymmetricPadding)AsymmetricSignatureContextAsymmetricVerificationContextutilsc@seZdZejeejedddZ eje ee dddZ ej e ddd Zejd dd d Zeje eejejejfe d ddZejddddZejejejeje dddZdS) RSAPrivateKey)padding algorithmreturncCsdS)zN Returns an AsymmetricSignatureContext used for signing data. N)selfr r r r S/usr/lib64/python3.9/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pysignerszRSAPrivateKey.signer) ciphertextr r cCsdS)z3 Decrypts the provided ciphertext. Nr )rrr r r rdecryptszRSAPrivateKey.decryptr cCsdSz7 The bit length of the public modulus. Nr rr r rkey_size"szRSAPrivateKey.key_size RSAPublicKeycCsdS)zD The RSAPublicKey associated with this private key. Nr rr r r public_key(szRSAPrivateKey.public_key)datar r r cCsdS)z! Signs the data. Nr )rrr r r r rsign.szRSAPrivateKey.signRSAPrivateNumberscCsdS)z/ Returns an RSAPrivateNumbers. Nr rr r rprivate_numbers9szRSAPrivateKey.private_numbers)encodingformatencryption_algorithmr cCsdSz6 Returns the key serialized as bytes. Nr )rrrrr r r private_bytes?szRSAPrivateKey.private_bytesN)__name__ __module__ __qualname__abcabstractmethodrr HashAlgorithmrrbytesrabstractpropertyintrrtypingUnion asym_utils PrehashedrrrEncodingZ PrivateFormatZKeySerializationEncryptionr!r r r rr s0 r ) metaclassc@seZdZejeeeje dddZ ejeeedddZ ej e ddd Zejd dd d Zejejejed ddZejeeeejejejfddddZejeeejejedddZdS)r) signaturer r r cCsdS)zY Returns an AsymmetricVerificationContext used for verifying signatures. Nr rr1r r r r rverifierOszRSAPublicKey.verifier) plaintextr r cCsdS)z/ Encrypts the given plaintext. Nr )rr4r r r rencryptZszRSAPublicKey.encryptrcCsdSrr rr r rr`szRSAPublicKey.key_sizeRSAPublicNumberscCsdS)z- Returns an RSAPublicNumbers Nr rr r rpublic_numbersfszRSAPublicKey.public_numbers)rrr cCsdSr r )rrrr r r public_byteslszRSAPublicKey.public_bytesN)r1rr r r cCsdS)z5 Verifies the signature of the data. Nr )rr1rr r r r rverifyvszRSAPublicKey.verifycCsdS)z@ Recovers the original data from the signature. Nr r2r r rrecover_data_from_signaturesz(RSAPublicKey.recover_data_from_signature)r"r#r$r%r&r(rrr'rr3r5r)r*rr7rr/Z PublicFormatr8r+r,r-r.r9Optionalr:r r r rrNs<    r)public_exponentrbackendr cCs"ddlm}t|||||SNr)r=),cryptography.hazmat.backends.openssl.backendr=_verify_rsa_parametersZgenerate_rsa_private_key)r<rr=osslr r rgenerate_private_keys  rB)r<rr 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)r<rr r rr@s r@) pqprivate_exponentdmp1dmq1iqmpr<modulusr cCs|dkrtd||kr td||kr0td||kr@td||krPtd||kr`td||krptd|dks||krtd |d @d krtd |d @d krtd |d @d krtd|||krtddS)NrCzmodulus 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.rD)rFrGrHrIrJrKr<rLr r r_check_private_key_componentss0     rN)enr cCs@|dkrtd|dks ||kr(td|d@dkr= 3.ze must be >= 3 and < n.rMrze must be odd.rDrOrPr r r_check_public_key_componentss  rR)rOmr c CsRd\}}||}}|dkrJt||\}}|||}||||f\}}}}q||S)zO Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 )rMrr)divmod) rOrSZx1Zx2abrGrZxnr r r_modinvs  rX)rFrGr cCs t||S)zF Compute the CRT (q ** -1) % p value from RSA primes p and q. )rX)rFrGr r r rsa_crt_iqmpsrY)rHrFr cCs ||dS)zg Compute the CRT private_exponent % (p - 1) value from the RSA private_exponent (d) and p. rMr )rHrFr r r rsa_crt_dmp1srZ)rHrGr cCs ||dS)zg Compute the CRT private_exponent % (q - 1) value from the RSA private_exponent (d) and q. rMr )rHrGr r r rsa_crt_dmq1sr[i)rPrOdr 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. rMrFTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowrrErTsorted) rPrOr\ZktottZspottedrUkZcandrFrGrWr r rrsa_recover_prime_factors s,     $   rdc@seZdZeeeeeeddddZeddZeddZeddZed dZ ed dZ ed dZ ed dZ de jedddZddZddZddZd S)rr6)rFrGr\rIrJrKr7cCst|tr^zRSAPrivateNumbers.cCs|jSro)rhrr r rrp_rqcCs|jSro)rirr r rrp`rqcCs|jSro)rjrr r rrparqcCs|jSro)rkrr r rrpbrqcCs|jSro)rlrr r rrpcrqcCs|jSro)rmrr r rrpdrqNr=r cCsddlm}||Sr>)r?r=Zload_rsa_private_numbersrr=rAr r r private_keyfs zRSAPrivateNumbers.private_keycCsbt|tstS|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j |j kSro) rerNotImplementedrFrGr\rIrJrKr7rotherr r r__eq__ms        zRSAPrivateNumbers.__eq__cCs ||k Sror rvr r r__ne__{szRSAPrivateNumbers.__ne__cCs$t|j|j|j|j|j|j|jfSro)hashrFrGr\rIrJrKr7rr r r__hash__~szRSAPrivateNumbers.__hash__)N)r"r#r$r*rnpropertyrFrGr\rIrJrKr7r+Anyr rtrxryr{r r r rr8s& %       rc@sheZdZeedddZeddZeddZdej e dd d Z d d Z d dZ ddZddZdS)r6rQcCs,t|trt|tstd||_||_dS)Nz,RSAPublicNumbers arguments must be integers.)rer*rf_e_n)rrOrPr r rrnszRSAPublicNumbers.__init__cCs|jSro)r~rr r rrprqzRSAPublicNumbers.cCs|jSro)rrr r rrprqNrrcCsddlm}||Sr>)r?r=Zload_rsa_public_numbersrsr r rrs zRSAPublicNumbers.public_keycCs d|S)Nz$)rrr r r__repr__szRSAPublicNumbers.__repr__cCs&t|tstS|j|jko$|j|jkSro)rer6rurOrPrvr r rrxs zRSAPublicNumbers.__eq__cCs ||k Sror rvr r rryszRSAPublicNumbers.__ne__cCst|j|jfSro)rzrOrPrr r rr{szRSAPublicNumbers.__hash__)N)r"r#r$r*rnr|rOrPr+r}rrrrxryr{r r r rr6s  r6)N)#r%r+ZmathrZcryptography.hazmat.primitivesrrZ*cryptography.hazmat.primitives._asymmetricrZ)cryptography.hazmat.primitives.asymmetricrrrr-ABCMetar ZRSAPrivateKeyWithSerializationrZRSAPublicKeyWithSerializationr*r}rBr@rNrRrXrYrZr[r_Tuplerdobjectrr6r r r rsL  8@   /    -T