3 œäL]M(ã @sFddlmZmZmZddlZyddlmZWn ek rLddlmZYnXddl Z ddl m Z ddl m Z mZddlmZe jejƒGdd„deƒƒZe jejƒGd d „d eƒƒZe jejƒGd d „d eƒƒZeZd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdZ dd„Z!Gd d!„d!eƒZ"Gd"d#„d#eƒZ#dS)$é)Úabsolute_importÚdivisionÚprint_functionN)Úgcd)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)Ú RSABackendc@sReZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZ ejd d „ƒZ d S) Ú RSAPrivateKeycCsdS)zN Returns an AsymmetricSignatureContext used for signing data. N©)ÚselfÚpaddingÚ algorithmr r úW/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/primitives/asymmetric/rsa.pyÚsignerszRSAPrivateKey.signercCsdS)z3 Decrypts the provided ciphertext. Nr )r Z ciphertextr r r rÚdecryptszRSAPrivateKey.decryptcCsdS)z7 The bit length of the public modulus. Nr )r r r rÚkey_size#szRSAPrivateKey.key_sizecCsdS)zD The RSAPublicKey associated with this private key. Nr )r r r rÚ public_key)szRSAPrivateKey.public_keycCsdS)z! Signs the data. Nr )r Údatar rr r rÚsign/szRSAPrivateKey.signN) Ú__name__Ú __module__Ú __qualname__ÚabcÚabstractmethodrrÚabstractpropertyrrrr r r rr s r c@s(eZdZejdd„ƒZejdd„ƒZdS)ÚRSAPrivateKeyWithSerializationcCsdS)z/ Returns an RSAPrivateNumbers. Nr )r r r rÚprivate_numbers8sz.RSAPrivateKeyWithSerialization.private_numberscCsdS)z6 Returns the key serialized as bytes. Nr )r ÚencodingÚformatZencryption_algorithmr r rÚ private_bytes>sz,RSAPrivateKeyWithSerialization.private_bytesN)rrrrrrr r r r rr6src@s`eZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZ ejd d „ƒZ ejd d „ƒZ d S)Ú RSAPublicKeycCsdS)zY Returns an AsymmetricVerificationContext used for verifying signatures. Nr )r Ú signaturer rr r rÚverifierGszRSAPublicKey.verifiercCsdS)z/ Encrypts the given plaintext. Nr )r Ú plaintextr r r rÚencryptMszRSAPublicKey.encryptcCsdS)z7 The bit length of the public modulus. Nr )r r r rrSszRSAPublicKey.key_sizecCsdS)z- Returns an RSAPublicNumbers Nr )r r r rÚpublic_numbersYszRSAPublicKey.public_numberscCsdS)z6 Returns the key serialized as bytes. Nr )r rrr r rÚ public_bytes_szRSAPublicKey.public_bytescCsdS)z5 Verifies the signature of the data. Nr )r r"rr rr r rÚverifyeszRSAPublicKey.verifyN) rrrrrr#r%rrr&r'r(r r r rr!Es r!cCs,t|tƒstdtjƒ‚t||ƒ|j||ƒS)Nz-Backend object does not implement RSABackend.)Ú isinstancer rrZBACKEND_MISSING_INTERFACEÚ_verify_rsa_parametersZgenerate_rsa_private_key)Úpublic_exponentrÚbackendr r rÚgenerate_private_keyos   r-cCs8|dkrtdƒ‚|d@dkr$tdƒ‚|dkr4tdƒ‚dS)Nézpublic_exponent must be >= 3.érzpublic_exponent must be odd.iz#key_size must be at least 512-bits.)Ú ValueError)r+rr r rr*zs  r*cCsÜ|dkrtdƒ‚||kr tdƒ‚||kr0tdƒ‚||kr@tdƒ‚||krPtdƒ‚||kr`tdƒ‚||krptdƒ‚|dks€||krˆtd ƒ‚|d @d krœtd ƒ‚|d @d kr°td ƒ‚|d @d krÄtdƒ‚|||krØtdƒ‚dS)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.r/rzpublic_exponent must be odd.zdmp1 must be odd.zdmq1 must be odd.zp*q must equal modulus.)r0)ÚpÚqÚprivate_exponentÚdmp1Údmq1Úiqmpr+Úmodulusr r rÚ_check_private_key_components…s0    r8cCs@|dkrtdƒ‚|dks ||kr(tdƒ‚|d@dkr= 3.ze must be >= 3 and < n.r/rze must be odd.)r0)ÚeÚnr r rÚ_check_public_key_components¬s  r;c Cspd\}}}}||}}xP|dkrft||ƒ\}} ||||||} } || ||| | f\}}}}}}qW||S)zO Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 r/r)r/rrr/)Údivmod) r9ÚmÚx1Úy1Zx2Úy2ÚaÚbr2ÚrZxnZynr r rÚ_modinv·s    rDcCs t||ƒS)zF Compute the CRT (q ** -1) % p value from RSA primes p and q. )rD)r1r2r r rÚ rsa_crt_iqmpÄsrEcCs ||dS)zg Compute the CRT private_exponent % (p - 1) value from the RSA private_exponent (d) and p. r/r )r3r1r r rÚ rsa_crt_dmp1ËsrFcCs ||dS)zg Compute the CRT private_exponent % (q - 1) value from the RSA private_exponent (d) and q. r/r )r3r2r r rÚ rsa_crt_dmq1ÓsrGièc Csî||d}|}x|ddkr(|d}qWd}d}xx| rª|tkrª|}xX||kržt|||ƒ}|dkr”||dkr”t|d|ƒdkr”t|d|ƒ} d}P|d9}qHW|d7}q4W|s¸tdƒ‚t|| ƒ\} } | dksÒt‚t| | 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. r/érFTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowrr0r<ÚAssertionErrorÚsorted) r:r9ÚdZktotÚtZspottedrAÚkZcandr1r2rCr r rÚrsa_recover_prime_factorsás,    $   rQc@szeZdZdd„ZejdƒZejdƒZejdƒZejdƒZ ejdƒZ ejdƒZ ejd ƒZ d d „Z d d „Zdd„Zdd„ZdS)ÚRSAPrivateNumberscCsœt|tjƒ sTt|tjƒ sTt|tjƒ sTt|tjƒ sTt|tjƒ sTt|tjƒ r\tdƒ‚t|tƒsntdƒ‚||_||_||_||_||_ ||_ ||_ dS)NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.) r)ÚsixÚ integer_typesÚ TypeErrorÚRSAPublicNumbersÚ_pÚ_qÚ_dÚ_dmp1Ú_dmq1Ú_iqmpÚ_public_numbers)r r1r2rNr4r5r6r&r r rÚ__init__ s$ zRSAPrivateNumbers.__init__rWrXrYrZr[r\r]cCs |j|ƒS)N)Zload_rsa_private_numbers)r r,r r rÚ private_key2szRSAPrivateNumbers.private_keycCsbt|tƒstS|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j |j kS)N) r)rRÚNotImplementedr1r2rNr4r5r6r&)r Úotherr r rÚ__eq__5s       zRSAPrivateNumbers.__eq__cCs ||k S)Nr )r rar r rÚ__ne__CszRSAPrivateNumbers.__ne__cCs$t|j|j|j|j|j|j|jfƒS)N)Úhashr1r2rNr4r5r6r&)r r r rÚ__hash__FszRSAPrivateNumbers.__hash__N)rrrr^rÚread_only_propertyr1r2rNr4r5r6r&r_rbrcrer r r rrR s       rRc@sPeZdZdd„ZejdƒZejdƒZdd„Zdd„Z d d „Z d d „Z d d„Z dS)rVcCs4t|tjƒ st|tjƒ r$tdƒ‚||_||_dS)Nz,RSAPublicNumbers arguments must be integers.)r)rSrTrUÚ_eÚ_n)r r9r:r r rr^Ss zRSAPublicNumbers.__init__rgrhcCs |j|ƒS)N)Zload_rsa_public_numbers)r r,r r rr`szRSAPublicNumbers.public_keycCs dj|ƒS)Nz$)r)r r r rÚ__repr__cszRSAPublicNumbers.__repr__cCs&t|tƒstS|j|jko$|j|jkS)N)r)rVr`r9r:)r rar r rrbfs zRSAPublicNumbers.__eq__cCs ||k S)Nr )r rar r rrclszRSAPublicNumbers.__ne__cCst|j|jfƒS)N)rdr9r:)r r r rreoszRSAPublicNumbers.__hash__N) rrrr^rrfr9r:rrirbrcrer r r rrVRs  rV)$Ú __future__rrrrÚmathrÚ ImportErrorZ fractionsrSZ cryptographyrZcryptography.exceptionsrrZ'cryptography.hazmat.backends.interfacesr Ú add_metaclassÚABCMetaÚobjectr rr!ZRSAPublicKeyWithSerializationr-r*r8r;rDrErFrGrJrQrRrVr r r rÚs8   &  '   +F