a b@sddlZddlZddlmZdZdeeejddddZGdd d ZGd d d Z Gd d d Z Gdddej dZ e Z Gdddej dZeZGdddej dZeZdS)N)_serializationi DHParameters) generatorkey_sizebackendreturncCsddlm}|||SNr)r),cryptography.hazmat.backends.openssl.backendrZgenerate_dh_parameters)rrrosslr S/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameterss r c@seZdZdeeejeddddZeedddZ dej dd d d Z e ed d dZ e ed ddZe ejed ddZdS)DHParameterNumbersN)pgqrcCsvt|trt|tstd|dur6t|ts6td|dkrFtd|tkr`tdt||_||_||_ dS)Nzp and g must be integerszq must be integer or Nonez!DH generator must be 2 or greaterz#p (modulus) must be at least {}-bit) isinstanceint TypeError ValueError bit_length_MIN_MODULUS_SIZEformat_p_g_q)selfrrrr r r __init__s zDHParameterNumbers.__init__otherrcCs2t|tstS|j|jko0|j|jko0|j|jkSN)rrNotImplementedrrrrr r r r __eq__*s "zDHParameterNumbers.__eq__rrrcCsddlm}||Sr)r rZload_dh_parameter_numbersrrr r r r parameters2s zDHParameterNumbers.parametersrcCs|jSr!)rrr r r r9szDHParameterNumbers.pcCs|jSr!)rr)r r r r=szDHParameterNumbers.gcCs|jSr!)rr)r r r rAszDHParameterNumbers.q)N)N)__name__ __module__ __qualname__rtypingOptionalrobjectboolr$Anyr'propertyrrrr r r r rsrc@sfeZdZeeddddZeedddZde j dd d d Z e ed d dZ e ed ddZdS)DHPublicNumbersN)yparameter_numbersrcCs4t|tstdt|ts$td||_||_dS)Nzy must be an integer.z5parameters must be an instance of DHParameterNumbers.)rrrr_y_parameter_numbers)rr4r5r r r rGs  zDHPublicNumbers.__init__rcCs&t|tstS|j|jko$|j|jkSr!)rr3r"r6r7r#r r r r$Ss    zDHPublicNumbers.__eq__ DHPublicKeyr%cCsddlm}||Sr)r rZload_dh_public_numbersr&r r r public_key\s zDHPublicNumbers.public_keyr(cCs|jSr!)r6r)r r r r4cszDHPublicNumbers.ycCs|jSr!)r7r)r r r r5gsz!DHPublicNumbers.parameter_numbers)N)r*r+r,rrrr/r0r$r-r1r9r2r4r5r r r r r3Fs  r3c@sfeZdZeeddddZeedddZde j dd d d Z e ed d dZ e ed ddZdS)DHPrivateNumbersN)xpublic_numbersrcCs4t|tstdt|ts$td||_||_dS)Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)rrrr3_x_public_numbers)rr;r<r r r rms  zDHPrivateNumbers.__init__rcCs&t|tstS|j|jko$|j|jkSr!)rr:r"r=r>r#r r r r$ys    zDHPrivateNumbers.__eq__ DHPrivateKeyr%cCsddlm}||Sr)r rZload_dh_private_numbersr&r r r private_keys zDHPrivateNumbers.private_keyr(cCs|jSr!)r>r)r r r r<szDHPrivateNumbers.public_numberscCs|jSr!)r=r)r r r r;szDHPrivateNumbers.x)N)r*r+r,rr3rr/r0r$r-r1r@r2r<r;r r r r r:ls  r:c@sPeZdZejddddZejejeje dddZ eje ddd Z d S) rr?r(cCsdS)z7 Generates and returns a DHPrivateKey. Nr r)r r r generate_private_keysz!DHParameters.generate_private_keyencodingrrcCsdS)z= Returns the parameters serialized as bytes. Nr rrCrr r r parameter_bytesszDHParameters.parameter_bytescCsdS)z/ Returns a DHParameterNumbers. Nr r)r r r r5szDHParameters.parameter_numbersN) r*r+r,abcabstractmethodrArEncodingZParameterFormatbytesrErr5r r r r rs ) metaclassc@sdeZdZejedddZejedddZ eje dddZ eje j e jedd d Zd S) r8r(cCsdSz6 The bit length of the prime modulus. Nr r)r r r rszDHPublicKey.key_sizecCsdS)zJ The DHParameters object associated with this public key. Nr r)r r r r'szDHPublicKey.parameterscCsdS)z, Returns a DHPublicNumbers. Nr r)r r r r<szDHPublicKey.public_numbersrBcCsdSz6 Returns the key serialized as bytes. Nr rDr r r public_bytesszDHPublicKey.public_bytesN)r*r+r,rFabstractpropertyrrrGrr'r3r<rrHZ PublicFormatrIrMr r r r r8sr8c@seZdZejedddZejedddZ eje dddZ ejee dd d Z ejedd d Zejejejeje d ddZdS)r?r(cCsdSrKr r)r r r rszDHPrivateKey.key_sizecCsdS)zC The DHPublicKey associated with this private key. Nr r)r r r r9szDHPrivateKey.public_keycCsdS)zK The DHParameters object associated with this private key. Nr r)r r r r'szDHPrivateKey.parameters)peer_public_keyrcCsdS)zn Given peer's DHPublicKey, carry out the key exchange and return shared key as bytes. Nr )rrOr r r exchangeszDHPrivateKey.exchangecCsdS)z- Returns a DHPrivateNumbers. Nr r)r r r private_numbersszDHPrivateKey.private_numbers)rCrencryption_algorithmrcCsdSrLr )rrCrrRr r r private_bytesszDHPrivateKey.private_bytesN)r*r+r,rFrNrrrGr8r9rr'rIrPr:rQrrHZ PrivateFormatZKeySerializationEncryptionrSr r r r r?s r?)N)rFr-Zcryptography.hazmat.primitivesrrrr1r rr3r:ABCMetarZDHParametersWithSerializationr8ZDHPublicKeyWithSerializationr?ZDHPrivateKeyWithSerializationr r r r s"  /&&,