a oel2@sddlmZddlZddlZddlZddlmZmZddlm Z dZ dZ e dZ Gd d d eZGd d d eZGd ddeZGdddeZeedddZeeedddZeedddZeedddZeeefedddZeeefeedd d!ZdBeeed#d$d%Zeedd&d'Zeedd(d)Zeddd*d+Z eeed,d-d.Z!dCeeeed/d0d1Z"eeee#fddd2d3Z$eedd4d5Z%eeee#fedd6d7Z&dDeeeed9d:d;Z'dEeeee#feeeeed<d=d>Z(dFeeee#feeeed?d@dAZ)dS)G)idnadataN)UnionOptional)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)cpreturncCs0tt|}|dkr,tt|s,td|S)Nrz Unknown character in unicodedata) unicodedataZ combiningchrname ValueError)rvrrr_combining_class s r)rscriptrcCstt|tj|S)N)rordrZscripts)rrrrr _is_script'sr)srcCs |dS)Npunycode)encoderrrr _punycode*sr"cCs d|S)NzU+{:04X})formatr!rrr_unot-sr$)labelrcCst|dkrdSdS)N?FTlenr%rrrvalid_label_length1s r*)r% trailing_dotrcCst||rdndkrdSdS)NFTr')r%r+rrrvalid_string_length7sr.F)r% check_ltrrc Cs^d}t|dD]:\}}t|}|dkrd}q|dkrd}q|sZtddS)NFrz1Unknown directionality in label {} at position {})RALANTr)r1r2Lz=First codepoint in label {} must be directionality L, R or AL) r1r2r3ENESCSETONBNNSMzGInvalid 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_labelidxr directionZrtlZ valid_endingZ number_typerrr check_bidi=sP       r@cCs"t|dddkrtddS)NrMz0Label begins with an illegal combining characterT)rcategoryrr)rrrcheck_initial_combinerxsrCcCs<|dddkrtd|ddks0|ddkr8tdd S) Nz--z4Label has disallowed hyphens in 3rd and 4th positionr-z)Label must not start or end with a hyphenT)rr)rrrcheck_hyphen_ok~s rHcCstd||krtddS)NNFCz%Label must be in Normalization Form C)r normalizerr)rrr check_nfcsrK)r%posrcCs4t||}|dkr|dkr8tt||dtkr8dSd}t|dddD]B}tjt||}|tdkrrqL|tdtd fvrLd}qqL|sdSd}t|dt|D]B}tjt||}|tdkrq|td td fvrd}qq|S|d kr,|dkr(tt||dtkr(dSdSdSdS) Ni rrTFrGTr4Dr1i )rr_virama_combining_classrangerZ joining_typesgetr()r%rLcp_valueokiZ joining_typerrrvalid_contextjs<     rU)r%rL exceptionrcCst||}|dkrdd|kr0t|dkr`nn,t||ddkr`t||ddkr`dSdS|dkr|t|dkrt|dkrt||ddSdS|d ks|d kr|dkrt||dd SdS|d kr|D]6}|d krqt|ds t|ds t|drdSqdSd|kr.dkrhnn6|D],}dt|krVdkr6nndSq6dSd|krdkrnn6|D],}dt|krdkrnndSqdSdS)NrrlTFiuZGreekiiZHebrewi0u・ZHiraganaZKatakanaZHani`iiii)rr(r)r%rLrVrRrrrrvalid_contextos@  ( "    rYc CsJt|ttfr|d}t|dkr,tdt|t|t|t |D]\}}t |}t |t j drpqLqLt |t j drz,t||stdt||dt|Wn0tytdt||dt|Yn0qLt |t j d rt||sz|d}WqBty:t||YS0n|}|}|tr|t td}|spt d| dddkrt dnt|| dSz| d}Wnt yt dYn0t||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||dfd}|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 krtWqtytdt ||dt |Yq0qt d|S)zBRe-map the characters in the string according to UTS46 processing.r) uts46datar0ZNrDVrN3rAIrZrI) rmr<rbisectZ bisect_leftr( IndexErrorrr#r$r=rrJ) rjrkrlrmoutputrLcharZ code_pointZuts46rowstatusZ replacementrrr uts46_remap4sV      ry)rstrictuts46rkrlrc Cst|ts4zt|d}Wnty2tdYn0|rDt|||}d}g}|r\|d}n t|}|rt|dgkr|td|ddkr|d=d}|D]$}t|}|r||qtd q|r|d d |}t ||std |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[rcUnicodeDecodeErrorrrysplit_unicode_dots_rerfappendjoinr.) rrzr{rkrlr+resultlabelsr%rrrr Ts8           r )rrzr{rkrcCszt|tst|d}Wnty2tdYn0|rDt||d}d}g}|s\t|}n |d}|rt|dgkr|td|ds|d=d}|D]$}t|}|r||qtd q|r|dd |S) Nr`zInvalid ASCII in A-labelFr|r0r}rGTr~) r[rcrrryrrrarr)rrzr{rkr+rrr%rrrr^us2        r^)F)F)TF)FFFF)FFF)*r0rrtrretypingrrZ intrangesrrOrdcompilerrirrrrintrrcboolrr\r"r$r*r.r@rCrHrKrUrYr]r_rfraryr r^rrrrs<   ;+* $!