a ‚oel2ã@sddlmZddlZddlZddlZddlmZmZddlm Z dZ dZ e  d¡Z Gd d „d eƒZGd d „d eƒZGd d„deƒZGdd„deƒZeedœdd„Zeeedœdd„Zeedœdd„Zeedœdd„Zeeefedœdd„Zeeefeedœd d!„ZdBeeed#œd$d%„Zeedœd&d'„Zeedœd(d)„Zeddœd*d+„Z eeed,œd-d.„Z!dCeeeed/œd0d1„Z"eeee#fddœd2d3„Z$eedœd4d5„Z%eeee#fedœd6d7„Z&dDeeeed9œd:d;„Z'dEeeee#feeeeed<œd=d>„Z(dFeeee#feeeed?œd@dA„Z)dS)Gé)ÚidnadataéN)ÚUnionÚOptional)Úintranges_containé sxn--u [.。.。]c@seZdZdZdS)Ú IDNAErrorz7 Base exception for all IDNA-encoding related problems N©Ú__name__Ú __module__Ú __qualname__Ú__doc__©rrú*C:\Program Files\Certbot\pkgs\idna\core.pyr src@seZdZdZdS)Ú IDNABidiErrorz= Exception when bidirectional requirements are not satisfied Nr rrrrrsrc@seZdZdZdS)ÚInvalidCodepointz> Exception when a disallowed or unallocated codepoint is used Nr rrrrrsrc@seZdZdZdS)ÚInvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used Nr rrrrrsr)ÚcpÚreturncCs0t t|ƒ¡}|dkr,t t|ƒ¡s,tdƒ‚|S)Nrz Unknown character in unicodedata)Ú unicodedataZ combiningÚchrÚnameÚ ValueError)rÚvrrrÚ_combining_class s r)rÚscriptrcCstt|ƒtj|ƒS)N)rÚordrZscripts)rrrrrÚ _is_script'sr)ÚsrcCs | d¡S)NÚpunycode)Úencode©rrrrÚ _punycode*sr"cCs d |¡S)NzU+{:04X})Úformatr!rrrÚ_unot-sr$)ÚlabelrcCst|ƒdkrdSdS)Né?FT©Úlen©r%rrrÚvalid_label_length1s r*)r%Ú trailing_dotrcCst|ƒ|rdndkrdSdS)NéþéýFTr')r%r+rrrÚvalid_string_length7sr.F)r%Ú check_ltrrc Cs^d}t|dƒD]:\}}t |¡}|dkrd}q¤|dkr¤d}q¤|�sZtdƒ‚dS)NFrÚz1Unknown directionality in label {} at position {})ÚRÚALÚANTr)r1r2ÚLz=First codepoint in label {} must be directionality L, R or AL) r1r2r3ÚENÚESÚCSÚETÚONÚBNÚNSMzGInvalid direction for codepoint at position {} in a right-to-left label)r1r2r5r3r;)r3r5z2Can not mix numeral types in a right-to-left label)r4r5r6r7r8r9r:r;zGInvalid direction for codepoint at position {} in a left-to-right label)r4r5z0Label ends with illegal codepoint directionality)Ú enumeraterZ bidirectionalrr#Úrepr) r%r/Z bidi_labelÚidxrÚ directionZrtlZ valid_endingZ number_typerrrÚ check_bidi=sP       r@cCs"t |d¡ddkrtdƒ‚dS)NrÚMz0Label begins with an illegal combining characterT)rÚcategoryrr)rrrÚcheck_initial_combinerxsrCcCs<|dd…dkrtdƒ‚|ddks0|ddkr8tdƒ‚d S) Nééz--z4Label has disallowed hyphens in 3rd and 4th positionrú-éÿÿÿÿz)Label must not start or end with a hyphenT)rr)rrrÚcheck_hyphen_ok~s rHcCst d|¡|krtdƒ‚dS)NÚNFCz%Label must be in Normalization Form C)rÚ normalizerr)rrrÚ check_nfc†srK)r%ÚposrcCs4t||ƒ}|dkrö|dkr8tt||dƒƒtkr8dSd}t|dddƒD]B}tj t||ƒ¡}|tdƒkrrqL|tdƒtd ƒfvrLd}q�qL|s˜dSd}t|dt|ƒƒD]B}tj t||ƒ¡}|tdƒkrÔq®|td ƒtd ƒfvr®d}qòq®|S|d k�r,|dk�r(tt||dƒƒtk�r(dSdSdSdS) Ni rrTFrGÚTr4ÚDr1i )rrÚ_virama_combining_classÚrangerZ joining_typesÚgetr()r%rLÚcp_valueÚokÚiZ joining_typerrrÚvalid_contextj‹s<     rU)r%rLÚ exceptionrcCs¾t||ƒ}|dkrdd|kr0t|ƒdkr`nn,t||dƒdkr`t||dƒdkr`dSdS|dkrž|t|ƒdkršt|ƒdkršt||ddƒSdS|d ks®|d krÌ|dkrÈt||dd ƒSdS|d k�r|D]6}|d krèqÚt|dƒ�s t|dƒ�s t|dƒrÚdSqÚdSd|k�r.dk�rhnn6|D],}dt|ƒk�rVdk�r6nndS�q6dSd|k�r€dk�rºnn6|D],}dt|ƒk�r¨dk�rˆnndS�qˆdSdS)Né·rrélTFiuZGreekióiôZHebrewiû0u・ZHiraganaZKatakanaZHani`iiiðiù)rr(r)r%rLrVrRrrrrÚvalid_contexto¶s@  ( "    rYc CsJt|ttfƒr| d¡}t|ƒdkr,tdƒ‚t|ƒt|ƒt|ƒt |ƒD]ð\}}t |ƒ}t |t j dƒrpqLqLt |t j dƒràz,t||ƒsªtd t|ƒ|dt|ƒ¡ƒ‚Wn0tyÜtd t|ƒ|dt|ƒ¡ƒ‚Yn0qLt |t j d ƒ�rt||ƒ�sz| d¡}WqBty:t|ƒ|YS0n|}| ¡}| t¡rŒ|t tƒd…}|spt dƒ‚|  d¡ddkržt dƒ‚nt|ƒ|  d¡Sz|  d¡}Wnt yÆt dƒ‚Yn0t|ƒ|S)Nr`z5Malformed A-label, no Punycode eligible content foundrGrFz"A-label must not end with a hyphenrzInvalid A-label) r[r\r]r rbr_ÚlowerÚ startswithrdr(rr^Ú UnicodeErrorrerrrras,      raT)ÚdomainÚ std3_rulesÚ transitionalrc Cs$ddlm}d}t|ƒD]þ\}}t|ƒ}zº||dkr8|nt ||df¡d}|d} d} t|ƒdkrn|d} | d ks–| d kr‚|r–| d kr |s | dur ||7}n@| durÒ| d ksÈ| d kr¼|rÈ| d krÒ|rÒ|| 7}n| d kràtƒ‚Wqt�ytd t |ƒ|dt |ƒ¡ƒ‚Yq0qt   d|¡S)zBRe-map the characters in the string according to UTS46 processing.r)Ú uts46datar0éÚZNérDÚVrNÚ3rAÚIrZrI) rmr<rÚbisectZ bisect_leftr(Ú IndexErrorrr#r$r=rrJ) rjrkrlrmÚoutputrLÚcharZ code_pointZuts46rowÚstatusZ replacementrrrÚ uts46_remap4sV ÿ ÿÿþþþ ÿÿþþ  ÿÿ ry)rÚstrictÚuts46rkrlrc Csêt|tƒs4zt|dƒ}Wnty2tdƒ‚Yn0|rDt|||ƒ}d}g}|r\| d¡}n t |¡}|rt|dgkr|tdƒ‚|ddkr’|d=d}|D]$}t|ƒ}|r²| |¡q–td ƒ‚q–|rÊ| d ¡d   |¡}t ||ƒsætd ƒ‚|S) Nr`zGshould pass a unicode string to the function rather than a byte string.FÚ.r0ú Empty domainrGTú Empty labelóó.zDomain too long) r[rcÚUnicodeDecodeErrorrryÚsplitÚ_unicode_dots_rerfÚappendÚjoinr.) rrzr{rkrlr+ÚresultÚlabelsr%rrrr Ts8           r )rrzr{rkrcCsÐzt|tƒst|dƒ}Wnty2tdƒ‚Yn0|rDt||dƒ}d}g}|s\t |¡}n | d¡}|rt|dgkr|tdƒ‚|dsŽ|d=d}|D]$}t|ƒ}|r®| |¡q’td ƒ‚q’|rÆ| d¡d  |¡S) Nr`zInvalid ASCII in A-labelFr|r0r}rGTr~) r[rcr�rryrƒr‚rar„r…)rrzr{rkr+r†r‡r%rrrr^us2        r^)F)F)TF)FFFF)FFF)*r0rrtrÚreÚtypingrrZ intrangesrrOrdÚcompilerƒrirrrrÚintrrcÚboolrr\r"r$r*r.r@rCrHrKrUrYr]r_rfraryr r^rrrrÚs<   ;+* $!