Xc@sddlZddlZddlZddlZddlZddlZddlZddl Z de fdYZ dZ dZdZdS(iNtBundleManifestcBsPeZddZeddZeddZedZedZ RS(cCstj|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_typet image_digesttimage_digest_algorithmt image_sizetbundled_image_sizetenc_keytenc_ivt enc_algorithmt image_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 Cstjj|j}|}|j}|jjj|_t |drf|j jj|_ nt |dr|j jj|_ nt |drxQ|j j ddD]7}|jjj}|jjj}||j ||j?|_?|j@|_)|j)j+d|jA|j#j6j|qrWt j jB|dtCt jDjE||rt jDjF|jt jDjF|j#}tG||}nd}||_H|jj d|t j jB|dtCt jDjE||jj dditCd6t jDjF|dtCjI}|jj d|ditCd6|jj dt jDjF|dtCd|jIS(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%iR&R'spart {0} must not be NoneR(R)txsi_niltUNSIGNEDshex-encoded signature: %ss-- manifest content -- textraR6t pretty_prints%ss-- end of manifest content --txml_declaration(JRRRCRRHRItutiltget_cert_fingerprintRtinfotdebugR*R+tElementtversiontbundlerR8t __version__treleaseR.RtAssertionErrorR/RR R#tsortedtitemsR5R4R6R R%R R R7R RR9R:RR;RtsetRR>RR?Rt_public_encryptRDRARFRERGtstrtlenRRLRMtostpathtbasenameRKt hexdigesttdigest_algorithmt deannotatetTruetetreetcleanup_namespacesttostringt_rsa_sha1_signt signatureR1(RRtuser_cert_filenametec2_cert_filenameRYtec2_fpRNRPR5R4RQtcodetxml_codeR)R(t part_elemtto_signRvtpretty_manifest((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt dump_to_strws                        %    cCs&|j|j|||d|dS(NRY(twriteR(Rt manifest_fileRRwRxRY((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt dump_to_files  N( Rt __module__RRt classmethodR!RtFalseRR(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyR&s 6 cCstjddddd|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 unhexlifyt communicateR=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( NRRs-encrypts-pkcss-inkeys-certinRR(RRRRRthexlify(tcontentt cert_filenameRRR((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRhs cCswtj}|j|tjdddd|ddgdtjdtj}|j|j\}}tj |S( NRtpkeyutls-signs-inkeys-pkeyopts digest:sha1RR( thashlibtsha1tupdateRRRRR;RR(RRR;RRR((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRu"s  (RRRtos.pathRkRt lxml.etreeR*tlxml.objectifyteuca2ools.bundleRHtobjectRR@RhRu(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyts