
e_c        	   @   s@  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d Z d Z d Z	 d Z
 d Z d Z d Z d Z d	 Z d
 Z d a d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z  d Z! d Z" d Z# d Z$ d Z% d	 Z& d Z' d Z( d  Z) d! Z* d Z+ d" Z, d# Z- d Z. d" Z/ d$ Z0 d% Z1 d& Z2 d" Z3 d' Z4 d( Z5 d) Z6 d* Z7 d+ Z8 d, Z9 d- Z: d Z; d( Z< d Z= d Z> d Z? d Z@ d	 ZA d ZB d. ZC d ZD d/ ZE d0 ZF d aG d1 ZH d ZI d% ZJ d ZK d2 ZL d3 ZM d4 ZN d5 ZO d ZP d ZQ d ZR d	 ZS d ZT d. ZU d ZV d/ ZW d ZX d ZY d ZZ d Z[ d Z\ d	 Z] d Z^ d/ Z_ d6 Z` d7 Za d8 Zb d9 Zc d: Zd d; Ze d< Zf d= Zg d> Zh d? Zi d@ Zj dA Zk dB Zl dC Zm dD Zn dE Zo d1 Zp dF Zq dG Zr d4 Zs d Zt d% Zu d? Zv dH Zw dI d dJ     YZx dK d dL     YZy i ey jz dM dN g dO 6ey j{ dP dN g dQ 6ey j| dR dN g dS 6ey j} dT dU g dV 6ey j~ dW dU g dX 6ey j dY dN g dZ 6ey j d[ dN g d\ 6ey j d] dN g d^ 6ey j d_ dN g d` 6ey j da dU g db 6ey j dc dU g dd 6ey j de dN g df 6ey j dg dU g dh 6ey j dg dU g di 6ey j dg dU g dj 6ey j dg dU g dk 6ey j dg dU g dl 6ey j dm dU g dn 6ey j do dN g dp 6ey j dq dN g dr 6ey j ds dN g dt 6ey j du dN g dv 6ey j dw dN g dx 6ey j dy dU g dz 6Z d{ d d|     YZ d} d d~     YZ d d d     YZ d d d     YZ d d d     YZ d d d     YZ d d d     YZ d d d     YZ d   Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z e d  Z d e d d e d t d d  Z d d d e e t d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d d d  Z d S(   iNi   i    i   i   i(   iP   i   i   id   i   i   i   i   i   IK    if3i4siZC}i6T}iwe}IT    i   i4   i    i@   i8   i   i   s   t   Et   Lt   Fs   s   i   i   i  @ s    s    s    s    t     s   ( s      i   i   i  i   i   i   i   i   i   i  0i  @i  0i  @i  0i  @i  Pi   i  i  `i  pi  i  i   i   i   i  i  t   OSTypec           B   s,   e  Z d  Z d Z d Z d Z d Z d Z RS(   i    i   i   i   i   i   (   t   __name__t
   __module__t   BMP_BOOT_OSt
   WM_BOOT_OSt   ANDROID_BOOT_OSt   CHROME_BOOT_OSt   SYMBIAN_BOOT_OSt   LINUX_BOOT_OS(    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR      s   t	   ImageTypec           B   s   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d	 Z d
 Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z RS(   i    i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i    (   R   R   t   NONE_IMGt   OEM_SBL_IMGt   AMSS_IMGt	   QCSBL_IMGt   HASH_IMGt
   APPSBL_IMGt   APPS_IMGt
   HOSTDL_IMGt   DSP1_IMGt   FSBL_IMGt   DBL_IMGt   OSBL_IMGt   DSP2_IMGt   EHOSTDL_IMGt   NANDPRG_IMGt
   NORPRG_IMGt
   RAMFS1_IMGt
   RAMFS2_IMGt   ADSP_Q5_IMGt   APPS_KERNEL_IMGt   BACKUP_RAMFS_IMGt   SBL1_IMGt   SBL2_IMGt   RPM_IMGt   SBL3_IMGt   TZ_IMGt   PSI_IMG(    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR      s6   R   t   bint   appsblR   t   dblR   t   osblR   t   elft   amssR   t   amss_mbnR   t   appsR   t   hostdlR   t   ehostdlt   EMMCBLD_IMGt   emmcbldR   t   qdsp6fwR   t   qdsp6swR    t   qdsp5R'   t   tzt   tz_rumit	   tz_virtiot   tzbsp_no_xput   tzbsp_with_testR%   t   rpmR#   t   sbl1R$   t   sbl2R&   t   sbl3R   t   efs1R   t   efs2R(   t   pmict   Elf_Ehdr_commonc           B   s)   e  Z e j d   Z d   Z d   Z RS(   t   16sHHIc         C   sS   t  j j |  } | |  _ | d |  _ | d |  _ | d |  _ | d |  _ d  S(   Ni    i   i   i   (   RD   t   st   unpackt   unpacked_datat   e_identt   e_typet	   e_machinet	   e_version(   t   selft   dataRH   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   __init__/  s    	c         C   s2   d GHx& |  j  j   D] \ } } | G| GHq Wd  S(   Ns   ATTRIBUTE / VALUE(   t   __dict__t	   iteritems(   RM   t   attrt   value(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   printValues7  s    (   R   R   t   structt   StructRF   RO   RT   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRD   +  s   	t
   Elf32_Ehdrc           B   s2   e  Z e j d   Z d   Z d   Z d   Z RS(   t   16sHHIIIIIHHHHHHc         C   s   t  j j |  } | |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _	 | d |  _
 | d |  _ | d	 |  _ | d
 |  _ | d |  _ | d |  _ | d |  _ | d |  _ d  S(   Ni    i   i   i   i   i   i   i   i   i	   i
   i   i   i   (   RW   RF   RG   RH   RI   RJ   RK   RL   t   e_entryt   e_phofft   e_shofft   e_flagst   e_ehsizet   e_phentsizet   e_phnumt   e_shentsizet   e_shnumt
   e_shstrndx(   RM   RN   RH   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO   E  s     	c         C   s2   d GHx& |  j  j   D] \ } } | G| GHq Wd  S(   Ns   ATTRIBUTE / VALUE(   RP   RQ   (   RM   RR   RS   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRT   W  s    c         C   sj   |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 |  j |  j |  j g } t j j |   S(   N(   RI   RJ   RK   RL   RY   RZ   R[   R\   R]   R^   R_   R`   Ra   Rb   RW   RF   t   pack(   RM   t   values(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   getPackedData\  s    (   R   R   RU   RV   RF   RO   RT   Re   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRW   A  s   		t
   Elf32_Phdrc           B   s2   e  Z e j d  Z d   Z d   Z d   Z RS(   t   Ii   c         C   s   t  j j |  } | |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _	 | d |  _
 | d |  _ d  S(	   Ni    i   i   i   i   i   i   i   (   Rf   RF   RG   RH   t   p_typet   p_offsett   p_vaddrt   p_paddrt   p_fileszt   p_memszt   p_flagst   p_align(   RM   RN   RH   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO   w  s    	c         C   s2   d GHx& |  j  j   D] \ } } | G| GHq Wd  S(   Ns   ATTRIBUTE / VALUE(   RP   RQ   (   RM   RR   RS   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRT     s    c         C   sF   |  j  |  j |  j |  j |  j |  j |  j |  j g } t j	 j
 |   S(   N(   Rh   Ri   Rj   Rk   Rl   Rm   Rn   Ro   Rf   RF   Rc   (   RM   Rd   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRe     s    t   IIIIIIII(   R   R   RU   RV   RF   RO   RT   Re   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRf   r  s   		t
   Elf64_Ehdrc           B   s2   e  Z e j d   Z d   Z d   Z d   Z RS(   t   16sHHIQQQIHHHHHHc         C   s   t  j j |  } | |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _	 | d |  _
 | d |  _ | d	 |  _ | d
 |  _ | d |  _ | d |  _ | d |  _ | d |  _ d  S(   Ni    i   i   i   i   i   i   i   i   i	   i
   i   i   i   (   Rq   RF   RG   RH   RI   RJ   RK   RL   RY   RZ   R[   R\   R]   R^   R_   R`   Ra   Rb   (   RM   RN   RH   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO     s     	c         C   s2   d GHx& |  j  j   D] \ } } | G| GHq Wd  S(   Ns   ATTRIBUTE / VALUE(   RP   RQ   (   RM   RR   RS   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRT     s    c         C   sj   |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 |  j |  j |  j g } t j j |   S(   N(   RI   RJ   RK   RL   RY   RZ   R[   R\   R]   R^   R_   R`   Ra   Rb   Rq   RF   Rc   (   RM   Rd   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRe     s    (   R   R   RU   RV   RF   RO   RT   Re   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRq     s   		t
   Elf64_Phdrc           B   s2   e  Z e j d   Z d   Z d   Z d   Z RS(   t   IIQQQQQQc         C   s   t  j j |  } | |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _ | d |  _	 | d |  _
 | d |  _ d  S(	   Ni    i   i   i   i   i   i   i   (   Rs   RF   RG   RH   Rh   Rn   Ri   Rj   Rk   Rl   Rm   Ro   (   RM   RN   RH   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO     s    	c         C   s2   d GHx& |  j  j   D] \ } } | G| GHq Wd  S(   Ns   ATTRIBUTE / VALUE(   RP   RQ   (   RM   RR   RS   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRT     s    c         C   sF   |  j  |  j |  j |  j |  j |  j |  j |  j g } t j	 j
 |   S(   N(   Rh   Rn   Ri   Rj   Rk   Rl   Rm   Ro   Rs   RF   Rc   (   RM   Rd   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRe     s    (   R   R   RU   RV   RF   RO   RT   Re   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRs     s   		t   SegmentInfoc           B   s   e  Z d    Z d   Z RS(   c         C   s   d |  _  d  S(   Ni    (   t   flag(   RM   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO     s    c         C   s   d t  |  j  GHd  S(   Ns   Flag: (   t   strRv   (   RM   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRT     s    (   R   R   RO   RT   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRu     s   	t   Boot_Hdrc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   t  j |  _ t |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R   t   image_idt   FLASH_PARTI_VERSIONt   flash_parti_vert	   image_srct   image_dest_ptrt
   image_sizet	   code_sizet   sig_ptrt   sig_sizet   cert_chain_ptrt   cert_chain_sizet   magic_number1t   versiont   OS_typet   boot_apps_parti_entryt   boot_apps_size_entryt   boot_apps_ram_loct   reserved_ptrt
   reserved_1t
   reserved_2t
   reserved_3(   RM   t   init_val(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO     s(    																		c         C   s   t  S(   N(   t   BOOT_HEADER_LENGTH(   RM   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt	   getLength  s    c         C   sO  |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 |  j |  j |  j |  j |  j |  j |  j |  j |  j g } |  j d k r d | d <n  |  j d k r d | d <n  |  j d k r d | d <n  | t k r t j d	  } | d  } n t j d |  j    } | j |   } t | d  } | j |  | j   | j S(
   NI       I    i   i   i   Rg   i
   t   wbt
   IIIIIIIIII(   Ry   R{   R|   R}   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   FalseRU   RV   R   Rc   t   OPENt   writet   closet   size(   RM   t   targett   write_full_hdrRd   RF   t   packed_datat   fp(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   writePackedData  sF    
(   R   R   RO   R   R   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRx     s   		t   Sbl_Hdrc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   codewordt   magicRy   R   R   R|   R}   R~   R   R   R   R   R   t   oem_root_cert_selt   oem_num_root_certst   booting_image_configt
   reserved_6t
   reserved_7t
   reserved_8t
   reserved_9(   RM   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRO   E  s(    																			c         C   s   t  S(   N(   t   SBL_HEADER_LENGTH(   RM   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   [  s    c         C   s   |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 |  j |  j |  j |  j |  j |  j |  j |  j |  j g } t j d |  j    } | j |   } t | d  } | j |  | j   | j S(   NRg   R   (   R   R   Ry   R   R   R|   R}   R~   R   R   R   R   R   R   R   R   R   R   R   R   RU   RV   R   Rc   R   R   R   R   (   RM   R   Rd   RF   R   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   ^  s4    
(   R   R   RO   R   R   (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   D  s   		c         C   s   |  j  d  S(   Nt	   mbn_tools(   t   Detect(   t   env(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   exists  s    c         C   s  t  |   t |   |  j t d  |  j t d  |  j t d  |  j t d  |  j t d  |  j t d  |  j t	 d  |  j t
 d  |  j t d	  d
 |  k r	|  j d d d g |  j t d  |  j t d  |  j t d  |  j t d  n  d  S(   Nt   FilterDictionaryt	   ImageAutht   ImageHeadert   PBootGenElft   PBootAddHasht   ModifyElfFlagst   GenerateCodeHasht   InsertSBLMagicCookiet   ModifyRelocatableFlagst   USES_ENCRYPT_MBNt   pil_encryptt   toolpaths2   ${BUILD_ROOT}/core/securemsm/ssd/tools/pil_encryptt   GetSSDSideEffectFileNamet   EncryptElfSegmentst   GenerateMetaDatat
   EncryptMBN(   t   generate_global_dictt   init_build_varst	   AddMethodt   filter_dictionaryt
   image_autht   image_headert   pboot_gen_elft   pboot_add_hasht   modify_elf_flagst   generate_code_hasht   insert_SBL1_magicCookiet   modify_relocatable_flagst   Toolt   get_ssd_se_fnamet   encrypt_elf_segmentst   generate_meta_datat   encrypt_mbnt   None(   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   generate  s$    

c         C   s   |  j  |  } t | d  } t |  } | j |  | t k rj t | } t | | t  | j   n | j   t d t	 |   d S(   s   
   Make call to SSD API to return buffer filled with XML header information.
   The XML header which we write contains information regarding the algorithms
   being used along with specific key values which are to be used for encrpytion.
   R   s   XML Size too large: N(
   t   SSDGetMetaDatat   opent   lenR   t   XML_HEADER_MAXSIZEt   pad_filet
   PAD_BYTE_1R   t   RuntimeErrorRw   (   R   t   meta_out_file_namet   add_magic_numt
   xml_headert   xml_target_filet   xml_header_sizet   bytes_to_pad(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    

c         C   s   t  | d  } t  | d  } t j j |  } | j |  } |  j d | |  } | j |  | j   | j   |  j   d  S(   Nt   rbs   wb+i    (	   R   t   ost   patht   getsizet   readt   SSDEncryptSegmentR   R   t	   SSDDeInit(   R   t   mbn_in_file_namet   mbn_out_file_namet	   mbn_in_fpt
   mbn_out_fpt   mbn_file_sizet	   file_bufft   encrypted_buf(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    

c         C   s
   |  j    S(   N(   t   SSDGetSideEffectFileName(   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    c         C   s&  t  | d  } t  | d  } t |  \ } } d } t j | | t j j |   x t | j  D] } | | }	 |	 j	 t
 k re t |	 j  t k re | j |	 j  |	 j }
 | j |
  } |  j | | |
  } | d 7} | j |	 j  | j |  qe qe W| j   | j   |  j   d  S(   NR   s   wb+i    i   (   R   t   preprocess_elf_filet   shutilt   copyfileobjR   R   R   t   rangeR_   Rh   t	   LOAD_TYPEt   MI_PBT_SEGMENT_TYPE_VALUERn   t   MI_PBT_HASH_SEGMENTt   seekRi   Rl   R   R   R   R   R   (   R   t   elf_in_file_namet   elf_out_file_namet	   elf_in_fpt
   elf_out_fpt
   elf_headert
   phdr_tablet   encrypted_seg_countert   it	   curr_phdrt   data_lenR   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s&    
	


c         C   sM   d j  g  t |  D]& } t |  | | d d ?d  ^ q d  d  d   S(   Nt    i   i   i   i(   t   joint   xranget   chr(   t   nt   lR   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   convert_int_to_byte_string  s    c         C   sa  |  d  k r t d  n  t |  d  } | j t k r| j t  | j t  | j t  | j t	  | j t
  | j t  | j t  | j d j d t t    | j d k r | j t  nj | j d k r | j t  nK | j d k r| j t  n, | j d k r,| j t  n | j t  | j t  | j t  | j t | d	   | j t t d	   | j t | j d	   | j d j d t t    | j t t d
   | j t t d
   | j t  | j d j d t t    | j t t d   | j t t d   | j t t t d	   | j t | d	   | j t | d	   | j t | d	   | j t | d	   | j t t d	   n| j t  | j t  | j t  | j t	  | j t   | j t  | j t  | j d j d t t    | j d k r_| j t  nj | j d k r~| j t  nK | j d k r| j t  n, | j d k r| j t  n | j t  | j t  | j t  | j t | d   | j t t! d   | j t | j d   | j d j d t t    | j t t! d
   | j t t" d
   | j t  | j d j d t t    | j t t d   | j t t! t" d   | j t | d   | j t | d   | j t | d   | j t | d   | j t t d   | j t t d   | j#   d S(   Ns   Requires a ELF header fileR   R   i	   i    i   i   i   i   i   i   ($   R   R   t   filet   is_elf_64_bitt   TrueR   t   ELFINFO_MAG0t   ELFINFO_MAG1t   ELFINFO_MAG2t   ELFINFO_MAG3t   ELFINFO_CLASS_64t   ELFINFO_DATA2LSBt   ELFINFO_VERSION_CURRENTt   rjustR   t   ELFINFO_RESERVEDRJ   t   ELFINFO_NONE_ETYPEt   ELFINFO_RELOC_ETYPEt   ELFINFO_DYNAM_ETYPEt   ELFINFO_CORE_ETYPEt   ELFINFO_EXEC_ETYPEt   ELFINFO_ARM_MACHINETYPEt   ELFINFO_VERSION_EV_CURRENTR  t   ELF64_HDR_SIZER[   t   ELF64_PHDR_SIZEt   ELFINFO_PHNUMR   t   MI_PBT_RWE_SEGMENTt   ELF_BLOCK_ALIGNt   ELFINFO_CLASS_32t   ELF32_HDR_SIZEt   ELF32_PHDR_SIZER   (   t   output_file_namet
   image_destR~   t
   elf_structt   elf_fp(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   create_elf_header_gui  s    
c         C   s`  |  d  k r t d  n  t |  d  } | t k rD| j t  | j t  | j t  | j t  | j t	  | j t
  | j t  | j d j d t t    | j t  | j t  | j t  | j t | d   | j t t d   | j t t d   | j d j d t t    | j t t d   | j t t d   | j t  | j d j d t t    | j t t d   | j t t d   | j t t t d   | j t | d   | j t | d   | j t | d   | j t | d   | j t t d   n| j t  | j t  | j t  | j t  | j t  | j t
  | j t  | j d j d t t    | j t  | j t  | j t  | j t | d   | j t t d   | j t t d   | j d j d t t    | j t t d   | j t t d   | j t  | j d j d t t    | j t t d   | j t t t d   | j t | d   | j t | d   | j t | d   | j t | d   | j t t d   | j t t d   | j   d	 S(
   Ns   Requires a ELF header fileR   R   i	   i   i   i   i   i    (   R   R   R  R  R   R  R  R	  R
  R  R  R  R  R   R  R  R  R  R  R  t   ELFINFO_SHOFFR  R  R   R  R  R  R  R  R   (   R  R   R~   R  R"  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   create_elf_header  sx    
t   regc         C   st  | t  k r$ | d  k r$ t d  n  | d d k rL | d  k rL t d  n  |
 d  k r| t j j |  t k r| t d  n  |
 d  k	 r |
 } n t j j |  } d } d } | d k r t } | } | | | } | d d k r| d | d 7} qn d } d } | } | d d k r2t	 |  t
 } n' | d d	 k rY| d
 } | d } n  | d k rqt d t d d   } t | _ t | _ | d | _ t | _ | | _ | | _ | | _ | | | _ | | _ | | | | _ | | _ | d | _ | d | _ d |  k r"t | _ n d |  k r:t | _ n  | t  k r^t  | | | |  } n  | j! d |  n | d k r]t" d t d d   } | d | _ | | _ | | _ | | _ | | _ | | | _ | | _ | | | | _ | | _ d |  k r d | _# d | _ d | _ n  | t  k rDt  | | | |  } n  | j! d | d |	  n t d t$ |   d S(   Ns%   Image Header requires a preamble filet   IMAGE_KEY_MBN_TYPER-   s%   ELF Image Headers require an elf files4   Code size unavailable, and input file does not existi    t   securei   R)   t   IMAGE_KEY_IMAGE_DESTt   IMAGE_KEY_IMAGE_SOURCEt   sblR   t
   0xFFFFFFFFi   t   IMAGE_KEY_IMAGE_IDt   IMAGE_KEY_OEM_ROOT_CERT_SELt   IMAGE_KEY_OEM_NUM_ROOT_CERTSt   USES_SBL_FOR_AARCH64t   USES_SBL_FOR_AARCH632R   R&  t   0x0t#   USES_PLATFORM_IMAGE_INTEGRITY_CHECKi   R   s   Header format not supported: (%   R  R   R   R   R   R   R   R   t   SHA256_SIGNATURE_SIZEt   get_hash_addresst   MI_BOOT_IMG_HDR_SIZER   t   intt   FLASH_CODE_WORDR   t	   MAGIC_NUMR   Ry   t   MI_BOOT_SBL_HDR_SIZER|   R}   R~   R   R   R   R   R   R   R   t   SBL_AARCH64R   t   SBL_AARCH32t   image_preambleR   Rx   R{   Rw   (   R   t   gen_dictt   code_file_nameR  t   secure_typet   header_formatt   requires_preamblet   preamble_file_namet   elf_file_nameR   t   in_code_sizet   cert_chain_size_int   num_of_pagesR   R   t   image_sourcet   signature_sizeR   R~   t   boot_sbl_headert   boot_header(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    $	
																t
   non_securec
   ,      C   s  | t  k r d a n d a t | d  }
 t | d  } | d  k	 rW t | d  } n  t |  \ } } | j } | | j } | j } d } d } | j t t	 k r t
 d t  } t } t  } n t d t  } t } t } d t } d } d } d } | d  k	 r|| t k r"t d  n  t | _ t | _ | j d 7_ | j d t  | t 7} | j d t  | t 7} n  xt |  D]} | | } t | j  t k r| j } | j } d } | j t d	 @}  t |   d k	 r| t |  8} | t |  7} n  | t d	 @d k r6t d
 t  |  d  n  | | }  x?| |  k  r| t k  rd| } n t } |
 j! |  |
 j" |  }! t# | j  t  k rt$ |! |  } n
 d t } | j |  | t 7} | t 7} qCWqt | j  t% k r| j t& k	 r|
 j! | j  | j }" |
 j" |"  }# t# | j  t  k r^|" d k r^t$ |# |  } n
 d t } | j |  | t 7} qqW| d  k	 r| d k r| t' |	 7} n  | t  k r| t( 7} n  t) | | t* t |  \ }$ }% }& }' | d  k	 rG| | k rt d t  |   n  | t d	 @d k	 rGt d t  |   qGn  | d  k	 rh| |$ _ | |$ _+ n  | d  k	 r| |$ _, n  t |% } |& | } | d j }( x9 t |  D]+ } | | } | j |( k  r| j }( qqW|( | k  r| |( } n  | } d | _- d | _. d | _/ xk t |  D]] } | | } | j t& k rX| j d	 8_ q$n  | j }) t0 |
 |) | | j | | j  q$W| | _1 | j! |  | | j | | _ | j | j2    | j |$ j2    | d | 7} xl t |  D]^ } | | } | j t& k rqn  | j | 7_ | j! |  | j | j2    | | 7} qW| j! d  | j | j2    | j! d  | j" |  }* | j! | j1  | j" | j |  }+ t$ |* |+ |  } | j! d  | j |  n  |
 j3   | j3   | d  k	 r| j3   n  d S(   Ni    i   R   s   wb+i    t    s8   Input ELF has exceeded maximum number of program headersi   i   s
   seg_size: s    is not ELF page aligned!R(  s.   Hash table exceeds maximum hash segment size: s3   Hash segment size passed is not ELF Block Aligned: (4   R  t   MI_PROG_BOOT_DIGEST_SIZER   R   R   R_   R^   RI   t   ELFINFO_CLASS_INDEXR  Rs   R  R  Rf   R  R  R   t   MAX_PHDR_COUNTR   t	   NULL_TYPERh   t   MI_PBT_ELF_PHDR_SEGMENTRn   R   R   t   MI_PBT_PAGE_MODE_VALUEt   MI_PBT_PAGED_SEGMENTRi   Rl   Rj   R  R7  t   hexR   R   t   MI_PBT_CHECK_FLAG_TYPEt   generate_hasht   MI_PBT_NON_PAGED_SEGMENTt	   PHDR_TYPER4  R   t   initialize_hash_phdrR6  Rk   Rm   Ra   Rb   R[   t   file_copy_offsetRZ   Re   R   (,   R   R   t   hash_out_file_nameR   R@  t   hash_seg_max_sizet   last_phys_addrt   append_xml_hdrt   is_sha256_algoRF  R   t   hash_out_fpR   R   R   t	   num_phdrst   phdr_total_sizet	   phdr_sizet   hashtable_sizet   hashtable_shiftt   new_phdrt   elf_header_sizet   is_elf64t   hasht
   phdr_startR   t   hash_seg_endR   R   t
   seg_offsett   seg_sizet	   hash_sizet   offt   fbufR   R   t	   hash_Phdrt   pad_hash_segmentt   hash_tbl_end_addrt   hash_tbl_offsett
   min_offsett
   src_offsett   elfhdr_bufft   proghdr_buff(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   @  s   
				
		

		
	

$	!
$	


			
	$	


c         C   s  t  | d  } t  | d  } t  | d  } t |  \ } } t j j |  }	 t }
 x: t | j  D]) } | | } | j t	 k rg t
 }
 Pqg qg W|
 t
 k r t j | | t j j |   | j } t | d | | |	  n t d |  | j   | j   | j   d S(   NR   s   wb+i    s.   Hash segment program header not found in file (   R   R   R   R   R   R   R   R_   Rn   t   MI_PBT_ELF_HASH_SEGMENTR  R   R   Ri   R[  R   R   (   R   R   t   hash_tbl_file_nameR   R   t   hash_tbl_fpR   R   R   Ro  t   hash_segment_foundR   R   t   hash_hdr_offset(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   B  s(    
	


c         C   s   t  | d  } t  | d  } t |  \ } } t j j |  } t }	 x] t | j  D]? }
 | |
 } | j t	 k r t
 }	 Pn  t | d | d |  qX Wt d |  | j   | j   d S(   NR   s   wb+i    s.   Hash segment program header not found in file (   R   R   R   R   R   R   R   R_   Rn   Rz  R  R[  R   R   (   R   R   R{  R   R|  R   R   R   Ro  R}  R   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   pboot_add_hash_filem  s    


c         G   s  t  |  d k  s$ t  |  d k r0 t d  n  | d } | d } | d } | d } | d } | d	 } | d
 } t  |  d k r | d }	 n t }	 g  }
 d } t j j |  r |
 j |  | d } n  t j j |  r |
 j |  | d } n  t j j |  r+|
 j |  | d } n  | d k rCt d  n  t | |
  t j j |  } | |	 k r|	 | } t	 | d  } t
 | | t  | j   n t d t |   t | | | | g  d S(   Ni   i   s   Usage Invalidi    i   i   i   i   i   i   s&   Missing file(s) required for signing.
t   abs   Certificate Size too large: (   R   R   t   CERT_CHAIN_ONEROOT_MAXSIZER   R   R   t   appendt   concat_filesR   R   R   R   R   Rw   (   R   t   argst	   binary_int	   signaturet   attestation_certt   attestation_ca_certt	   root_certt   cert_chain_outt   signed_image_outt   cert_size_max_int	   cert_listt	   num_certst	   cert_sizeR   t   cert_fp(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     sF    $







c         C   s  d } d } t  |  \ } } | j t t k rP t d t  } t } t } n t d t	  } t
 } t } t | d  }	 | j | }
 |	 j |
  | d } d |  k r t } n t } | j d @| B} t j d  } | j |  } |	 j |  | j | } xx t | j  D]g } |	 j |  | | } | j t @t B} t j d  } | j |  } |	 j |  | | j 7} qW|	 j   d S(   Ni   i   RM  s   r+i    t   USES_RELOC_ALIGN_VALUE_4MBRg   (   R   RI   RO  R  Rs   R  R  R  Rf   R  R  R   R   RZ   R   t   ALIGNVALUE_4MBt   ALIGNVALUE_1MBRo   RU   RV   Rc   R   R   R_   Rn   t   MI_PBT_FLAGS_MASKt!   MI_PBT_ELF_AMSS_RELOCATABLE_IMAGER^   R   (   R   t
   output_elft   phdr_align_flag_offsett   phdr_reloc_flag_offsetR   R   R   Rh  Ri  R   t   file_offset_align_flagt   alignment_valuet	   new_alignRF   t   new_flag_bytest   file_offset_reloc_flagR   t   new_flag(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s@    	
	

c         C   sW  t  |  \ } } t | |  d  } d |  k r: d } n d } | j t t k rl t d t  } d } n t d t  } d } t	 | d  }	 t
 |  | j | k	 r t d	  n  | j | }
 x t | j |  D]n } |	 j |
  | | } | j t @| | j B} t j d
  } | j |  } |	 j |  |
 | j 7}
 q W|	 j   d S(   Nt   GLOBAL_DICTt   USES_FEATURE_DYNAMIC_LOADINGi   i    RM  i   i   s   r+s8   SCL file and ELF file have different number of segments!Rg   (   R   t   readSCLRI   RO  R  Rs   R  Rf   R  R   R   R_   R   RZ   R   R   Rn   R  Rv   RU   RV   Rc   R   R^   R   (   R   R   t   scl_file_nameR   R   t   segment_listt   subR   t   phdr_flag_offR   t   file_offsetR   R  RF   R  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s0    		

c          C   s  t  |  \ } } | j t t k r> t d t  } d } n t d t  } d } t | d  } | j	 | } d } d }	 d }
 d } d	 } d
 } d } d } |	 } |
 } d } xt
 | j  D]} | | } | j d k r | j | @| k r | j d k r | j |
 d k r | } | j | j  d } x9 t |  | j k  rm| | j | j t |   } q5Wt j d | j d |  } x% | D] } | | k rd } PqqW| d k rPqq q W| d k rd S| | } d } | j |
 } x t
 | j  D]| } | | } | j |	 d |	 } | j | k r| j | @| k r| | k r| d k rzt d | d  n  | } qqW| d k rt d  n  | | } g  } | j | j  | j } x | d k r~t | |	  } d } x3 t |  | k  r!| | j | t |   } qWt |  |	 k  r[| t j d d  |	 t |  } n  | t | t  g } | | 8} qW| j | j  x | D] } | j |  qW| j   d S(   NRM  i   i   s   rb+i   i   i    I    i   i   i   ii   i    R   Rg   i   s"   Multiple code segments match for: s    pagess   No matching code segment foundt   b(   R   RI   RO  R  Rs   R  Rf   R  R   RZ   R   R_   Ro   Rn   Rl   R   Ri   R   R   RU   RG   R   t   minRc   RW  R  R   R   (    R   R   R   R   R   R  R   R  t   DP_CODE_ALIGNt   DP_PAGE_SIZEt   DP_HASH_SIZEt   DP_HASH_MAGICt
   PH_PERM_RWt
   PH_PERM_RXt
   PH_PERM_ROt   PH_PERM_MASKt	   page_sizeRo  t   hash_seg_idxR   t	   hash_datat   vt	   hash_phdrt   code_seg_idxt   code_seg_pagest
   curr_pagest	   code_phdrt   hashest
   bytes_leftt   bytes_in_paget   paget   h(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   P  s    	
"$


	!'
c         C   s6  t  |  d  } | j   } t |  } d } d } d } d } d }	 g  }
 x | | k  r'| } | | } d | k r|	 d k r t   } | j   } | j d  } t |  d k  r t d |  n  t | d j |   | _ |
 j	 |  n  |	 d	 7}	 n d
 | k r|	 d	 8}	 n  | d	 7} qN W| j
   |
 S(   Nt   rR   s   (){}[]i    t   {t    i   s   SCL Segment Syntax malformed: i   t   }(   R   t	   readlinesR   Ru   t   stript   splitR   t   getSegmentFlagRv   R  R   (   t   filenamet   global_dictt   scl_fpt	   file_datat	   num_linest   current_linet   previous_linet   strip_charsR   t   bracket_countert   seg_listt   new_scl_entryt   tokens(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR    s6    
	
c         C   s  d  } d } d } d } d } d } d } d } d }	 d	 }
 d
 } d } d } d } d } d } d } d } d } d } d } |  d  k s t |   d k r t d |   n  | |  k r| |  k r t } q| |  k r t } q| |  k r!| |  k r| |  k rt } qt } qt } q| |  k r6t } q| |  k rKt } q|
 |  k r`t	 } q| |  k rut
 } q| |  k rt } qt } n| |  k rG| |  k s| |  k r| |  k r| |  k rt } qt } qDt } q| |  k rt } q| |  k rt } q| |  k r)t } q| |  k r>t } qt } na | |  k r\t } nL | |  k rqt } n7 | |  k rt } n" | |  k rt } n t d |   | S(   Nt   ROt   RWt   ZIt   PAGEDt   NOTPAGEDt   SWAPPEDt	   SWAP_POOLt   RESERVEDt   HASHt   SHAREDt   NOTUSEDt   BOOT_SEGMENTt   CODEt   L4BSPt   INDEX_0t   INDEX_1t   NONPAGEt   PAGEUNLOCKEDt
   PAGELOCKEDt   UNSECUREi    s$   Invalid segment information passed: s5   The segment name is wrongly defined in the SCL file: (   R   R   R   t$   MI_PBT_ELF_AMSS_NON_PAGED_RO_SEGMENTt0   MI_PBT_ELF_SWAP_POOL_NON_PAGED_ZI_SEGMENT_INDEX0t0   MI_PBT_ELF_SWAP_POOL_NON_PAGED_ZI_SEGMENT_INDEX1t$   MI_PBT_ELF_AMSS_NON_PAGED_ZI_SEGMENTt)   MI_PBT_ELF_AMSS_NON_PAGED_NOTUSED_SEGMENTt(   MI_PBT_ELF_AMSS_NON_PAGED_SHARED_SEGMENTRz  t   MI_PBT_ELF_BOOT_SEGMENTt"   MI_PBT_ELF_NON_PAGED_L4BSP_SEGMENTt$   MI_PBT_ELF_AMSS_NON_PAGED_RW_SEGMENTt*   MI_PBT_ELF_SWAPPED_PAGED_RO_SEGMENT_INDEX0t*   MI_PBT_ELF_SWAPPED_PAGED_RO_SEGMENT_INDEX1t    MI_PBT_ELF_AMSS_PAGED_RO_SEGMENTt    MI_PBT_ELF_AMSS_PAGED_ZI_SEGMENTt%   MI_PBT_ELF_AMSS_PAGED_NOTUSED_SEGMENTt$   MI_PBT_ELF_AMSS_PAGED_SHARED_SEGMENTt   MI_PBT_ELF_PAGED_L4BSP_SEGMENTt    MI_PBT_ELF_AMSS_PAGED_RW_SEGMENTt   MI_PBT_ELF_PAGED_LOCKED_SEGMENTt!   MI_PBT_ELF_PAGED_UNLOCKED_SEGMENTt   MI_PBT_ELF_RESIDENT_SEGMENTt   MI_PBT_ELF_UNSECURE_SEGMENT(   t   seg_infot   ret_valR  R  R  t   PAGEABLEt   NOTPAGEABLEt   SWAPABLER  R  t   HASHTBLR  R  R  R  R  t   POOL_INDEX_0t   POOL_INDEX_1R  R  R  R  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR    s    																							c         C   sJ   | d k  r t  d  n  x+ | d k rE |  j d |  | d 8} q Wd  S(   Ni    s0   Number of bytes to pad must be greater than zeros   %ci   (   R   R   (   R   t	   num_bytesRS   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   b  s    c         C   s   t  |  t k	 r | g } n  t |  d  } xZ | D]R } t | d  } x0 t r{ | j d  } | sk Pn  | j |  qL W| j   q4 W| j   d  S(   NR   R   i   (   t   typet   listR   R  R   R   R   (   R   t   sourcest   target_filet   fnameR  t   bin_data(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR  p  s    	c         C   s0   t  |  d d d  a t  |  d d d  a d  S(	   NR  t   CERT_CHAIN_MAXSIZEi   i   R   i   i   i   (   t   get_dict_valueR  R   (   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    c         C   s   |  j  d  j   } |  j  d  j   } t |  j | d   } t |  j | d   } t j j |  t k r t j j |  t k r t | |  } n i  } |  j	 d |  d  S(   Ns   CUST${BUILD_ID}.Hs   TARG${BUILD_ID}.Hs   ${INC_ROOT}/build/msR  (
   t   substt   lowerRw   t   FindFileR   R   R   R  t   populate_dictionaryt   Replace(   R   t   cust_ht   targ_ht   cust_file_namet   targ_file_nameR  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     s    c          G   s  t  |   d k  r t d  n  i  } d d d g } x^t t  |    D]J} |  | } t | d  } t j | | d d } xt j |  D] } | d	 } | d d
 k r | d d  k r | d d  k r | d j	   } | d j	   }	 |	 d k rd }	 n  | d  k	 r[t  | j
    d	 k r[x2 | D]' }
 |	 j |
 t | j |
    }	 q-Wn  y t |	  }	 Wn n X|	 | | <q q W| j   qF W| S(   Ni   s-   At least 1 file must be specified as an inputt   Definet   Keyt   ValueR  t	   delimiterR  i    s   #defineR   t   yes(   R   R   R   R   t   csvt
   DictReadert	   itertoolst   izipR   R  t   keyst   replaceRw   t   gett   evalR   (   R  R  t   FieldsR   t   template_file_patht   instreamRd   t	   new_entryt   new_keyt	   new_valuet   key(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR    s6    

	$(c         K   s  | j  d  s t d  n- | j d  } t |  t k	 rH t d  n  | j  d  s` d } n- | j d  } t |  t k	 r t d  n  | j  d  s d } n7 | j d  } | d k r | d	 k r t d
 |  n  | j  d  s t j } n- | j d  } t |  t k	 r$t d  n  i  } d } d }	 | t k ra| }
 | j	   d } | } n* t | d }
 t | d } t | d } | d k rnP | d	 k rd | d } | | k r| | } qt d |  n t d
 |  |
 | d <| | d <|	 | d <| | d <| | d <| | d <t
 | d d  | d <t
 | d d  | d <t
 | d  d  | d! <t
 | d" d  | d# <t
 | d$ d  } t
 | d% d  } | t d t d  k r| t d t d  k r| | k r| | d& <| | d' <n	 t d(  | S()   Nt
   IMAGE_TYPEs3   IMAGE_TYPE must be defined to use FilterDictionary.s"   IMAGE_TYPE must be of string type.t
   FLASH_TYPEt   nands#   FLASH_TYPE must be of string type. t   MBN_TYPER-   R)   s"   MBN_TYPE currently not supported: t   IMAGE_IDs!   IMAGE_ID must be of integer type.i    t   _IMGi   i   t
   IMAGE_KEY_t
   _DEST_ADDRs.   Builds file does not have IMAGE_KEY pair for: R-  R)  R*  t   IMAGE_KEY_FLASH_TYPER'  t   IMAGE_KEY_ID_MATCH_STRt   FLASH_AUTO_DETECT_MAX_PAGEi    t$   IMAGE_KEY_FLASH_AUTO_DETECT_MAX_PAGEt   FLASH_AUTO_DETECT_MIN_PAGEi   t$   IMAGE_KEY_FLASH_AUTO_DETECT_MIN_PAGEt   MAX_SIZE_OF_VERIFY_BUFFERt#   IMAGE_KEY_MAX_SIZE_OF_VERIFY_BUFFERt   BOOT_SMALL_PREAMBLEt   IMAGE_KEY_BOOT_SMALL_PREAMBLEt   OEM_ROOT_CERT_SELt   OEM_NUM_ROOT_CERTSR.  R/  s1   Invalid OEM root certificate configuration values(   t   has_keyR   R!  R  Rw   R   R   R7  t   image_id_tablet   upperR  R   t   MAX_NUM_ROOT_CERTS(   R   R  t   kwargst
   image_typet
   flash_typet   mbn_typeRy   R>  R   RH  t   idt   id_match_strt   id_mbn_typet   template_key_matchR   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR     sr    			






	c         C   s&   d | } | |  k r |  | S| Sd  S(   NR0  (    (   t   dictt
   key_stringt   defaultR)  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR  B  s    
c         C   sV  t  |  d  } t | j t   } t |  t k rF t d |   n  | j d  | j t	 t
 k r~ t | j t   } n t | j t   } g  } t |  t k r t d |   n  | j } | j } | j |  xe t | j  D]T } | j t	 t
 k r"| j t | j |    q | j t | j |    q W| j   | | g S(   NR   s   ELF file failed verification: i    (   R   RD   R   t   ELF_HDR_COMMON_SIZEt   verify_elf_headerR   R   R   RI   RO  R  Rq   R  RW   R  R^   RZ   R   R_   R  Rs   Rf   R   (   RD  R"  R   R   Rd  R  R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   O  s(    		 
c         C   s  t  |  d  } t | j t   } | j d  | j t t k r\ t | j t	   } n t
 | j t   } g  } | j } | j } | j |  xe t | j  D]T } | j t t k r | j t | j |    q | j t | j |    q W| j   | | g S(   NR   i    (   R   RD   R   RM  R   RI   RO  R  Rq   R  RW   R  R^   RZ   R   R_   R  Rs   Rf   R   (   RD  R"  R   R   Rd  R  R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   preprocess_elf_file_no_errcheckz  s     		 
c   	      C   s   t  |   \ } } d } d } xZ t | j  D]I } | | } | j | k r. t | j  t k rw | j } | } qw q. q. W| | } | j | j d t d @t } | S(   Ni    i   (	   R   R   R_   Rk   R   Rn   t   MI_PBT_SWAPPED_SEGMENTRm   R  (	   RD  R   R   t
   last_paddrt   last_paddr_segmentR   R   t   max_phdrR  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR5    s    
	
c         C   s   |  j  t t k s |  j  t t k s |  j  t t k s |  j  t t k s |  j  t	 t
 k rr |  j  t	 t k s |  j  t t k r t St Sd  S(   N(   RI   t   ELFINFO_MAG0_INDEXR  t   ELFINFO_MAG1_INDEXR  t   ELFINFO_MAG2_INDEXR	  t   ELFINFO_MAG3_INDEXR
  RO  R  R  t   ELFINFO_VERSION_INDEXR  R   R  (   R   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRN    s    c         C   s:   |  j  |  |  j |  } | j  |  | j |  | S(   N(   R   R   R   (   t   in_fpt   in_offt   out_fpt   out_offR  t   read_in(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR[    s
    c         C   s>   | t  k r t j   } n t j   } | j |   | j   S(   N(   R  t   hashlibt   sha256t   sha1t   updatet   digest(   t   in_bufR`  t   m(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRW    s
    c         C   s   | } | } | | } | | } | t  d @}	 | t k rM t d t  }
 n t d t  }
 t |
 _ t  |
 _ | |
 _	 | | t  |	 |
 _
 | | |
 _ t |
 _ t |   |
 _ |
 j |
 _ |
 |	 | | g S(   Ni   RM  (   R  R  Rs   R  Rf   R  Rz  Rn   Ro   Ri   Rm   Rl   RQ  Rh   R5  Rj   Rk   (   R   t   hash_tbl_sizet   hdr_sizet
   hdr_offsetRi  t   hash_hdr_sizeR~  Ru  Rt  Rs  Rr  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRZ    s"    

				c         C   sD  t  | d  } |  d } |  d } |  d } t d d  g | } t | d <t | d <| d	 k rp t | d
 <n# | d k r t | d
 <n
 t | d
 <t j d |  }	 |	 j	 |   }
 x) t
 | |  D] } | j |
 |   q W|  d d k r| j | | 7_ | } n | j | d
 7_ | } t | | t  | j   | S(   NR   R9  R5  R7  R,  i   i    i   i@   i   i   Rg   R;  (   R   R7  R8  R9  t    AUTODETECT_PAGE_SIZE_MAGIC_NUM64t!   AUTODETECT_PAGE_SIZE_MAGIC_NUM128t   AUTODETECT_PAGE_SIZE_MAGIC_NUMRU   RV   Rc   R   R   R|   R   R   R   (   R>  RC  RJ  RG  t   preamble_fpt   max_size_verifyt   flash_max_paget   flash_min_paget   autodetectpageRF   R   R   t   amount_to_write(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR=  	  s0    





	
c         C   s   |  t  @t ?S(   N(   t   MI_PBT_FLAG_SEGMENT_TYPE_MASKt   MI_PBT_FLAG_SEGMENT_TYPE_SHIFT(   t   x(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   0	  s    c         C   s   |  t  @t ?S(   N(   t   MI_PBT_FLAG_PAGE_MODE_MASKt   MI_PBT_FLAG_PAGE_MODE_SHIFT(   Rt  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRS  3	  s    c         C   s   |  t  @t ?S(   N(   t   MI_PBT_FLAG_ACCESS_TYPE_MASKt   MI_PBT_FLAG_ACCESS_TYPE_SHIFT(   Rt  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   MI_PBT_ACCESS_TYPE_VALUE6	  s    c         C   s4   t  |   t k o3 t |   t k o3 t |   t k S(   N(   R   R   Ry  t   MI_PBT_NOTUSED_SEGMENTt   MI_PBT_SHARED_SEGMENT(   Rt  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyRV  9	  s    c         C   s8   y t  |  |  } Wn t k
 r3 t d |   n X| S(   Ns   The file could not be opened: (   R   t   IOErrorR   (   t	   file_namet   modeR   (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   B	  s
    c         C   sY  t  | d  } | j   } t |  } | j   | t k rA d  St j |  t  | d  } x| t k r.| d t !} | t | !} t t	 t
   } t t | d d !d   t t | d d !d   t t | d d !d   t t | d	 d !d   } t t	 t   }	 t t |	 d d !d   t t |	 d d !d   t t |	 d d !d   t t |	 d	 d !d   }
 t t	 t   } t t | d d !d   t t | d d !d   t t | d d !d   t t | d	 d !d   } | | |
 | } | j |  | } t |  } q` W| d k rK| j |  n  | j   d  S(
   NR   R  i    i   i
   i   i   i   i   (   R   R   R   R   t   VIRTUAL_BLOCK_SIZER   R   t   removeRw   RU  R8  R   R7  R9  t   SBL_VIRTUAL_BLOCK_MAGIC_NUMR   (   R   R   R  t   filedatat   lengtht   filedata_till_128kbt   filedata_after_128kbt   at   mc1R  t   mc2t   ct   mc3t   MC_inserted_data(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyR   N	  s0    
jjjc         C   s   t  | d  } | j   } t |  } | j   t  | d  } xM | t k r | d t !} | t t | !} | j |  | } t |  } qC W| d k r | j |  n  | j   d  S(   NR   R  i    (   R   R   R   R   R  t   MAGIC_COOKIE_LENGTHR   (   R   R   t   destR  R  R  R  R  (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   remove_SBL1_magicCookie{	  s    
c         C   s   t  | d  } | j   } t |  } | j   d } | | }	 | |	 k r |	 d k r d d  l }
 |
 j | t |	   } n  t | | |	  } | | k  r t  | d  } t | | | t	  | j   n  d  S(   NR   i   i    iR  (
   R   R   R   R   t   matht   ceilt   floatt   maxR   t
   PAD_BYTE_0(   R   R   t   min_size_with_padR  RG  R  R  R  t   multiplet	   alignmentR  t   final_image_sizet   sbl1_fp(    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   pad_SBL1_image	  s    

i   i   (    (    (    (    (    (    (    (    (    (    (   t   statR  R  RU   R   R   R^  R   R  R4  RA  R6  R:  R   R   Rz   RP  R  R  R  t   MIN_IMAGE_SIZE_WITH_PADR;  R<  R8  t    UNIFIED_BOOT_COOKIE_MAGIC_NUMBERR9  Rk  Ri  Rj  R  RM  R  R  R  R  RT  RU  RV  RW  R  R  R	  R
  RO  R  R  RX  R  R  R  R  R  R  R  R  R  R  R  R  R$  R  R  RQ  R   t   DYNAMIC_TYPEt   INTERP_TYPEt	   NOTE_TYPEt
   SHLIB_TYPERY  t   TLS_TYPER  RN  Rr  Rs  Ru  Rv  Rw  Rx  t   MI_PBT_FLAG_POOL_INDEX_MASKt   MI_PBT_FLAG_POOL_INDEX_SHIFTt   MI_PBT_L4_SEGMENTt   MI_PBT_AMSS_SEGMENTR   t   MI_PBT_BOOT_SEGMENTt   MI_PBT_L4BSP_SEGMENTRP  t   MI_PBT_SWAP_POOL_SEGMENTt   MI_PBT_PHDR_SEGMENTRX  RT  t   MI_PBT_RW_SEGMENTt   MI_PBT_RO_SEGMENTt   MI_PBT_ZI_SEGMENTRz  R{  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  Rz  R  RR  R  R  R  R  R  R  R  R   R   R   R   R   R   R   R   R   R   R   R   R    R'   R%   R#   R$   R&   R   R   R(   R?  RD   RW   Rf   Rq   Rs   Ru   Rx   R   R   R   R   R   R   R   R   R  R#  R%  R   R   R  R   R   R  R   R   R   R   R  R  R   R  R   R   R  R   R  R   RO  R5  RN  R[  RW  RZ  R=  R   RS  Ry  RV  R   R   R  R  (    (    (    s   /local/mnt/workspace/CRMBuilds/BOOT.XF.3.3.1-00042-SAIPANLAZ-1_20200710_161241/b/boot_images/QcomPkg/Tools/XBLConfig/elf_gen_tools.pyt   <module>   s  #1&1'	K@		,			/		cRh	+	*	9	J	6	{	4	c					3	h		+	)					-							-	"