
    BwgV3                     &   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 nge"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?y)    )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*   c                     |t        ddg      vrt        t        dt        |                  t	        | t
              st        t        dt        |                   | j                         }|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
    pem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      J/var/www/horilla/myenv/lib/python3.12/site-packages/oscrypto/asymmetric.pyr2   r2      s     sE5>** N	
  	 m\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                  } | 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
    r7   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>** N	
  	 Z3Kj-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                  } | 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
    r7   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>** N	
  	 [+6Kk?3K k"
  	 !&&F5}f-MrD   c           	         |t        ddg      vrt        t        dt        |                  |Gt	        |t
              st        t        dt        |                  |dk(  rt        t        d            t	        | t              }t	        | t              s |st        t        dt        |                   |r| j                  } | j                         }|d	}d
}d}t        |      }	t        |||d      }
|
dk  rd}
|j                  d      }t        |||	|
|      }t!        ||d      \  }}t#        ddt%        d|	      |
|t'               ddd||ddd|d      j                         }|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
    r7   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   rT   rH   rB   cipher
key_lengthkdf_hmackdf_salt
iterationspassphrase_byteskeyiv
ciphertextobject_types                   rC   r4   r4      s   8 sE5>** N	
  	 *g.N *%	   ^   [*5Kk>2; k"
  	 !&&F
j)0:QZbfg
J%,,W5X/:zR.sFDAJ($ &.$.%0&.% 0:-5.2f$
', &,&(*%. )1*
 2 463 	6 5'K1K{F+MrD   c                    |Gt        |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        |       j                         }d}|t        d      }t               }d|d<   d	t        j                  |      j                  d
      z  |d<   d}|j!                  d      }t#        j$                  ||dd z         j'                         }|t)        |      kD  r>|t#        j$                  ||z   |dd z         j'                         z  }|t)        |      kD  r>|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
    NrN   rO   rP   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-InforV   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decoderd   hashlibmd5digestlenr   r[   r	   )
re   rf   rH   rB   rx   rn   rh   rl   rm   rp   s
             rC   r3   r3   u  s   : *g.N *%	   ^   [*5Kk>2; k"
  	 !&&%k2779FG^-,.1A1A"1E1L1LW1UU

%,,W5kk*R!W45<<>3s8#7;;s%551Q?@GGIIC 3s8#!J*3;
F$&			%	''			%	''fg66rD   )r7   )r7      )@
__future__r   r   r   r   r|   ry   rO   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   
 
 
 2 # & 4 ,  9 u     0 (k1     2     2<"J&R&RslU7rD   