
     hV3                     4   d dl mZmZmZmZ d dlZd dl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mZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddl m!Z!  e            Z"e"dk    r/ddl#mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 nie"dk    se"dk    r/ddl8mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 n.ddl9mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 g dZ:ddZ;ddZ<ddZ=ddZ>d Z?dS )    )unicode_literalsdivisionabsolute_importprint_functionN   )backend)	armorCertificateDHParametersEncryptedPrivateKeyInfoNullOrderedDict
Pbkdf2SaltPrivateKeyInfoPublicKeyInfo)_unwrap_private_key_info)pretty_message)	type_namestr_cls)pbkdf2pbkdf2_iteration_calculator)aes_cbc_pkcs7_encrypt)
rand_bytesmac)r
   dsa_sign
dsa_verify
ecdsa_signecdsa_verifygenerate_pairgenerate_dh_parametersload_certificateload_pkcs12load_private_keyload_public_key
PrivateKey	PublicKeyrsa_pkcs1v15_signrsa_pkcs1v15_verifyrsa_pss_signrsa_pss_verifyrsa_pkcs1v15_encryptrsa_pkcs1v15_decryptrsa_oaep_encryptrsa_oaep_decryptwin	winlegacy)r
   r   r   dump_certificatedump_dh_parametersdump_openssl_private_keydump_private_keydump_public_keyr   r   r   r    r!   r"   r#   r$   r%   r&   r.   r-   r,   r+   r'   r(   r)   r*   pemc                 R   |t          ddg          vr*t          t          dt          |                              t	          | t
                    s*t          t          dt          |                               |                                 }|dk    rt          d|          }|S )a  
    Serializes an asn1crypto.algos.DHParameters object into a byte string

    :param dh_parameters:
        An asn1crypto.algos.DHParameters object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded DH parameters
    r6   derF
            encoding must be one of "pem", "der", not %s
            zp
            dh_parameters must be an instance of asn1crypto.algos.DHParameters,
            not %s
            zDH PARAMETERS)
set
ValueErrorr   repr
isinstancer   	TypeErrorr   dumpr	   )dh_parametersencodingoutputs      O/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/oscrypto/asymmetric.pyr2   r2      s     sE5>**** NN	
 
   	 m\22  m$$
 
   	 !!F5//M    c                    |t          ddg          vr*t          t          dt          |                              t	          | t
                    }t	          | t                    s,|s*t          t          dt          |                               |r| j	        } | 
                                }|dk    rt          d|          }|S )a#  
    Serializes a public key object into a byte string

    :param public_key:
        An oscrypto.asymmetric.PublicKey or asn1crypto.keys.PublicKeyInfo object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded public key
    r6   r8   r9   z
            public_key must be an instance of oscrypto.asymmetric.PublicKey or
            asn1crypto.keys.PublicKeyInfo, not %s
            z
PUBLIC KEY)r:   r;   r   r<   r=   r&   r   r>   r   asn1r?   r	   )
public_keyrA   is_oscryptorB   s       rC   r5   r5      s     sE5>**** NN	
 
   	 Z33Kj-00   j!!
 
   	  %_
__F5|V,,MrD   c                    |t          ddg          vr*t          t          dt          |                              t	          | t
                    }t	          | t                    s,|s*t          t          dt          |                               |r| j	        } | 
                                }|dk    rt          d|          }|S )a&  
    Serializes a certificate object into a byte string

    :param certificate:
        An oscrypto.asymmetric.Certificate or asn1crypto.x509.Certificate object

    :param encoding:
        A unicode string of "pem" or "der"

    :return:
        A byte string of the encoded certificate
    r6   r8   r9   z
            certificate must be an instance of oscrypto.asymmetric.Certificate
            or asn1crypto.x509.Certificate, not %s
            CERTIFICATE)r:   r;   r   r<   r=   r
   Asn1Certificater>   r   rF   r?   r	   )certificaterA   rH   rB   s       rC   r1   r1      s     sE5>**** NN	
 
   	 [+66Kk?33 K  k""
 
   	  '!&F5}f--MrD      c           	         |t          ddg          vr*t          t          dt          |                              |at	          |t
                    s*t          t          dt          |                              |dk    rt          t          d                    t	          | t                    }t	          | t                    s,|s*t          t          dt          |                               |r| j
        } |                                 }|d	}d
}d}t          |          }	t          |||d          }
|
dk     rd}
|                    d          }t          |||	|
|          }t!          ||d          \  }}t#          ddt%          d|	          |
|t'                      ddd||ddd|d                                          }|dk    r|d}nd}t)          ||          }|S )aM  
    Serializes a private key object into a byte string of the PKCS#8 format

    :param private_key:
        An oscrypto.asymmetric.PrivateKey or asn1crypto.keys.PrivateKeyInfo
        object

    :param passphrase:
        A unicode string of the passphrase to encrypt the private key with.
        A passphrase of None will result in no encryption. A blank string will
        result in a ValueError to help ensure that the lack of passphrase is
        intentional.

    :param encoding:
        A unicode string of "pem" or "der"

    :param target_ms:
        Use PBKDF2 with the number of iterations that takes about this many
        milliseconds on the current machine.

    :raises:
        ValueError - when a blank string is provided for the passphrase

    :return:
        A byte string of the encoded and encrypted public key
    r6   r8   r9   NM
                passphrase must be a unicode string, not %s
                 x
                passphrase may not be a blank string - pass None to disable
                encryption
                z
            private_key must be an instance of oscrypto.asymmetric.PrivateKey
            or asn1crypto.keys.PrivateKeyInfo, not %s
            
aes256_cbc    sha256T)	target_msquieti'  utf-8pbes2r   	specified)namevalue)	algorithm
parameters)saltiteration_countprf)key_derivation_funcencryption_scheme)encryption_algorithmencrypted_datazPRIVATE KEYzENCRYPTED PRIVATE KEY)r:   r;   r   r<   r=   r   r>   r   r%   r   rF   r?   r   r   encoder   r   r   r   r   r	   )private_key
passphraserA   rU   rH   rB   cipher
key_lengthkdf_hmackdf_salt
iterationspassphrase_byteskeyiv
ciphertextobject_types                   rC   r4   r4      s   8 sE5>**** NN	
 
   	 *g.. 	N *%%	     ^     [*55Kk>22 ;  k""
 
   	  '!&F
j))0:QZbfggg
J%,,W55X/:zRR.sFDAAJ($ &.$.%0&.% % % 0:-5.2ff$ $
' 
', , &,&(* * % %. )1*
 *
  2 4663 	6 5'KK1K{F++MrD   c                 l   |at          |t                    s*t          t          dt	          |                              |dk    rt          t          d                    t          | t                    }t          | t                    s,|s*t          t          dt	          |                               |r| j        } t          |           
                                }d}|t          d          }t                      }d|d<   d	t          j        |                              d
          z  |d<   d}|                    d          }t#          j        ||dd         z                                             }|t)          |          k    rJ|t#          j        ||z   |dd         z                                             z  }|t)          |          k    J|d|         }t+          |||          \  }}| j        dk    rd}	n| j        dk    rd}	n| j        dk    rd}	t/          |	||          S )a   
    Serializes a private key object into a byte string of the PEM formats used
    by OpenSSL. The format chosen will depend on the type of private key - RSA,
    DSA or EC.

    Do not use this method unless you really must interact with a system that
    does not support PKCS#8 private keys. The encryption provided by PKCS#8 is
    far superior to the OpenSSL formats. This is due to the fact that the
    OpenSSL formats don't stretch the passphrase, making it very easy to
    brute-force.

    :param private_key:
        An oscrypto.asymmetric.PrivateKey or asn1crypto.keys.PrivateKeyInfo
        object

    :param passphrase:
        A unicode string of the passphrase to encrypt the private key with.
        A passphrase of None will result in no encryption. A blank string will
        result in a ValueError to help ensure that the lack of passphrase is
        intentional.

    :raises:
        ValueError - when a blank string is provided for the passphrase

    :return:
        A byte string of the encoded and encrypted public key
    NrO   rP   rQ   z
            private_key must be an instance of oscrypto.asymmetric.PrivateKey or
            asn1crypto.keys.PrivateKeyInfo, not %s
               z4,ENCRYPTEDz	Proc-TypezAES-128-CBC,%sasciizDEK-InforW   r      eczEC PRIVATE KEYrsazRSA PRIVATE KEYdsazDSA PRIVATE KEY)headers)r=   r   r>   r   r   r;   r%   r   rF   r   r?   r   r   binasciihexlifydecodere   hashlibmd5digestlenr   r\   r	   )
rf   rg   rH   rB   ry   ro   ri   rm   rn   rq   s
             rC   r3   r3   u  s`   : *g.. 	N *%%	     ^     [*55Kk>22 ;  k""
 
   	  '!&%k227799FG^^--,.1A"1E1E1L1LW1U1UU

%,,W55k*R!W455<<>>3s88##7;s%551Q3?@@GGIIIC 3s88##!J,*3;;
F$$&		%	'	''		%	'	''fg6666rD   )r6   )r6   rM   )@
__future__r   r   r   r   r}   rz   rP   r   _asn1r	   r
   rK   r   r   r   r   r   r   r   _asymmetricr   _errorsr   _typesr   r   kdfr   r   	symmetricr   utilr   _backend_mac.asymmetricr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   _win.asymmetric_openssl.asymmetric__all__r2   r5   r1   r4   r3    rD   rC   <module>r      s   R R R R R R R R R R R R        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2 1 1 1 1 1 # # # # # # & & & & & & & & 4 4 4 4 4 4 4 4 , , , , , ,       799 u                                              0 (k11                                              2                                             2  <" " " "J& & & &R& & & &Rs s s slU7 U7 U7 U7 U7rD   