�
��Xc@s�ddlZddlZddlZddlZddlZddlZddlZddl Z
defd��YZd�Z
d�Zd�ZdS(i����NtBundleManifestcBsPeZdd�Zedd��Zedd��Zed�Zed�Z RS(cCs�tj|jj�|_|dk r3||j_nd|_d|_d|_ i|_
g|_d|_d|_
d|_d|_d|_d|_d|_d|_d|_d|_g|_dS(N(tloggingt getLoggert __class__t__name__tlogtNonetlevelt
image_archt kernel_idt
ramdisk_idtblock_device_mappingst
product_codest
image_namet
account_idt
image_typetimage_digesttimage_digest_algorithmt
image_sizetbundled_image_sizetenc_keytenc_ivt
enc_algorithmtimage_parts(tselftloglevel((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt__init__'s& cCs)t|��}|j||�SWdQXdS(N(topentread_from_fileobj(tclstmanifest_filenametprivkey_filenametmanifest_fileobj((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pytread_from_file<sc
Cs�tjj|�j�}|�}|j}|jjj�|_t |d�rf|j
jj�|_
nt |d�r�|jjj�|_nt |d�r�xQ|jj
dd�D]7}|jjj�}|jjj�}||j|<q�Wnt |d�r;x9|jj
dd�D]} |jj| jj��qWn|jjjj�|_|jjjj�|_|jjjj�|_|jjjj�|_|jjjd�|_t|jjjj��|_ t|jj!jj��|_"|dk r�y%t$|jj%jj�|�|_&Wn8t't(fk
rZt$|jj)jj�|�|_&nX|jj%jd�|_*y%t$|jj+jj�|�|_,Wq�t't(fk
r�t$|jj-jj�|�|_,q�Xndgt|jj.jd ��|_/xx|jj.j
dd
�D]^}
t|
jd��}t0j1j2|
j3jj�|
jjj�|
jjd��|j/|<qWxAt4|j/�D]0\}}|dkr�t(dj5|���q�q�W|S(
NR R
Rttagtblock_device_mappingtproductcodestproduct_codet algorithmtcounttparttindexspart {0} must not be None(6tlxmlt objectifytparsetgetroottmachine_configurationtarchitecturettexttstripRthasattrR R
RtitertdevicetvirtualR$RtappendtimagetnameR
tuserRttypeRtdigestRtgetRtinttsizeRtbundled_sizeRRt_decrypt_hextuser_encrypted_keyRtAttributeErrort
ValueErrortec2_encrypted_keyRtuser_encrypted_ivRtec2_encrypted_ivtpartsRt euca2oolstbundlet
BundleParttfilenamet enumeratetformat(
RR Rtxmltmanifesttmconfigtxml_mappingR4R5t xml_pcodetxml_partR)R(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRAsd
""%% cCso|jdkrtd��n|jdkr<td��ntjjj|�}|jj d|�|jj
d|�|jj
d|�|jj
d|�tjj
d�}d|_d|_d |j_tj|j_d
|j_d|_|j}|j|_|jdkr�|jr�d|_xZt|jj��D]@\}} tjj
d�}
||
_| |
_|jj|
�q=Wn|jr�d|_xF|jD]8}tjj
d
�}|jj|�||jjd<q�Wq�n|j r�|j |_ n|j!r|j!|_!nd|_"|j#|j"_|j$|j"_%|j|j"_&|j'|j"_(|j"j(j)d|j*�|j+|j"_,|j-|j"_.t/|j|�|j"_0|j"j0j)d|j1�|r�t/|j|�|j"_2nd|j"_2|j"j2j)d|j1�t/|j|�|j"_3|r>t/|j|�|j"_4nd|j"_4d|j"_5|j"j5j)dt6t7|j8���x�t9|j8�D]�\}
}|dkr�tdj:|
���ntjj
d�}|j)dt6|
��t;j<j=|j>�|_>|j?|_(|j(j)d|j@�|j"j5j|�q�WtjjA|dtB�tjCjD|�|r�tjCjE|j�tjCjE|j"�}tF||�}nd}||_G|jj
d|�tjjA|dtB�tjCjD|�|jj
dditBd6�tjCjE|dtB�jH�}|jj
d|ditBd6�|jj
d�tjCjE|dtBd|�jH�S(Nsenc_key must not be Nonesenc_iv must not be Nones5creating manifest for EC2 service with fingerprint %ssEC2 certificate: %ssuser certificate: %ssuser private key: %sROs
2007-10-10RHitmachinetmappingR%i����R&R'spart {0} must not be NoneR(R)txsi_niltUNSIGNEDshex-encoded signature: %ss-- manifest content --
textraR6tpretty_prints%ss-- end of manifest content --txml_declaration(IRRRCRRHRItutiltget_cert_fingerprintRtinfotdebugR*R+tElementtversiontbundlerR8t__version__treleaseR.RR/RRR#tsortedtitemsR5R4R6RR%R R
R7R
RR9R:RR;tsetRRR>RR?t_public_encryptRDRRARFRERGtstrtlenRRLRMtostpathtbasenameRKt hexdigesttdigest_algorithmt
deannotatetTruetetreetcleanup_namespacesttostringt_rsa_sha1_signt signatureR1(RRtuser_cert_filenametec2_cert_filenameRYtec2_fpRNRPR5R4RQtcodetxml_codeR)R(t part_elemtto_signRutpretty_manifest((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pytdump_to_strws� % cCs&|j|j|||d|��dS(NRY(twriteR~(Rt
manifest_fileRRvRwRY((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pytdump_to_filesN(
Rt
__module__RRtclassmethodR!RtFalseR~R�(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyR&s6�cCs�tjddddd|gdtjdtj�}tj|�}|j|�\}}yt|d�|SWntk
rnXtd ��dS(
Ntopenssltrsautls-decrypts-pkcss-inkeytstdintstdoutisjFailed to decrypt the bundle's encryption key. Ensure the key supplied matches the one used for bundling.(t
subprocesstPopentPIPEtbinasciit unhexlifytcommunicateR=RC(thex_encrypted_keyRtpopentbinary_encrypted_keyt
decrypted_keyt_((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyR@s
cCsXtjddddd|dgdtjdtj�}|j|�\}}tj|�S( NR�R�s-encrypts-pkcss-inkeys-certinR�R�(R�R�R�R�R�thexlify(tcontentt
cert_filenameR�R�R�((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRgs
cCswtj�}|j|�tjdddd|ddgdtjdtj�}|j|j��\}}tj |�S( NR�tpkeyutls-signs-inkeys-pkeyoptsdigest:sha1R�R�(
thashlibtsha1tupdateR�R�R�R�R;R�R�(R�RR;R�R�R�((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRt"s
(R�R�Rtos.pathRjR�t
lxml.etreeR*tlxml.objectifyteuca2ools.bundleRHtobjectRR@RgRt(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt<module>s� |