3 M(YG8@stddlmZmZmZmZddlmZddlmZm Z m Z m Z m Z ddl mZddlmZmZdgZGdddeZGd d d eZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZ ej!j"eej#j"eej$j"eej%j"eej&j"eej'j"eej(j"eej)j"eej*j"eej+j"eej,j"eej-j"eej.j"eej/j"eej0j"eej1j"eej2j"eej3j"eej4j"eej5j"eej6j"eej7j"eej8j"eej9j"eej:j"eej;j"eiZj=eej,j=eej?j=eej+j=eej-j=eej@j=e ej.j=eej/j=eej0j=eej1j=eej2j=eej3j=eej4j=eej5j=eej6j=eej7j=eej8j=eej9j=eej:j=eej;j=eiZAGd!d"d"eZBeBe}n|}|jdd}| sHt||dkrn|j}tt|d||ddfS|jtj|jj|jjd}d}t }x:||kr|} t | |d|}|||| |f|7}qW|ddfS)Nr maxChunkSizerFT)r*) r!r+asOctetsrclonerTagSetr*baseTagr min) rr&r'r(Z valueLengthZ alignedValuer<rstopstartrrrr)s"  zBitStringEncoder.encodeValueN)r1r2r3r)rrrrr;sr;c@seZdZddZdS)OctetStringEncoderc Ks|jdd}| st||kr,|jddfStj|jj|jj}d}t}x<|j|||||d}|sjP|||f|7}||7}qJW|ddfSdS)Nr<rFT)r*) r+r!r=rr?r*r@r r>) rr&r'r(r< baseTagSetposrchunkrrrr)s  zOctetStringEncoder.encodeValueN)r1r2r3r)rrrrrDsrDc@seZdZdZddZdS) NullEncoderFcKs tddfS)NFT)r )rr&r'r(rrrr)szNullEncoder.encodeValueN)r1r2r3r r)rrrrrHsrHc@seZdZdZddZdS)ObjectIdentifierEncoderFc Ks|j}y|d}|d}Wn$tk r@tjd|fYnXd|koTdknr|dkrz|df|dd}q|dkr|f|dd}q|dkr|df|dd}qtjd|fn0|dkr|df|dd}ntjd|ff}x|D]}d|kod knr.||f7}n`|d kr||d @f} |d L}x&|rpd |d @Bf| } |d L}qLW|| 7}ntjd ||fqW|d d fS)Nrrz Short OID %s'(Pz"Impossible first/second arcs at %srrrzNegative OID arc %s at %sF)ZasTuple IndexErrorrr") rr&r'r(oidfirstsecondoctetsZsubOidresrrrr)s<      z#ObjectIdentifierEncoder.encodeValueN)r1r2r3r r)rrrrrIsrIc@s0eZdZdZdZeddZddZddZd S) RealEncoderrrLcCsd\}}|dkrd }|dkr d }||9}|dkrZ|dt|d|9}t|d|}n0|dkr|dt|d|9}t|d|}x$t||kr||9}|d8}qPqW|t|||fS) NrrrrL)rrrX)absr:)mencbaseemsesrrr_dropFloatingPoints& zRealEncoder._dropFloatingPointc Cs|\}}}dddg}|j|kr.|j||j|S|j|krH|j||j|S|||g}|||g}d}d} td}xtdD]} |j|| || || \}|| <|| <|| <t|| t|kst|| t|krv|| |krv|| }t|| }|| } qvW||| |fS)NrLrrVrinfrU) binEncBaser_floatrangerYr:) rr&rZbr\ZencBaseZmantissaZ exponentasignr[irrr_chooseEncBases$      .4  zRealEncoder._chooseEncBasecKs|jr dS|jrdS|\}}}|s,tddfS|dkrXtd||dkrFdpHd |fddfS|d krd }|j|\}}} }|dkr|dO}| d krx|d @dkr|d L}|d 7}qWnb| d krx |d@dkr|dL}|d 7}qW|dO}n.x$|d@dkr |dL}|d 7}qW|dO}d} x$|d @dkr>|d L}| d 7} qW| dkrTtjd|| d >O}t} |dksx|dkrt|d@} nx(|dkrt|d@| } |d L}qW|dkr| rt| dd @rtd| } |dkr| rt| dd @ rtd| } t | } | dkr*tjd| d kr6n@| d krJ|d O}n,| dkr^|d O}n|dO}t| d@| } t} x$|rt|d@| } |d L}q|Wt|| | }|ddfStjd|dS) N@FAT z%dE%s%dr+rLrrrrrUrVrW zScale factor overflowrzReal exponent overflowzProhibited Real base %srh)roFFri)rpFFrXrX)rrXrX) Z isPlusInfZ isMinusInfr r rgrr"rrr!)rr&r'r(rZrdr\for]r[ZsfeonZporrrrr)&s|  $       " $         zRealEncoder.encodeValueN) r1r2r3r ra staticmethodr_rgr)rrrrrTs  rTc@seZdZddZdS)SequenceEncodercKs|j|j}t}t|}xb|dkr||d8}|rf||jrH||j rHq||jrf||||jkrfq|||f||}qW|ddfS)NrrT)verifySizeSpecZ componentTyper r!Z isOptionalZisValueZ isDefaultedZ asn1Object)rr&r'r(Z namedTypesrr/rrrr)ms zSequenceEncoder.encodeValueN)r1r2r3r)rrrrrulsruc@seZdZddZdS)SequenceOfEncodercKsH|jt}t|}x(|dkr<|d8}|||f||}qW|ddfS)NrrT)rvr r!)rr&r'r(rr/rrrr)s zSequenceOfEncoder.encodeValueN)r1r2r3r)rrrrrwsrwc@seZdZddZdS) ChoiceEncodercKs||jf|ddfS)NT)Z getComponent)rr&r'r(rrrr)szChoiceEncoder.encodeValueN)r1r2r3r)rrrrrxsrxc@seZdZddZdS) AnyEncodercKs|j|jdd dfS)Nr$T)r=r+)rr&r'r(rrrr)szAnyEncoder.encodeValueN)r1r2r3r)rrrrrysryc@s(eZdZdZdZifddZddZdS)EncoderNcCs||_||_dS)N)_Encoder__tagMap_Encoder__typeMap)rtagMaptypeMaprrr__init__szEncoder.__init__cKsFtjtj@rtj}nd}|rR|d|jdd r2dp4d|jdd|j|jf|jdk rj|j|jd|jdk r|j|jd |j }y|j |j }Wn\t k rt j|j j|j j}y|j|}Wn$t k rtjd |fYnXYnX|r|d |jj|f|j||f|}|rB|d |t|tj|f|S) NzBencoder called in %sdef mode, chunk size %s for type %s, value: %sr$Tinrlr<r)r$)r<zNo encoder for %sz!using value codec %s chosen by %sz;codec %s built %s octets of substrate: %s encoder completed)r loggerZ flagEncoderr+ZprettyPrintTypeZ prettyPrintfixedDefLengthModeupdatefixedChunkSizer*r|typeIdKeyErrorrr?r@r{rr" __class__r1rr!Zhexdump)rr&r(rr*ZconcreteEncoderrErrrr__call__s0 6  zEncoder.__call__)r1r2r3rrrrrrrrrzs rzN)DZ pyasn1.typerrrrZpyasn1.codec.berrZpyasn1.compat.octetsrrr r r Zpyasn1.compat.integerr Zpyasn1r r__all__objectrr4r5r6r;rDrHrIrTrurwrxryZ endOfOctetsr*BooleanZIntegerZ BitStringZ OctetStringZNullZObjectIdentifierZ EnumeratedRealZ SequenceOfZSetOfZChoiceZ UTF8StringZ NumericStringZPrintableStringZ TeletexStringZVideotexStringZ IA5StringZ GraphicStringZ VisibleStringZ GeneralStringZUniversalStringZ BMPStringZObjectDescriptorZGeneralizedTimeZUTCTimer}rSetSequenceZAnyr~rzrrrrrs  \2y                                                     K