
    u%j	                         d dl Z d dlZd dlmZ d dlmZ d dlmZ	 d dl
mZmZ d dlZd dlZdZdZg dZd Zdd	Zd
 ZddZd Zd Zd Zd fdZddZddZy)    N)SAX2DOM)ZipFile)unpackpackz*http://schemas.android.com/apk/res/androidz,{http://schemas.android.com/apk/res/android})g      p?g~   ?g  >gQ   >c                 n    t               }t        j                  j                  | |       |j                  S N)r   lxmlsaxsaxifydocument)treehandlers     `/home/ubuntu/.local/share/pipx/venvs/gplaycli/lib/python3.12/site-packages/pyaxmlparser/utils.pyparse_lxml_domr      s'    iGHHOOD'"    c                     |t        t        |       t        |            S t        t        |       t        |      |      S r   )rangeint)absteps      r   _ranger      s3    |SVSV$$QQ&&r   c                     t        | t              rt        t        j                  |             S t
        j                  j                  |       rt        |       S t        d      )Nz'Resource should be file or bytes stream)	
isinstancebytesr   ioBytesIOospathisfile	TypeError)resources    r   get_zip_filer#      sG    (E"rzz(+,,	ww~~hx  
=
>>r   c                      |rt        |       S | S r   )str)itemstrings     r   is_strr(   %   s    4yKr   c                 >    t        | dz        t        | dz	  dz     z  S )Nl           )floatRADIX_MULTS)xcomplexs    r   complexToFloatr/   +   s%    J&'+x1}6I*JJJr   c                      | dkD  rd| z  dz
  } | S )Nil         )input_ls    r   long2intr3   /   s    ':5Nr   c                     | dz	  dk(  ryy)N      zandroid: r1   )is    r   
getPackager9   5   s    Bw!|r   c                      y)Nz<string>r1   )ixs    r   <lambda>r<   ;   s    r   c                 x   | t         j                  k(  r ||      S | t         j                  k(  rdt        |      |fz  S | t         j                  k(  rdt        |      |fz  S | t         j
                  k(  rdt        dt        d|            d   z  S | t         j                  k(  rd|z  S | t         j                  k(  r|dk(  ryy	| t         j                  k(  r2d
t        |      t         j                  |t         j                  z     fz  S | t         j                  k(  r5d
t        |      dz  t         j                  |t         j                  z     fz  S t         j                   | cxk  rt         j"                  k  rd|z  S  t         j$                  | cxk  rt         j&                  k  rn ndt)        |      z  S d|| fz  S )Nz?%s%08Xz@%s%08Xz%fz=fz=Lr   z0x%08Xfalsetruez%f%sd   z#%08Xz%dz<0x%X, type 0x%02X>)constTYPE_STRINGTYPE_ATTRIBUTEr9   TYPE_REFERENCE
TYPE_FLOATr   r   TYPE_INT_HEXTYPE_INT_BOOLEANTYPE_DIMENSIONr/   DIMENSION_UNITSCOMPLEX_UNIT_MASKTYPE_FRACTIONFRACTION_UNITSTYPE_FIRST_COLOR_INTTYPE_LAST_COLOR_INTTYPE_FIRST_INTTYPE_LAST_INTr3   )_type_datalookup_strings      r   format_valuerT   ;   s   !!!U##	%&&	&Ju-u555	%&&	&Ju-u555	%""	"fT4e#45a888	%$$	$%	%((	(A:	%&&	&5!!!%%*A*A"AB
 
 	

 
%%%	%5!C'  )@)@!@A
 
 	

 
	#	#u	I0I0I	I 
J 
			=%*=*=	=huo%% E5>11r   c                 n    t        | |rdnd      5 }|j                         cddd       S # 1 sw Y   yxY w)z
    Open and read a file
    :param filename: filename to open and read
    :param binary: True if the file should be read as binary
    :return: bytes if binary is True, str otherwise
    rbrN)openread)filenamebinaryfs      r   rY   rY   e   s2     
hC	0 Avvx  s   +4c                 ~   t        | t        j                  j                        r| j                  } i ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)}|j                  | D cg c]0  }d*j                  |j                  |||f      |rd+nd,   | |         2 c}      S c c}w )-a  
    Format the Name type of a X509 Certificate in a human readable form.
    :param name: Name object to return the DN from
    :param short: Use short form (default: False)
    :param delimiter: Delimiter string or character between two parts (default: ', ')
    :type name: dict or :class:`asn1crypto.x509.Name`
    :type short: boolean
    :type delimiter: str
    :rtype: str
    business_category)businessCategoryr_   serial_number)serialNumberra   country_name)CcountryNamepostal_code)
postalCoderf   state_or_province_name)STstateOrProvinceNamelocality_name)LlocalityNamestreet_address)streetstreetAddressorganization_name)OorganizationNameorganizational_unit_name)OUorganizationalUnitNametitle)rv   rv   common_name)CN
commonNameinitials)rz   rz   generation_qualifier)generationQualifierr|   surname)SNr}   
given_name)GN	givenNamename)r   r   	pseudonym)r   r   )dnQualifierr   )telephoneNumberr   )EemailAddress)DCdomainComponent)nameDistinguisherr   )organizationIdentifierr   )dn_qualifiertelephone_numberemail_addressdomain_componentname_distinguisherorganization_identifierz{}={}r   r6   )r   
asn1cryptox509Namenativejoinformatget)r   short	delimiter_attrs        r   get_certificate_name_stringr   p   sf    $
,,-{{	E	9	 	,	 	3		
 	!"?	 	.	 	5	 	6	 	#$D	 	#	 	+	 	,	 	 N	 	$	 	)	  	 !	" 	/#	$ 7B.5H#W/	A2 >>ptuhl7>>!%%tTl*CATU*VX\]aXbcuvvus   >5B:r   )F)T)Fz, )r   os.pathr   xml.dom.pulldomr   zipfiler   pyaxmlparser.constants	constantsrA   structr   r   lxml.saxr	   r   NS_ANDROID_URI
NS_ANDROIDr-   r   r   r#   r(   r/   r3   r9   rT   rY   r   r1   r   r   <module>r      si    	  #  &    >;
G'?K .C '2T)wr   