o c]]l@sddlZddlmZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z mZddlmZddlmZdd lmZdd lmZd gZejeejd ZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"Gdd d eZ#Gd!d"d"eZ$Gd#d$d$eZ%Gd%d&d&eZ&iej'j(eej)j(eej*j(eej+j(eej,j(eej-j(e ej.j(e!ej/j(eej0j(e"ej1j(e$ej2j(e$ej3j(e%ej4j(eej5j(eej6j(eej7j(eej8j(eej9j(eej:j(eej;j(eejj(eej?j(eej@j(eejAj(ei ZBiej)jCeej*jCeej+jCeej,jCeej-jCe ej.jCe!ej/jCeej0jCe"ejDjCe#ej2jCe$ejEjCe#ej1jCe$ej3jCe%ejFjCe&ej4jCeej5jCeej6jCeej7jCeej8jCeej9jCeej:jCeej;jCeejjCeej?jCeej@jCeejAjCei ZGGd'd(d(eZHeHeBeGZIdS))N)debug)error)eoo)to_bytes)int2octoct2int ints2octsnullstr2octs isOctetsType)char)tag)univ)usefulencode)flagsc@s>eZdZdZdZeeZddZddZddZ d d d Z d S) AbstractItemEncoderT)rrcCst|\}}}||B}|r|tjO}|dkr||BfS|d@f}|dL}|r3d|d@Bf|}|dL}|s$|dBf|S)N)r tagFormatConstructed)self singleTag isConstructedtagClass tagFormattagId encodedTag substrater :/usr/lib/python3/dist-packages/pyasn1/codec/ber/encoder.py encodeTag!s    zAbstractItemEncoder.encodeTagcCsj|s|jrdS|dkr|fSd}|r|d@f|}|dL}|st|}|dkr.td|d|Bf|S)N)rrr ~zLength octets overflow (%d))supportIndefLenModelenr PyAsn1Error)rlengthdefModer substrateLenr r r! encodeLength5s z AbstractItemEncoder.encodeLengthcKs td)NzNot implemented)rr(rvalueasn1Spec encodeFunoptionsr r r! encodeValueI zAbstractItemEncoder.encodeValueNc Ks|dur|j}n|j}|s|j|||fi|\}}}|S|dd} t}t|jD]\} } | } | sz|j|||fi|\}}}WntjyYt } td|| dfwt rit d|rbdpcd||f|sw|rw|dd rw|S|sd} t rt d | | |}t rt d |rdpd| t t|f||t|| 7}t rt d t|t t|f|rt||}| s||j7}q*||}| s||j7}q*|st|}|S) Nr*TzError encoding %r: %szencoded %svalue %s into %sz constructed ifNotEmptyFz;overridden encoding mode into definitive for primitive typezencoded %stag %s into %sz)encoded %s octets (tag + payload) into %s)tagSetr2getr enumerate superTagsrr(sysexc_infoLOGr"rhexdumprr,r'eooOctetsSubstrateeooIntegerSubstrate)rr.r/r0r1r7rrisOctetsr*idxrdefModeOverrideexcheaderr r r!rLsx       zAbstractItemEncoder.encode)NN) __name__ __module__ __qualname__r&r@rr?r"r,r2rr r r r!rsrc@eZdZddZdS)EndOfOctetsEncodercK tddfSNFTr r-r r r!r2r3zEndOfOctetsEncoder.encodeValueNrFrGrHr2r r r r!rJ rJc@eZdZdZddZdS)BooleanEncoderFcKs|rdpdddfS)N)r4rFr r-r r r!r2szBooleanEncoder.encodeValueNrFrGrHr&r2r r r r!rQ rQc@seZdZdZdZddZdS)IntegerEncoderFcKsF|dkrtrtd|jr dpd|jrdSdStt|ddd dfS) Nrz#encoding %spayload for zero INTEGERzno r5)r FF)rRFFT)signedF)r=supportCompactZerorintr-r r r!r2s zIntegerEncoder.encodeValueN)rFrGrHr&rWr2r r r r!rUs rUc@rI)BitStringEncoderc Ks|dur ||}t|}|dr|d|d>}n|}|dd}|r,t||dkr?|}tt|d||ddfStrGtd||jj} | rTt | | } nt } |j| d}d} t }| |kr| } t | |d|} |||| | |fi|7}| |ksf|ddfS)Nr$ maxChunkSizerFT#encoding into up to %s-octet chunksr7) cloner'r8asOctetsrr=r7baseTagr TagSetr min) rr.r/r0r1 valueLength alignedValuerZrr_r7stopstartr r r!r2s2     zBitStringEncoder.encodeValueNrNr r r r!rYrOrYc@rI)OctetStringEncoderc Ks|dur |}nt|s||}n|}|dd}|r%t||kr*|ddfStr2td||durN|jj}|rCt ||}nt }|j|d}nt|si|jj}|r_t ||}nt }|j|d}d} t } || | |} | syn||| |fi|7}| |7} qn|ddfS)NrZrFTr[r\) r^r r]r8r'r=r7r_r r`r ) rr.r/r0r1rrZr_r7poschunkr r r!r2s@      zOctetStringEncoder.encodeValueNrNr r r r!rfs rfc@rP) NullEncoderFcKrKrLrMr-r r r!r2$r3zNullEncoder.encodeValueNrSr r r r!ri!rTric@rP)ObjectIdentifierEncoderFc Ks|dur ||}|}z |d}|d}Wnty&td|fwd|kr1dkrinn6|dkrC|df|dd}n>|dkrQ|f|dd}n0|dkra|df|dd}n td|f|dkry|df|dd}ntd|fd }|D]?} d| krd krnn|| f7}q| d kr| d @f} | d L} | rd | d @Bf| } | d L} | s|| 7}qtd | |f|ddfS)Nrr4z Short OID %s'(Pz"Impossible first/second arcs at %sr rrrzNegative OID arc %s at %sF)r]asTuple IndexErrorrr() rr.r/r0r1oidfirstsecondoctetssubOidresr r r!r2+sD       z#ObjectIdentifierEncoder.encodeValueNrSr r r r!rj(rTrjc@s0eZdZdZdZeddZddZddZd S) RealEncoderrrmcCsd\}}|dkr d}|dkrd}||9}|dkr-|dt|d|9}t|d|}n|dkrE|dt|d|9}t|d|} t||krU||9}|d 8}qE |t|||fS) N)r4r4rr$rmTr4)absrX)mencbaseemsesr r r!_dropFloatingPointgs& zRealEncoder._dropFloatingPointc Cs|\}}}gd}|j|vr|||j|S|j|vr#|||j|S|||g}|||g}d}d} td}tdD]A} ||| || || \}|| <|| <|| <t|| t|kslt|| t|krz|| |krz|| }t|| }|| } q9trtd| |||f||| |fS)N)rmr$rzr4rminfryzMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s) binEncBaserfloatranger|rXr=) rr.r}brencBasemantissaexponentsignr~ir r r!_chooseEncBases6      4   zRealEncoder._chooseEncBasecKs|dur ||}|jrdS|jrdS|\}}}|stddfS|dkr;tr)tdtd||dkr2d p3d |fddfS|d krkd }||\} }} }| dkrS|d O}| d krl|d@dkrk|dL}|d7}|d@dks]n5| dkr|d@dkr|dL}|d7}|d@dksv|dO}n|d@dkr|dL}|d7}|d@dks|dO}d} |d@dkr|dL}| d7} |d@dks| dkrtd|| d >O}t} |dks|dkrt |d@} n?|dvrt |d@| } |dL}|dvs|dkr| rt | dd @rt d| } |dkr| rt | dd @st d| } t | } | dkr$td| dkr*n | d kr4|dO}n| dkr>|d O}n |dO}t | d@| } t}|r^t |d@|}|dL}|sOt || |}|ddfStd|)N))@FF))AFFFT z!encoding REAL into character formz%dE%s%dr+r5rmrrr4r$rryrzr{ zScale factor overflowrxr#)rrxzReal exponent overflowzProhibited Real base %s) r] isPlusInf isMinusInfr r=r rrr(rrr')rr.r/r0r1r}rrforr~sfeonporr r r!r2s   $            "         zRealEncoder.encodeValueN) rFrGrHr&r staticmethodrrr2r r r r!rwcs  !rwc@rP)SequenceEncoderFc Kst}|d|j}trtd|rdpd|dur|j}|r ||j}t|D]\} } |r^|| } | jrC| j sCtrBtd| fq)| j rU| | j krUtrTtd| fq)|r^|j | jd|r| j r| j } | jtjjtjjfvr||| |fit|| jd7}q)|| |fi|} | | r|| 7}q)||| | fi|7}trtd | fq)||| |fi|7}q)nt|jjD]\} } z|| j} Wntytd | j|fw| jr| j|vrtrtd| fq| j r| | j krtrtd| fq|r|j | jd| j }| j rV|jtjjtjjfvr,||| |fit||jd7}q|| |fi|} || r@|| 7}q||| |fi|7}trUtd |fq||| |fi|7}q|d d fS) NomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r5z"not encoding OPTIONAL component %rz!not encoding DEFAULT component %r)r6)wrapTypewrapped with wrap type %rz#Component name "%s" not found in %rT)r r8rr=isInconsistent componentTyper9values isOptionalisValue isDefaulted asn1ObjectupdateopenTypetypeIdrSetOf SequenceOfdictisSameTypeWith namedTypesnameKeyErrorrr()rr.r/r0r1rr inconsistencyrrB component namedTyperrh componentSpecr r r!r2s        .       zSequenceEncoder.encodeValueN)rFrGrHrr2r r r r!r s rc@seZdZddZddZdS)SequenceOfEncoderc Ks|dur |j}|r |n|j}g}|dd}t|D]-\}} || |fi|} |durC|| sC|| |fi|} trCtd|f|| q|S)Nrr)rrpopr9rr=append) rr.r/r0r1rchunksrrBrrhr r r!_encodeComponentss$  z#SequenceOfEncoder._encodeComponentscKs&|j|||fi|}t|ddfS)NT)rr join)rr.r/r0r1rr r r!r2s zSequenceOfEncoder.encodeValueN)rFrGrHrr2r r r r!rs rc@rI) ChoiceEncoderc s|dur }n,fdd|jjD}t|dkr)tdt|r#dp$df|d}|}||}|||fi|ddfS) Ncsg|] }|jvr|jqSr )r).0rr.r r! s z-ChoiceEncoder.encodeValue..r4z%s components for Choice at %rz Multiple zNone rT) getComponentrrr'rr()rr.r/r0r1rnamesrr rr!r2s  zChoiceEncoder.encodeValueNrNr r r r!rrOrc@rI) AnyEncodercKs<|dur |}n t|s||}||dd dfS)Nr*T)r^r r]r8r-r r r!r2s  zAnyEncoder.encodeValueNrNr r r r!rrOrc@s*eZdZdZdZifddZdddZdS)EncoderNcCs||_||_dSN)_Encoder__tagMap_Encoder__typeMap)rtagMaptypeMapr r r!__init__s zEncoder.__init__c Ksz |dur |j}n|j}Wntytd|fwtr@td|dd r*dp+d|dd|dur8|p;||f|jdurL|j|jd |j durX|j|j d z|j |}trjtd |j j |fWn@t y|durz|j}n|j}t|j|j}z|j|}Wnt ytd ||fwtrtd |j j |fYnw|j|||fi|}trtd|t|t|f|S)Nz) rr.r/r1rconcreteEncoderr7 baseTagSetrr r r!__call__sR 8     zEncoder.__call__r)rFrGrHrrrrr r r r!r s  r)Jr;pyasn1rrpyasn1.codec.berrpyasn1.compat.integerrpyasn1.compat.octetsrrrr r r pyasn1.typer r rr__all__registerLoggeerF DEBUG_ENCODERr=objectrrJrQrUrYrfrirjrwrrrr endOfOctetsr7BooleanInteger BitString OctetStringNullObjectIdentifier EnumeratedRealrrChoice UTF8String NumericStringPrintableString TeletexStringVideotexString IA5String GraphicString VisibleString GeneralStringUniversalString BMPStringObjectDescriptorGeneralizedTimeUTCTimerrSetSequenceAnyrrrr r r r!s         )=;(z%                          !                            #q