
     h                         d dl mZmZmZmZ d dlZd dlZd dlZddlm	Z	m
Z
 ddlmZ ddlmZmZmZ ej        dk     reZnd Zd	gZd
 ZdS )    )unicode_literalsdivisionabsolute_importprint_functionN   )int_from_bytesint_to_bytes)pretty_message)	type_namebyte_cls	int_types)   c                 "    t          | g          S )N)bytes)nums    L/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/oscrypto/_pkcs12.pychr_clsr      s    cU||    
pkcs12_kdfc           
      
   t          |t                    s*t          t          dt	          |                              t          |t                    s*t          t          dt	          |                              t          |t
                    s*t          t          dt	          |                              |dk     r*t          t          dt          |                              t          |t
                    s*t          t          dt	          |                              |dk     r*t          t          dt          |                              | t          g d          vr*t          t          d	t          |                               |t          g d
          vr*t          t          dt          |                              |	                    d          
                    d          dz   }t          t          |           }ddddddd|          }| dv rd}	nd}	t          |          |	z  }
d}|dk    rv|	t          t          j        t#          t%          |                    |	z                      z  }t%          |          |k     r||z  }t%          |          |k     |d|         }d}|dk    rv|	t          t          j        t#          t%          |                    |	z                      z  }t%          |          |k     r||z  }t%          |          |k     |d|         }||z   }t          t          j        t#          |          |z                      }d||z  z  }t'          d|dz             D ]q} ||
|z                                             }t'          d|dz             D ]} ||                                          } ||k     rd}t%          |          |	k     r||z  }t%          |          |	k     t+          |d|	                   dz   }t'          dt%          |          |	z            D ]r}||	z  }|dz   |	z  }|||         }t-          t+          |          |z             }t%          |          }||	k    r|||	z
  d         }|d|         |z   ||d         z   }s|dz
  |z  }t/          ||          }|d|         |d|         z   |||z   d         z   }s|d|         S )a  
    KDF from RFC7292 appendix b.2 - https://tools.ietf.org/html/rfc7292#page-19

    :param hash_algorithm:
        The string name of the hash algorithm to use: "md5", "sha1", "sha224",
        "sha256", "sha384", "sha512"

    :param password:
        A byte string of the password to use an input to the KDF

    :param salt:
        A cryptographic random byte string

    :param iterations:
        The numbers of iterations to use when deriving the key

    :param key_length:
        The length of the desired key in bytes

    :param id_:
        The ID of the usage - 1 for key, 2 for iv, 3 for mac

    :return:
        The derived key as a byte string
    z@
            password must be a byte string, not %s
            z<
            salt must be a byte string, not %s
            z?
            iterations must be an integer, not %s
            r   zC
            iterations must be greater than 0 - is %s
            z?
            key_length must be an integer, not %s
            zC
            key_length must be greater than 0 - is %s
            )md5sha1sha224sha256sha384sha512z
            hash_algorithm must be one of "md5", "sha1", "sha224", "sha256",
            "sha384", "sha512", not %s
            )r      r   z<
            id_ must be one of 1, 2, 3, not %s
            zutf-8zutf-16bes                  0   @   )r   r      r   r       r   N)
isinstancer   	TypeErrorr
   r   r   
ValueErrorreprsetdecodeencodegetattrhashlibr   intmathceilfloatlenrangedigestr   r	   min)hash_algorithmpasswordsalt
iterations
key_lengthid_utf16_passwordalgouvdss_lenpp_lenicar   a2_bnum2startendi_num2i_num2_lbeginto_copys                                r   r   r      s   6 h))  h	
 
   	 dH%%  dOO	
 
   	 j),,  j!!	
 
   	 A~~ 	
 
   	 j),,  j!!	
 
   	 A~~ 	
 
   	 S!X!X!XYYYY   
 
   	 #iii..   II	
 
   	 __W--44Z@@;NN7N++D 	 	 	A --- 	qA 	As{{C	%D		"2"2Q"677888!ffunnIA !ffunnagJ 	AC	%N(;(;"<"<q"@AABBB!ffunnA !ffunnagJ 	
AA 	DIeJ''!+,,--A1q5AQA  =  =T!a%[[!!q*q.)) 	# 	#Ab""BB77Aa&&1**R a&&1** q1v&&*A aQ1-- 2 2qax1n59%nV&<&<q&@AA v;;a<<#HqLMM2FagJ'!CDD'1 qAj!$$agJAgI&57?+;+;)<<Qz\?r   )
__future__r   r   r   r   sysr.   r0   _asn1r   r	   _errorsr
   _typesr   r   r   version_infochrr   __all__r    r   r   <module>r\      s    R R R R R R R R R R R R 



   / / / / / / / / # # # # # # 2 2 2 2 2 2 2 2 2 2 dGG  
 
l l l l lr   