o
    b*0                     @   s  d dl Z d dlZejr1d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ d dlmZ G dd de jdZG d	d
 d
e jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd de jdZG dd  d e jdZG d!d" d"eeeeeeeeeeeeee jdZ dS )#    N)PRIVATE_KEY_TYPES)hashes)CertificateCertificateBuilderCertificateRevocationList CertificateRevocationListBuilderCertificateSigningRequest CertificateSigningRequestBuilderRevokedCertificateRevokedCertificateBuilder)Namec                   @   6   e Zd Zejdd Zejdd Zejdd ZdS )CipherBackendc                 C      dS )zI
        Return True if the given cipher and mode are supported.
        N selfciphermoder   r   f/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/backends/interfaces.pycipher_supported       zCipherBackend.cipher_supportedc                 C   r   )zF
        Get a CipherContext that can be used for encryption.
        Nr   r   r   r   r   create_symmetric_encryption_ctx#   r   z-CipherBackend.create_symmetric_encryption_ctxc                 C   r   )zF
        Get a CipherContext that can be used for decryption.
        Nr   r   r   r   r   create_symmetric_decryption_ctx)   r   z-CipherBackend.create_symmetric_decryption_ctxN)__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r   r      s    

r   )	metaclassc                   @   (   e Zd Zejdd Zejdd ZdS )HashBackendc                 C   r   )zQ
        Return True if the hash algorithm is supported by this backend.
        Nr   r   	algorithmr   r   r   hash_supported1   r   zHashBackend.hash_supportedc                 C   r   )zH
        Create a HashContext for calculating a message digest.
        Nr   r"   r   r   r   create_hash_ctx7   r   zHashBackend.create_hash_ctxN)r   r   r   r   r   r$   r%   r   r   r   r   r!   0   
    
r!   c                   @   r    )HMACBackendc                 C   r   )zb
        Return True if the hash algorithm is supported for HMAC by this
        backend.
        Nr   r"   r   r   r   hmac_supported?   r   zHMACBackend.hmac_supportedc                 C   r   zQ
        Create a context for calculating a message authentication code.
        Nr   )r   keyr#   r   r   r   create_hmac_ctxF   r   zHMACBackend.create_hmac_ctxN)r   r   r   r   r   r(   r+   r   r   r   r   r'   >   
    
r'   c                   @   r    )CMACBackendc                 C   r   )zX
        Returns True if the block cipher is supported for CMAC by this backend
        Nr   r"   r   r   r   cmac_algorithm_supportedN   r   z$CMACBackend.cmac_algorithm_supportedc                 C   r   r)   r   r"   r   r   r   create_cmac_ctxT   r   zCMACBackend.create_cmac_ctxN)r   r   r   r   r   r.   r/   r   r   r   r   r-   M   r&   r-   c                   @   r    )PBKDF2HMACBackendc                 C   r   )zd
        Return True if the hash algorithm is supported for PBKDF2 by this
        backend.
        Nr   r"   r   r   r   pbkdf2_hmac_supported\   r   z'PBKDF2HMACBackend.pbkdf2_hmac_supportedc                 C   r   )zN
        Return length bytes derived from provided PBKDF2 parameters.
        Nr   )r   r#   lengthsaltZ
iterationskey_materialr   r   r   derive_pbkdf2_hmacc   r   z$PBKDF2HMACBackend.derive_pbkdf2_hmacN)r   r   r   r   r   r1   r5   r   r   r   r   r0   [   r,   r0   c                   @   R   e Zd Zejdd Zejdd Zejdd Zejdd Zejd	d
 Z	dS )
RSABackendc                 C   r   )zq
        Generate an RSAPrivateKey instance with public_exponent and a modulus
        of key_size bits.
        Nr   r   Zpublic_exponentkey_sizer   r   r   generate_rsa_private_keym   r   z#RSABackend.generate_rsa_private_keyc                 C   r   )zQ
        Returns True if the backend supports the given padding options.
        Nr   )r   paddingr   r   r   rsa_padding_supportedt   r   z RSABackend.rsa_padding_supportedc                 C   r   )zg
        Returns True if the backend supports the given parameters for key
        generation.
        Nr   r8   r   r   r   !generate_rsa_parameters_supportedz   r   z,RSABackend.generate_rsa_parameters_supportedc                 C   r   )z4
        Returns an RSAPrivateKey provider.
        Nr   r   numbersr   r   r   load_rsa_private_numbers   r   z#RSABackend.load_rsa_private_numbersc                 C   r   )z3
        Returns an RSAPublicKey provider.
        Nr   r>   r   r   r   load_rsa_public_numbers   r   z"RSABackend.load_rsa_public_numbersN)
r   r   r   r   r   r:   r<   r=   r@   rA   r   r   r   r   r7   l   s    



r7   c                   @   s|   e Zd Zejdd Zejdd Zejdd Zejdd Zejd	d
 Z	ejdd Z
ejdd Zejdd ZdS )
DSABackendc                 C   r   )zT
        Generate a DSAParameters instance with a modulus of key_size bits.
        Nr   r   r9   r   r   r   generate_dsa_parameters   r   z"DSABackend.generate_dsa_parametersc                 C   r   )zf
        Generate a DSAPrivateKey instance with parameters as a DSAParameters
        object.
        Nr   r   
parametersr   r   r   generate_dsa_private_key   r   z#DSABackend.generate_dsa_private_keyc                 C   r   )zH
        Generate a DSAPrivateKey instance using key size only.
        Nr   rC   r   r   r   'generate_dsa_private_key_and_parameters   r   z2DSABackend.generate_dsa_private_key_and_parametersc                 C   r   )zX
        Return True if the hash algorithm is supported by the backend for DSA.
        Nr   r"   r   r   r   dsa_hash_supported   r   zDSABackend.dsa_hash_supportedc                 C   r   )zU
        Return True if the parameters are supported by the backend for DSA.
        Nr   )r   pqgr   r   r   dsa_parameters_supported   r   z#DSABackend.dsa_parameters_supportedc                 C   r   )z3
        Returns a DSAPrivateKey provider.
        Nr   r>   r   r   r   load_dsa_private_numbers   r   z#DSABackend.load_dsa_private_numbersc                 C   r   )z2
        Returns a DSAPublicKey provider.
        Nr   r>   r   r   r   load_dsa_public_numbers   r   z"DSABackend.load_dsa_public_numbersc                 C   r   )z3
        Returns a DSAParameters provider.
        Nr   r>   r   r   r   load_dsa_parameter_numbers   r   z%DSABackend.load_dsa_parameter_numbersN)r   r   r   r   r   rD   rG   rH   rI   rM   rN   rO   rP   r   r   r   r   rB      s"    






rB   c                   @   sn   e Zd Zejdd Zejdd Zejdd Zejdd Zejd	d
 Z	ejdd Z
ejdd ZdS )EllipticCurveBackendc                 C   r   )z
        Returns True if the backend supports the named elliptic curve with the
        specified signature algorithm.
        Nr   )r   Zsignature_algorithmcurver   r   r   ,elliptic_curve_signature_algorithm_supported   r   zAEllipticCurveBackend.elliptic_curve_signature_algorithm_supportedc                 C   r   )zP
        Returns True if the backend supports the named elliptic curve.
        Nr   r   rR   r   r   r   elliptic_curve_supported   r   z-EllipticCurveBackend.elliptic_curve_supportedc                 C   r   )zW
        Return an object conforming to the EllipticCurvePrivateKey interface.
        Nr   rT   r   r   r   #generate_elliptic_curve_private_key   r   z8EllipticCurveBackend.generate_elliptic_curve_private_keyc                 C   r   )zT
        Return an EllipticCurvePublicKey provider using the given numbers.
        Nr   r>   r   r   r   "load_elliptic_curve_public_numbers   r   z7EllipticCurveBackend.load_elliptic_curve_public_numbersc                 C   r   )zU
        Return an EllipticCurvePrivateKey provider using the given numbers.
        Nr   r>   r   r   r   #load_elliptic_curve_private_numbers   r   z8EllipticCurveBackend.load_elliptic_curve_private_numbersc                 C   r   )zV
        Returns whether the exchange algorithm is supported by this backend.
        Nr   )r   r#   rR   r   r   r   +elliptic_curve_exchange_algorithm_supported   r   z@EllipticCurveBackend.elliptic_curve_exchange_algorithm_supportedc                 C   r   )zL
        Compute the private key given the private value and curve.
        Nr   )r   Zprivate_valuerR   r   r   r   !derive_elliptic_curve_private_key   r   z6EllipticCurveBackend.derive_elliptic_curve_private_keyN)r   r   r   r   r   rS   rU   rV   rW   rX   rY   rZ   r   r   r   r   rQ      s    





rQ   c                   @   r   )PEMSerializationBackendc                 C   r   )zz
        Loads a private key from PEM encoded data, using the provided password
        if the data is encrypted.
        Nr   r   datapasswordr   r   r   load_pem_private_key   r   z,PEMSerializationBackend.load_pem_private_keyc                 C   r   )z;
        Loads a public key from PEM encoded data.
        Nr   r   r]   r   r   r   load_pem_public_key   r   z+PEMSerializationBackend.load_pem_public_keyc                 C   r   )zC
        Load encryption parameters from PEM encoded data.
        Nr   r`   r   r   r   load_pem_parameters   r   z+PEMSerializationBackend.load_pem_parametersN)r   r   r   r   r   r_   ra   rb   r   r   r   r   r[          

r[   c                   @   r   )DERSerializationBackendc                 C   r   )zy
        Loads a private key from DER encoded data. Uses the provided password
        if the data is encrypted.
        Nr   r\   r   r   r   load_der_private_key  r   z,DERSerializationBackend.load_der_private_keyc                 C   r   )z;
        Loads a public key from DER encoded data.
        Nr   r`   r   r   r   load_der_public_key  r   z+DERSerializationBackend.load_der_public_keyc                 C   r   )zC
        Load encryption parameters from DER encoded data.
        Nr   r`   r   r   r   load_der_parameters  r   z+DERSerializationBackend.load_der_parametersN)r   r   r   r   r   re   rf   rg   r   r   r   r   rd     rc   rd   c                	   @   s   e Zd Zejdddddejd ddfd	d
Zejdddddejd ddfddZejdddddejd ddfddZ	ej				dddZ
ejdddefddZdS )X509Backendbuilderr	   private_keyr   r#   zhashes.HashAlgorithmreturnr   c                 C   r   )zI
        Create and sign an X.509 CSR from a CSR builder object.
        Nr   r   ri   rj   r#   r   r   r   create_x509_csr  r   zX509Backend.create_x509_csrr   r   c                 C   r   )zX
        Create and sign an X.509 certificate from a CertificateBuilder object.
        Nr   rl   r   r   r   create_x509_certificate&  r   z#X509Backend.create_x509_certificater   r   c                 C   r   )z|
        Create and sign an X.509 CertificateRevocationList from a
        CertificateRevocationListBuilder object.
        Nr   rl   r   r   r   create_x509_crl1  r   zX509Backend.create_x509_crlr   r
   c                 C   r   )ze
        Create a RevokedCertificate object from a RevokedCertificateBuilder
        object.
        Nr   )r   ri   r   r   r   create_x509_revoked_certificate=  r   z+X509Backend.create_x509_revoked_certificatenamer   c                 C   r   )zG
        Compute the DER encoded bytes of an X509 Name object.
        Nr   )r   rq   r   r   r   x509_name_bytesF  r   zX509Backend.x509_name_bytesN)ri   r   rk   r
   )r   r   r   r   r   typingOptionalrm   rn   ro   rp   bytesrr   r   r   r   r   rh     sN    

rh   c                   @   s~   e Zd Zejdd Zejdd Zejdd Zejdd Zejd	d
 Z	ejdd Z
ejdddZejdd ZdS )	DHBackendc                 C   r   )z
        Generate a DHParameters instance with a modulus of key_size bits.
        Using the given generator. Often 2 or 5.
        Nr   r   	generatorr9   r   r   r   generate_dh_parametersN  r   z DHBackend.generate_dh_parametersc                 C   r   )zd
        Generate a DHPrivateKey instance with parameters as a DHParameters
        object.
        Nr   rE   r   r   r   generate_dh_private_keyU  r   z!DHBackend.generate_dh_private_keyc                 C   r   )zx
        Generate a DHPrivateKey instance using key size only.
        Using the given generator. Often 2 or 5.
        Nr   rw   r   r   r   &generate_dh_private_key_and_parameters\  r   z0DHBackend.generate_dh_private_key_and_parametersc                 C   r   )z;
        Load a DHPrivateKey from DHPrivateNumbers
        Nr   r>   r   r   r   load_dh_private_numbersc  r   z!DHBackend.load_dh_private_numbersc                 C   r   )z:
        Load a DHPublicKey from DHPublicNumbers.
        Nr   r>   r   r   r   load_dh_public_numbersi  r   z DHBackend.load_dh_public_numbersc                 C   r   )z<
        Load DHParameters from DHParameterNumbers.
        Nr   r>   r   r   r   load_dh_parameter_numberso  r   z#DHBackend.load_dh_parameter_numbersNc                 C   r   )zV
        Returns whether the backend supports DH with these parameter values.
        Nr   )r   rJ   rL   rK   r   r   r   dh_parameters_supportedu  r   z!DHBackend.dh_parameters_supportedc                 C   r   )zw
        Returns True if the backend supports the serialization of DH objects
        with subgroup order (q).
        Nr   r   r   r   r   dh_x942_serialization_supported{  r   z)DHBackend.dh_x942_serialization_supported)N)r   r   r   r   r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   rv   M  s"    





rv   c                   @   r    )ScryptBackendc                 C   r   )zG
        Return bytes derived from provided Scrypt parameters.
        Nr   )r   r4   r3   r2   nrrJ   r   r   r   derive_scrypt  r   zScryptBackend.derive_scryptc                 C   r   )z5
        Return True if Scrypt is supported.
        Nr   r   r   r   r   scrypt_supported  r   zScryptBackend.scrypt_supportedN)r   r   r   r   r   r   r   r   r   r   r   r     r&   r   c                   @   r6   )Backendc                 C   r   z4
        Returns a list of x509.Certificate
        Nr   r`   r   r   r   load_pem_pkcs7_certificates  r   z#Backend.load_pem_pkcs7_certificatesc                 C   r   r   r   r`   r   r   r   load_der_pkcs7_certificates  r   z#Backend.load_der_pkcs7_certificatesc                 C   r   z
        Returns bytes
        Nr   )r   ri   encodingoptionsr   r   r   
pkcs7_sign  r   zBackend.pkcs7_signc                 C   r   )z9
        Returns a tuple of (key, cert, [certs])
        Nr   r\   r   r   r   %load_key_and_certificates_from_pkcs12  r   z-Backend.load_key_and_certificates_from_pkcs12c                 C   r   r   r   )r   rq   r*   certZcasZencryption_algorithmr   r   r   (serialize_key_and_certificates_to_pkcs12  r   z0Backend.serialize_key_and_certificates_to_pkcs12N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    



r   )!r   rs   TYPE_CHECKINGZ/cryptography.hazmat.primitives.asymmetric.typesr   Zcryptography.hazmat.primitivesr   Zcryptography.x509.baser   r   r   r   r   r	   r
   r   Zcryptography.x509.namer   ABCMetar   r!   r'   r-   r0   r7   rB   rQ   r[   rd   rh   rv   r   r   r   r   r   r   <module>   sH   (
"3/36

