�`^c@s�dZddlZddlZddlZddddddd d
ddd
dddgZged�D]Zee�^qgZdZ d�Z
dd�Zdd�Z
d�Zd�Zd�Zd�Zi dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6Zej�Zej�geD]\ZZe^q�Zegej�D]\ZZeee�f^q�ZdZ�Zedd[�Zd\�Zed]�Zd^Z e d;d3Z!d_�Z"d`�Z#da�Z$db�Z%dc�Z&dd�Z'e(dekr�e&�ndS(fs/RFC 3548: Base16, Base32, Base64 Data Encodingsi�Ntencodetdecodetencodestringtdecodestringt b64encodet b64decodet b32encodet b32decodet b16encodet b16decodetstandard_b64encodetstandard_b64decodeturlsafe_b64encodeturlsafe_b64decodeitcCsJt}x*|j�D]\}}||t|�<qW|jdj|��S(NR(t_translationtitemstordt translatetjoin(tstaltcharsttranslationtktv((s/sys/lib/python2.7/base64.pyt
_translate scCsFtj|�d }|dk rBt|i|dd6|dd6�S|S(slEncode a string using Base64.
s is the string to encode. Optional altchars must be a string of at least
length 2 (additional characters are ignored) which specifies an
alternative alphabet for the '+' and '/' characters. This allows an
application to e.g. generate url or filesystem safe Base64 strings.
The encoded string is returned.
i�it+it/N(tbinasciit
b2a_base64tNoneR(RRtencoded((s/sys/lib/python2.7/base64.pyR*s#cCsn|dk r4t|id|d6d|d6�}nytj|�SWn"tjk
ri}t|��nXdS(s�Decode a Base64 encoded string.
s is the string to decode. Optional altchars must be a string of at least
length 2 (additional characters are ignored) which specifies the
alternative alphabet used instead of the '+' and '/' characters.
The decoded string is returned. A TypeError is raised if s were
incorrectly padded or if there are non-alphabet characters present in the
string.
RiRiN(RRRt
a2b_base64tErrort TypeError(RRtmsg((s/sys/lib/python2.7/base64.pyR;s(cCs
t|�S(syEncode a string using the standard Base64 alphabet.
s is the string to encode. The encoded string is returned.
(R(R((s/sys/lib/python2.7/base64.pyR
OscCs
t|�S(sDecode a string encoded with the standard Base64 alphabet.
s is the string to decode. The decoded string is returned. A TypeError
is raised if the string is incorrectly padded or if there are non-alphabet
characters present in the string.
(R(R((s/sys/lib/python2.7/base64.pyRVscCs
t|d�S(s�Encode a string using a url-safe Base64 alphabet.
s is the string to encode. The encoded string is returned. The alphabet
uses '-' instead of '+' and '_' instead of '/'.
s-_(R(R((s/sys/lib/python2.7/base64.pyR_scCs
t|d�S(sDDecode a string encoded with the standard Base64 alphabet.
s is the string to decode. The decoded string is returned. A TypeError
is raised if the string is incorrectly padded or if there are non-alphabet
characters present in the string.
The alphabet uses '-' instead of '+' and '_' instead of '/'.
s-_(R(R((s/sys/lib/python2.7/base64.pyR
gs tAitJi tSit3itBitKi
tTit4itCitLitUit5itDitMitVit6itEitNi
tWit7itFitOitXitGitPitYitHitQitZitIitRit2ic Cs�g}tt|�d�\}}|rF|dd|7}|d7}nx�t|�D]�}tjd||d|dd!�\}}}||d@d>7}||d@d>7}|jt|d?t|d ?d
@t|d?d
@t|d?t|d?d
@t|d
?d
@t|d?t|d
@g�qSWtj|�}|dkrK|d dS|d
krc|d dS|dkr{|d dS|dkr�|d dS|S(scEncode a string using Base32.
s is the string to encode. The encoded string is returned.
itis!HHBiiiiiiiiii�s======i�s====i�s===ii�t=( tdivmodtlentrangetstructtunpacktextendt_b32tabtEMPTYSTRINGR( Rtpartstquantatleftovertitc1tc2tc3R((s/sys/lib/python2.7/base64.pyR�s6
.c
Cstt|�d�\}}|r0td��n|rVt|idd6|d6�}n|rk|j�}nd}tjd|�}|r�t|jd��}|dkr�|| }q�ng}d}d } x�|D]�}
tj |
�}|dkrtd
��n|t|
| >7}| d8} | dkr�|jtj
d|��d}d } q�q�Wtj
d|�}|dkr�d
}np|dkr�|d }nW|dkr�|d }n>|dkr�|d }n%|dkr�d }ntd��|j|�tj|�S(sGDecode a Base32 encoded string.
s is the string to decode. Optional casefold is a flag specifying whether
a lowercase alphabet is acceptable as input. For security purposes, the
default is False.
RFC 3548 allows for optional mapping of the digit 0 (zero) to the letter O
(oh), and for optional mapping of the digit 1 (one) to either the letter I
(eye) or letter L (el). The optional argument map01 when not None,
specifies which letter the digit 1 should be mapped to (when map01 is not
None, the digit 0 is always mapped to the letter O). For security
purposes the default is None, so that 0 and 1 are not allowed in the
input.
The decoded string is returned. A TypeError is raised if s were
incorrectly padded or if there are non-alphabet characters present in the
string.
isIncorrect paddingR9t0t1is(?P<pad>[=]*)$tpadi#sNon-base32 digit foundis%010xRii�ii�ii�ii�N(RFRGR"Rtuppertretsearchtgroupt_b32revtgetRtappendRt unhexlifyRMR(
Rtcasefoldtmap01RORPtpadcharstmoRNtacctshifttctvaltlast((s/sys/lib/python2.7/base64.pyR�sP
cCstj|�j�S(scEncode a string using Base16.
s is the string to encode. The encoded string is returned.
(RthexlifyRX(R((s/sys/lib/python2.7/base64.pyR�scCsC|r|j�}ntjd|�r6td��ntj|�S(swDecode a Base16 encoded string.
s is the string to decode. Optional casefold is a flag specifying whether
a lowercase alphabet is acceptable as input. For security purposes, the
default is False.
The decoded string is returned. A TypeError is raised if s were
incorrectly padded or if there are non-alphabet characters present in the
string.
s [^0-9A-F]sNon-base16 digit found(RXRYRZR"RR_(RR`((s/sys/lib/python2.7/base64.pyR s
iLcCs�x�tr�|jt�}|s"PnxCt|�tkrg|jtt|��}|sZPn||7}q%Wtj|�}|j|�qWdS(sEncode a file.N(tTruetreadt
MAXBINSIZERGRRtwrite(tinputtoutputRtnstline((s/sys/lib/python2.7/base64.pyRs cCsCx<tr>|j�}|sPntj|�}|j|�qWdS(sDecode a file.N(RjtreadlineRR Rm(RnRoRqR((s/sys/lib/python2.7/base64.pyR,s cCs]g}xGtdt|�t�D]-}|||t!}|jtj|��qWdj|�S(s4Encode a string into multiple lines of base-64 data.iR(RHRGRlR^RRR(RtpiecesRQtchunk((s/sys/lib/python2.7/base64.pyR6s
cCs
tj|�S(sDecode a string.(RR (R((s/sys/lib/python2.7/base64.pyR?sc CsQddl}ddl}y#|j|jdd�\}}WnD|jk
r�}|j|_|GHd|jdGH|jd�nXt}xj|D]b\}}|dkr�t}n|d kr�t}n|d
kr�t}n|dkr�t �dSq�W|r:|ddkr:t
|dd
��}|||j�WdQXn||j|j�dS(sSmall test programi�Nitdeuts�usage: %s [-d|-e|-u|-t] [file|-]
-d, -u: decode
-e: encode (default)
-t: encode and decode string 'Aladdin:open sesame'iis-es-ds-us-tt-trb(tsystgetopttargvterrortstderrtstdouttexitRRttest1topentstdin( RxRytoptstargsR#tfunctotatf((s/sys/lib/python2.7/base64.pyttestFs.# cCs5d}t|�}t|�}|Gt|�G|GHdS(NsAladdin:open sesame(RRtrepr(ts0ts1ts2((s/sys/lib/python2.7/base64.pyR`st__main__()t__doc__RYRIRt__all__RHt_xtchrRRMRRRRR
RRR
t_b32alphabetRRLtsortRRtdicttlongR\RtFalseRRR tMAXLINESIZERlRRRRR�Rt__name__(((s/sys/lib/python2.7/base64.pyt<module>sZ%
7 *J
|