3 \O@sddlZddlZddlZdddddddd d d d d ddddddgZeefZddZdBddZdCddZ ddZ ddZ ej ddZ ej ddZddZddZdZdadad dZdDd!d Zd"d ZdEd#d Zdadad$Zd%ZdFd&d'Zddddd(d)dZddd*d+d,dZd-Zda da!da"dGd.d Z#d/d Z$d0Z%e%d1d2Z&d3dZ'd4dZ(d5d6Z)d7dZ*d8d9Z+d:dZ,d;d<Z-d=d>Z.d?d@Z/e0dAkre.dS)HNencodedecode encodebytes decodebytes b64encode b64decode b32encode b32decode b16encode b16decode b85encode b85decode a85encode a85decodestandard_b64encodestandard_b64decodeurlsafe_b64encodeurlsafe_b64decodecCsxt|tr2y |jdStk r0tdYnXt|tr@|Sy t|jStk rrtd|j j dYnXdS)Nasciiz4string argument should contain only ASCII charactersz>argument should be a bytes-like object or ASCII string, not %r) isinstancestrrUnicodeEncodeError ValueError bytes_types memoryviewtobytes TypeError __class____name__)sr /usr/lib64/python3.6/base64.py_bytes_from_decode_data"s    r"cCs,tj|dd}|dk r(|jtjd|S|S)NF)newlines+/)binascii b2a_base64 translatebytes maketrans)raltcharsencodedr r r!r3sFcCsPt|}|dk r*t|}|jtj|d}|rFtjd| rFtjdtj|S)Ns+/s^[A-Za-z0-9+/]*={0,2}$zNon-base64 digit found) r"r&r'r(rematchr$Error a2b_base64)rr)Zvalidater r r!rAs cCst|S)N)r)rr r r!rZscCst|S)N)r)rr r r!rass+/s-_cCst|jtS)N)rr&_urlsafe_encode_translation)rr r r!roscCst|}|jt}t|S)N)r"r&_urlsafe_decode_translationr)rr r r!rxs  s ABCDEFGHIJKLMNOPQRSTUVWXYZ234567csBtdkr,ddtDfddDadt|tsBt|j}t|d}|rb|dd|}t}tj }t}xjt dt|dD]V}||||dd}|||d?||d ?d @||d ?d @||d @7}qW|d krd |dd<nF|dkr d|dd<n.|dkr$d|dd<n|dkr:d|dd<t |S)NcSsg|]}t|fqSr )r').0ir r r! szb32encode..csg|]}D] }||q qSr r )r1ab)b32tabr r!r3srbigi s======s====s====i) _b32tab2 _b32alphabetrrrrlen bytearrayint from_bytesranger')rleftoverr*rKZb32tab2r2cr )r6r!rs4   *    c CstdkrddttDat|}t|dr8tjd|dk r^t|}|jtj dd|}|rj|j }t|}|j d}|t|}t }t}xt dt|dD]l}|||d}d} y"x|D]} | d >|| } qWWn tk rtjd dYnX|| jd d 7}qW|ds(|dkr2tjd|rz|rz| d |K} | jd d } dd |d} | d| |dd<t|S)NcSsi|]\}}||qSr r )r1kvr r r! szb32decode..zIncorrect paddings01OrBrr7zNon-base32 digit foundr9r=rAr@r>+>rr=rAr@r>)_b32rev enumeraterGr"rHr$r-r&r'r(upperrstriprIrLKeyErrorto_bytes) rcasefoldZmap01lZpadcharsdecodedZb32revr2ZquantaaccrNZlastrMr r r!r s@         cCstj|jS)N)r$ZhexlifyrX)rr r r!r scCs4t|}|r|j}tjd|r*tjdtj|S)Ns [^0-9A-F]zNon-base16 digit found)r"rXr+searchr$r-Z unhexlify)rr\r r r!r s   s<~s~>c st|tst|j}t| d}|r4|d|}tjdt|dj|}fdd|D}|r| r|d dkrdd |d <|d d| |d<d j|S)Nr@r8z!%dIcsRg|]J}r| rdn6r&|dkr&dn&|d|dd|dqS)zi yi^ Ui9r )r1Zword)charschars2foldnuls foldspacesr r!r3!sz_85encode..r=rarr7rErErErE) rrrrrHstructStructZunpackjoin) r5rdrepadrfrgpaddingZwordschunksr )rdrerfrgr! _85encodes     ro)rgwrapcolrladobecstdkr*ddtddDaddtDat|tt|d||rHtrt|rVdndfd dtd tD}|rt|d dkr|jd d j||rt 7S)NcSsg|]}t|fqSr )r')r1r2r r r!r3Dsza85encode..!vcSsg|]}tD] }||q qSr ) _a85chars)r1r4r5r r r!r3EsTr?r=csg|]}||qSr r )r1r2)resultrpr r!r3Msrrh rE) rtrL _a85chars2ro _A85STARTmaxrHappendrk_A85END)r5rgrprlrqrnr )rurpr!r/s"   s )rgrq ignorecharsc Cst|}|rH|jts$tdjt|jtr<|dd}n |dd}tjdj }g}|j }g}|j }|j } x|dD]} d| kodknr|| t |dkrrd} x|D]} d | | d } qWy||| Wn"tj k rtd dYnX| qz| dkr0|r&td |dqz|rX| dkrX|rNtd|dqz| |krfqzqztd| qzWdj|} dt |} | r| d| } | S)Nz1Ascii85 encoded byte sequences must end with {!r}r?z!Iur@!rr7rcrrzAscii85 overflowrazz inside Ascii85 5-tuplesrbzy inside Ascii85 5-tuples zNon-Ascii85 digit found: %crhrsuuuurruzy)r"endswithr{rformat startswithrxrirjpackrzclearrHerrorrk)r5rgrqr|packIr^Zdecoded_appendZcurrZ curr_appendZ curr_clearxr_rurmr r r!rXsV           sU0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~cCs2tdkr$ddtDaddtDat|tt|S)NcSsg|]}t|fqSr )r')r1r2r r r!r3szb85encode..cSsg|]}tD] }||q qSr ) _b85chars)r1r4r5r r r!r3s)r _b85alphabet _b85chars2ro)r5rlr r r!r s c CsZtdkr0dgdaxttD]\}}|t|<qWt|}t| d}|d|}g}tjdj}xtdt|dD]}|||d}d}y"x|D]}|dt|}qWWnJt k rx2t|D]&\}}t|dkrt d||dqWYnXy|j ||Wqttj k r2t d|dYqtXqtWd j |} |rV| d| } | S) Nr7~z!Irrcz#bad base85 character at position %dz+base85 overflow in hunk starting at byte %drh)_b85decrWrr"rHrirjrrLrrrzrrk) r5r2rNrmoutrchunkr_jrur r r!r s<       Lr@rAcCs`xZ|jt}|sPx0t|tkrB|jtt|}|s8P||7}qWtj|}|j|qWdS)N)read MAXBINSIZErHr$r%write)inputoutputrnsliner r r!rs   cCs,x&|j}|sPtj|}|j|qWdS)N)readliner$r.r)rrrrr r r!rs  cCsy t|}Wn8tk rD}zd|jj}t||WYdd}~XnX|jdkrjd|j|jjf}t||jdkrd|j|jjf}t|dS) Nz"expected bytes-like object, not %srNr5Bz-expected single byte elements, not %r from %sr=z(expected 1-D data, not %d-D data from %s)rNr5r)rrrrrndim)rmerrmsgr r r!_input_type_checks    rcCsPt|g}x8tdt|tD]$}|||t}|jtj|qWdj|S)Nrrh)rrLrHrrzr$r%rk)rpiecesr2rr r r!r s cCsddl}|jdtdt|S)NrzAencodestring() is a deprecated alias since 3.1, use encodebytes()r?)warningswarnDeprecationWarningr)rrr r r! encodestringsrcCst|tj|S)N)rr$r.)rr r r!rscCsddl}|jdtdt|S)NrzHdecodestring() is a deprecated alias since Python 3.1, use decodebytes()r?)rrrr)rrr r r! decodestring$src Csddl}ddl}y|j|jddd\}}WnP|jk r~}z2|j|_t|td|jd|jdWYdd}~XnXt}xF|D]>\}}|dkrt}|dkrt }|dkrt }|d krt dSqW|o|dd krt |dd }|||jj WdQRXn||j j |jj dS) Nrr=Zdeutzusage: %s [-d|-e|-u|-t] [file|-] -d, -u: decode -e: encode (default) -t: encode and decode string 'Aladdin:open sesame'r?z-ez-dz-uz-t-rb)sysgetoptargvrstderrstdoutprintexitrrtestopenbufferstdin) rrZoptsargsrfuncor4fr r r!main.s0rcCs<d}tt|t|}tt|t|}tt|dS)NsAladdin:open sesame)rreprrr)Zs0s1s2r r r!rHs   r__main__)N)NF)FN)F)FFF)F)1r+rir$__all__r'rIrr"rrrrr(r/r0rrrGrFrVrr r r rtrwrxr{rorrrrrrr r Z MAXLINESIZErrrrrrrrrrrr r r r! sf     & C  )H -