Ñò Ã#xPc@sdZddkZddkZddkZddklZlZdgZeidƒZ eidƒZ de fd„ƒYZ dS(s SSH utilities. iÿÿÿÿN(tmd5tsha1t SSHPublicKeysj^[\t ]*(?P[^\x00\n\r]+?) [\t ]*(?P[^\x00\n\r]+?)(?:[\t ]+(?P[^\x00\n\r]*?)[\t ]*)?$s?(?P[-0-9A-Za-z]+)(?:="(?P(?:\\"|[^\x00\n\r"])*)")?cBs‰eZdZdZdddd„Zd„Zd„Zd „Zd „Z d „Z d „Z d „Z d„Z d„Zd„Zd„ZRS(s SSH public key object. t_keyt_keytypet_commentt_optionssutf-8cCs*t|tƒo5|i|_|i|_|i|_|i|_dSt|ttfƒptdt |ƒi ƒ‚nt|tƒo$|d djo|i |ƒ}n|i |ƒp|i |ƒp |i|ƒ}|ptdƒ‚n|dj o ||_n|dj o ||_ndS(Ns'argument must be str or unicode, got %sitsnot a valid SSH public key(t isinstanceRRRRRtstrtunicodet TypeErrorttypet__name__tdecodet _parse_rawt _parse_base64t_parse_openssht ValueErrortNone(tselftkeytcommenttoptionstencodingtvalid((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyt__init__+s"    !/   c CsÒt|tƒptSytid|d ƒ\}Wntij otSX|djp|t|ƒdjotSy|d|d!idƒ}Wntj otSX||_ ||_ h|_ d|_ tS(Ns>Iiitascii(RR tFalsetstructtunpackterrortlenRtUnicodeDecodeErrorRRRRRtTrue(RRtktlentkeytype((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyRDs"$    cCsLt|tƒptSyti|ƒ}Wntj otSX|i|ƒS(N(RR Rtbase64t b64decodeR R(RR((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyR\scCsmti|ƒ}|ptS|i|idƒƒptS|i|idƒjotS|idƒ|_tS(NRR$R(tOPENSSH_BASE_REGEXtmatchRRtgroupRRR"(RRR(((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyt_parse_openssh_without_optionsgscCsì|idƒ}h}x²toªti|ƒ}|ptS|idƒiƒ}|idƒ}|o|iddƒ}n|||<|t|idƒƒ}|d |d}}|djoPqqW|i |ƒptS||_ tS( Ns tnametvalues\"t"iit,( tlstripR"tOPENSSH_OPTIONS_REGEXR(RR)tlowertreplaceR R*R(RRRR(R+R,tkey0((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyt_parse_openssh_with_optionsvs(    cCs;t|tƒptS|i|ƒotS|i|ƒSdS(N(RR RR*R"R4(RR((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyR“s cCs|iS(N(R(R((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyR$œscCs|iS(N(R(R((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyRŸscCs t|iƒS(N(tboolR(R((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyt has_options¢scCsåd|iti|iƒf}|io—g}xkt|iƒD]Z}|i|}|djo|i|ƒq?|iddƒ}|id||fƒq?Wdi |ƒ}d||f}n|i od||i f}n|S(Nu%s %sR-s\"u%s="%s"u,( RR%t b64encodeRRtsortedRtappendR2tjoinR(RtoutRR+R,((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pytopenssh¥s    cCsft|iƒiƒiƒ}dig}tdt|ƒdƒD]}||||d!q>~ƒ}|S(Nu:ii(RRt hexdigesttupperR:trangeR (Rtfpt_[1]tj((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pytfingerprint_hex_md5ºsGcCsa|idjo d}n|idjo d}ndSt|iƒiƒiƒ}d||fS(Nsssh-rsaisssh-dssiu%d 1 %s(RRRR=R>(RR$R@((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pytfingerprint_dns_sha1¿s  (s_keys_keytypes_comments_optionsN(R t __module__t__doc__t __slots__RRRRR*R4RR$RR6R<RCRD(((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyR$s        ( RFR%treRtipapython.compatRRt__all__tcompileR'R0tobjectR(((s1/usr/lib/python2.6/site-packages/ipapython/ssh.pyts