o c]<@sddlmZddlmZddlmZddlmZddlmZm Z m Z m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZd gZejeejd Ze jZGdddeZGdddeZGdddeZeZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"GdddeZ#Gd d!d!eZ$Gd"d#d#eZ%Gd$d%d%e%Z&Gd&d'd'e&Z'Gd(d)d)e'Z(Gd*d+d+e'Z)Gd,d-d-e&Z*Gd.d/d/e*Z+Gd0d1d1e*Z,Gd2d3d3e%Z-Gd4d5d5eZ.Gd6d7d7e!Z/Gd8d9d9e!Z0Gd:d;d;e!Z1Gdd?d?e!Z3Gd@dAdAe!Z4GdBdCdCe!Z5GdDdEdEe!Z6GdFdGdGe!Z7GdHdIdIe!Z8GdJdKdKe!Z9GdLdMdMe!Z:GdNdOdOe!Z;GdPdQdQe!Zeej?j>eej@j>e ejAj>e!ejBj>e"ejCj>e#ejDj>eejEj>e$ejFj>e'ejGj>e*ejHj>e-ejIj>e/ejJj>e0ejKj>e1ejLj>e2ejMj>e3ejNj>e4ejOj>e5ejPj>e6ejQj>e7ejRj>e8ejSj>e9ejTj>e:ejUj>e;ejVj>e<iZWejGjXe+ejYjXe,ejFjXe(ejZjXe)ejHjXe-ej[jXe.iZ\eW]D]Z^e^j_dRur:e^j_j`jXZXeXdRur:eXe\vr:e^e\eX<qdSdTeadUD\ ZbZcZdZeZfZgZhZiZjZkGdVdWdWeZleleWe\ZmdRS)X)debug)error)eoo) from_bytes)oct2int octs2ints ints2octsnull)base)char)tag)tagmap)univ)usefuldecode)flagsc@s,eZdZdZ  dddZ  dddZdS)AbstractDecoderNc Ktd|f)NzDecoder not implemented for %sr PyAsn1Error self substrateasn1SpectagSetlengthstate decodeFun substrateFunoptionsr :/usr/lib/python3/dist-packages/pyasn1/codec/ber/decoder.py valueDecoderzAbstractDecoder.valueDecoderc Kr)Nz5Indefinite length mode decoder not implemented for %srrr r r!indefLenValueDecoder#r#z$AbstractDecoder.indefLenValueDecoderNNNNN)__name__ __module__ __qualname__protoComponentr"r$r r r r!rs rc@s eZdZeddZddZdS)AbstractSimpleDecodercCs|d|||dfSNr ) asn1Objectrrr r r!substrateCollector+sz(AbstractSimpleDecoder.substrateCollectorcKs<|dr|S|dur|jj||dS|tur|S||S)Nnativer)getr)clonenoValuerrrvaluerr r r!_createComponent/s  z&AbstractSimpleDecoder._createComponentN)r&r'r( staticmethodr-r5r r r r!r**s  r*c@s2eZdZedZ  dddZ  dddZdS)ExplicitTagDecoderNc Ks||r||j||dfi|||S|d|||d} } || |||fi|\} } tr:tdt| t| f| | fS)Nr8zPexplicit tag container carries %d octets of trailing payload (will be lost!): %s)r5LOGlenrhexdump) rrrrrrrrrheadtailr4_r r r!r"=szExplicitTagDecoder.valueDecoderc Ksp|r||j||dfi|||S|||||fi|\} }||fddi|\} }| tjur3| |fStd)Nr8allowEooTz Missing end-of-octets terminator)r5r endOfOctetsrr) rrrrrrrrrr4 eooMarkerr r r!r$Qs  z'ExplicitTagDecoder.indefLenValueDecoderr%r&r'r(rAnyr)r"r$r r r r!r7:s  r7c@$eZdZedZ  dddZdS)IntegerDecoderrNc Ksx|djtjkr td|d|||d} } | s)|j||dfi|| fSt| dd} |j||| fi|| fS)NrSimple tag format expectedT)signed) tagFormatr tagFormatSimplerrr5r) rrrrrrrrrr<r=r4r r r!r"ks  zIntegerDecoder.valueDecoderr%)r&r'r(rIntegerr)r"r r r r!rEh  rEc@seZdZedZddZdS)BooleanDecoderrcKs tj||||r dp dfi|S)Nr)rEr5r3r r r!r5s zBooleanDecoder._createComponentN)r&r'r(rBooleanr)r5r r r r!rL}s  rLc@6eZdZedZdZ  dddZ  dddZdS) BitStringDecoderr TNcKsf|d|||d} } |r||j||tfi|||S| s%td|djtjkrXt| d} | dkr>td| |jj | ddd| d} |j||| fi|| fS|j sdtd|j j t rjt d |j}|jj tdd } | r|| |jfd |i|\}} t|d} | dkrtd| |jj |ddd| | d } | sw|j||| fi|| fS) NzEmpty BIT STRING substraterTrailing bits overflow %srMT)internalFormatpadding*Constructed encoding form prohibited at %s$assembling constructed serializationrSrrSprependrT)r5r2rrrHr rIrr)fromOctetStringsupportConstructedForm __class__r&r9r-r )rrrrrrrrrr<r= trailingBitsr4 bitString componentr r r!r"s\     zBitStringDecoder.valueDecoderc Ks|r||j||tfi|||S|j}|jjtdd} |rT|||jf|dd|\} }| tjur3n&t| d} | dkrDt d| |jj| ddd| | d} |st d |j||| fi||fS) NTrWrr?rrQrRrMrX!No EOO seen before substrate ends) r5r2r-r)rZr rr@rrrSubstrateUnderrunError) rrrrrrrrrr^r_r]r r r!r$s2     z%BitStringDecoder.indefLenValueDecoderr%) r&r'r(r BitStringr)r[r"r$r r r r!rPs  8rPc@rO) OctetStringDecoderr8TNc Ks|d|||d} } |r||j||tfi|||S|djtjkr3|j||| fi|| fS|js?td|jj t rEt d|j }t } | r`|| |j fd|i|\} } | | 7} | sL|j||| fi|| fS)NrrUrVr)r5r2rHr rIr[rrr\r&r9r-r r)) rrrrrrrrrr<r=headerr_r r r!r"s,  zOctetStringDecoder.valueDecoderc Ks|r||jur|j||tfi|} || ||S|j}t} |r:|||jf|dd|\} }| tjur4n | | 7} |std|j||| fi||fS)NTr`ra) r-r5r2r r)rr@rrb) rrrrrrrrrr,rer_r r r!r$ s,   z'OctetStringDecoder.indefLenValueDecoderr%) r&r'r(r OctetStringr)r[r"r$r r r r!rds  !rdc@rD) NullDecoderr8Nc Ksd|djtjkr td|d|||d} } |j||dfi|} | r.td|| | fS)NrrFr8z&Unexpected %d-octet substrate for Null)rHr rIrrr5) rrrrrrrrrr<r=r_r r r!r"+s zNullDecoder.valueDecoderr%)r&r'r(rNullr)r"r r r r!rg(rKrgc@rD)ObjectIdentifierDecoderr NcKs|djtjkr td|d|||d} } | s!tdt| } d} d} t| } | | kr| | }| d7} |dkrC| |f7} n?|dkry|}d}|dkro|d>|d@}| | krctd | f| | }| d7} |dksO| |d>|f7} n |dkrtd | | ks1d| dkrd krnnd | } n;d | dkrdkrnnd| dd f| dd} n| ddkrd| ddf| dd} n td| d|j||| fi|| fS)NrrFzEmpty substrater rMrQz#Short substrate for sub-OID past %sz"Invalid octet 0x80 in OID encoding')r(OPzMalformed first OID octet: %s) rHr rIrrrr:rbr5)rrrrrrrrrr<r=oidindex substrateLensubId nextSubIdr r r!r"@sL      z$ObjectIdentifierDecoder.valueDecoderr%)r&r'r(rObjectIdentifierr)r"r r r r!ri=rKric@s"eZdZeZ  dddZdS) RealDecoderNcKs|djtjkr td|d|||d} } | s)|j||dfi|| fSt| d} | dd} | d@r| s@tdtrFtd| d@d} | d kr\t| d} | dd} | d| | | d} } | rm| srtd t| dd@r|d p}d}| r|d K}|t| dO}| dd} | s| d ?d@}|d krtd|dkr|d9}n|d kr|d 9}d}| r|d K}|t| dO}| dd} | s| d@r| }| d ?d@}|d |9}|d |f}nn| d@rtrtd| d@rdpd}n[| d@dkrL| stdtrtdz0| d@dkrt| ddf}n| d@d kr*t | }n| d@dkr6t | }nt d| Wnt yKt dwt d| |j|||fi|| fS)NrrFgrMrjzIncomplete floating-point valuezdecoding binary encoded REALzReal exponent screwedrpzIllegal Real base@zdecoding infinite REALz-infinfzdecoding character encoded REAL zUnknown NR (tag %s)zBad character Real syntaxzUnknown encoding (tag %s)) rHr rIrrr5rr9intfloatrb ValueError)rrrrrrrrrr<r=foneoebpsfr4r r r!r"ys                   zRealDecoder.valueDecoderr%)r&r'r(rRealr)r"r r r r!rwvs rwc@seZdZdZdS)AbstractConstructedDecoderN)r&r'r(r)r r r r!rsrc@sJeZdZdZdZddZddZd ddZ  d dd Z  d d d Z dS)UniversalConstructedTypeDecoderNcCtr+NotImplementedError)rr,idxr r r!_getComponentTagMapz3UniversalConstructedTypeDecoder._getComponentTagMapcCrr+r)rr,rrr r r!_getComponentPositionByTyperz;UniversalConstructedTypeDecoder._getComponentPositionByTypec Ksg}t}|r$||fi|\}}|tjurn ||||j|st|dkr.|j}n|j}|j t j |jj g|j Rd} trItd| t|D]\} }| j| |ddddqM| |fS)NrMr/z@guessed %r container type (pass `asn1Spec` to guide the decoder)FverifyConstraints matchTagsmatchConstraints)setrr@appendaddrr:protoRecordComponentprotoSequenceComponentr1r TagSetbaseTag superTagsr9 enumeratesetComponentByPosition) rrrrr componentscomponentTypesr_r)r,rr r r!_decodeComponentss4    z1UniversalConstructedTypeDecoder._decodeComponentsc Ks|djtjkr td|d|||d} } |dur@|dur'|} n|jdur4|jj|d} n|j|jf} || ||S|durg|j | f||d|\} } | rct rct dt | t | f| | fS|} | |jtjjtjjfvrK|j} |jtjjk}| o| j }t rt d| rdpd|rd pd|ft}d}| r$| sd}n5|r| j}n/z|r| |j}n| |js| |jr| |}n| |j}Wntytd |fw|| |fi|\}} |s| r|r| |j}n| |js| |jr| |j|}| j||d d d d | ||d 7}| st r-t d|| r?| j!"|s@td| j#j$| j%r;|&di}t rct d|'D] \}}t d||fqU|sm|&dd r;t(| j)D]\}}|j*s|qr|jr| +|j,sqr| -|j*j.}z||}WnOt/yt rt d| j#j$|j.| j#j$|j*j.f|j*'D] \}}t d||fqz|j*|}Wnt/yt rt d|fYYqrwYnwt rt d||f| +|}|jtj0jtj1jfvr"t(|D]\}}|||2fd|i|\}}|||<qqr|| +|2fd|i|\}}| ||qr| | fS| j3}|rG|| | fS|} | |j}t r_t d|d}| r|| |fi|\}} | j||d d d d |d 7}| sd| | fS)NrConstructed tag format expectedr/rrz)Unused trailing %d octets encountered: %s5decoding %sdeterministic %s type %r chosen by type IDnon-r8SET"Excessive components decoded at %rFrrMseen component indices %s,ASN.1 object %s has uninitialized components openTypesuser-specified open types map:%s -> %rdecodeOpenTypesJdefault open types map of component "%s.%s" governed by component "%s.%s":1failed to resolve open type by governing value %r+resolved open type %r by governing value %rr+decoding type %r chosen by given `asn1Spec`)4rHr tagFormatConstructedrrr1r)rrrr9r:rr;cleartypeIdrSequenceSet componentTypehasOptionalOrDefaultr tagMapUniquer, isOptional isDefaultedgetTagMapNearPosition IndexErrorgetPositionByTypeeffectiveTagSetgetPositionNearTyperrrequiredComponentsissubsetr\r& hasOpenTypesr0itemsr namedTypesopenTypegetComponentByPositionisValuegetComponentByNamenameKeyErrorSetOf SequenceOfasOctetsisInconsistent)rrrrrrrrrr<r=r,trailingr isSetTypeisDeterministic seenIndicesrrr_rkv namedTypegoverningValuercontainerValueposcontainerElementrest inconsistencyr r r!r"sJ            )            z,UniversalConstructedTypeDecoder.valueDecoderc Ks|djtjkr td|dur3|dur|} n|jdur'|jj|d} n|j|jf} || ||S|durG|j |f||dt |ddS|} | |j t jj t jj fvrF| j} | j t jj k} | ok| j } trtd| rudpvd | rzd p{d |ft} d}|r t| |krd}n5| r| j}n/z| r| |j}n| |js| |jr| |}n| |j}Wntytd | fw|||fd di|\}}|tjurn8| s| r| r| |j}n| |js| |jr| |j|}| j ||d d d d| !||d7}|st"dtrtd| | rB| j#$| s-td| j%j&| j'r:|(di}trPtd|)D] \}}td||fqB|sZ|(dd r6t*| j+D]\}}|j,siq_|jrv| -|j.svq_| /|j,j0}z||}WnOt1ytrtd| j%j&|j0| j%j&|j,j0f|j,)D] \}}td||fqz|j,|}Wnt1ytrtd|fYYq_wYnwtrtd||f| -|}|j t j2j t j3j fvrt*|D]\}}|||4fd|it |dd\}}|||<qq_|| -|4fd|it |dd\}}|tjur4| ||q_| |fS| j5}|rB|| |fS|} | |j}trZtd|d}|r|||fd di|\}}|tjurw | |fS| j ||d d d d|d7}|s_t"d)Nrrr/rT)r?rrr8rrr?FrrMrarrrrrrrrrrr)6rHr rrrr1r)rrrdictrrrrrrrr9rr:rr,rrrrrr@rrrrrrbrrr\r&rr0rrrrrrrrrrrrr)rrrrrrrrrr,rrrrrr_rrrrrrrrrrrrr r r!r$sL             +             %   z4UniversalConstructedTypeDecoder.indefLenValueDecoder)NNr%) r&r'r(rrrrrr"r$r r r r!rs * Mrc@eZdZeZeZdS)SequenceOrSequenceOfDecoderN)r&r'r(rrrrrr r r r!r rc@eZdZeZdS)SequenceDecoderN)r&r'r(rrr)r r r r!r rc@r)SequenceOfDecoderN)r&r'r(rrr)r r r r!rrrc@r)SetOrSetOfDecoderN)r&r'r(rrrrrr r r r!rrrc@r) SetDecoderN)r&r'r(rrr)r r r r!rrrc@r) SetOfDecoderN)r&r'r(rrr)r r r r!rrrc@0eZdZeZ  dddZ  dddZdS) ChoiceDecoderNcKs|d|||d} } |dur|jj|d} n|} |r%|| ||S| j|kr@tr3td|f|| | jfi|\} } ntrItd|f|| | j|||fi|\} } | j} tretd| | f| j| | ddddd| | fS)Nr/'decoding %s as explicitly tagged CHOICEdecoding %s as untagged CHOICE*decoded component %s, effective tag set %sFrrr innerFlag)r)r1rr9componentTagMaprsetComponentByType)rrrrrrrrrr<r=r,r_rr r r!r"s@    zChoiceDecoder.valueDecoderc Ks|dur |jj|d} n|} |r|| ||S| j|krJtr&td|f||| jjfi|\} }||fddi|\} }| tjurIt dntrStd|f||| jj|||fi|\} }| j } trptd| | f| j | | ddddd | |fS) Nr/rr?TrarrFr) r)r1rr9rrrr@rrrr) rrrrrrrrrr,r_rArr r r!r$sR      z"ChoiceDecoder.indefLenValueDecoderr%)r&r'r(rChoicer)r"r$r r r r!rs /rc@r) AnyDecoderNc Ks|durd} n|jtjur||jv} n||jk} | r5|d} |t| t|7}| }tr5tdt||rF||j ||t fi|||S|d|||d} } |j ||| fi|| fS)NT fullSubstratez&decoding as untagged ANY, substrate %s) r\r TagMaptagMaprr:r9rr;r5r2) rrrrrrrrr isUntaggedrr<r=r r r!r"8s"   zAnyDecoder.valueDecodercKs2|durd} n|jtjur||jv} n||jk} | r#t} tr"tdn|d} | dt| } tr;tdt | |j }|r\||j ur\|j ||t fi|} || | ||t| Strbtd|j }|r|||f|dd|\} }| tjur{n | | 7} |sgtd|r| |fS|j ||| fi||fS) NFzdecoding as tagged ANYrz-decoding as untagged ANY, header substrate %srVTr`ra)r\r rrrr r9r:rr;r)r-r5r2rr@rrb)rrrrrrrrrisTaggedrerr,r_r r r!r$WsL     zAnyDecoder.indefLenValueDecoderr%rBr r r r!r5s  rc@r)UTF8StringDecoderN)r&r'r(r UTF8Stringr)r r r r!rrrc@r)NumericStringDecoderN)r&r'r(r NumericStringr)r r r r!rrrc@r)PrintableStringDecoderN)r&r'r(r PrintableStringr)r r r r!rrrc@r)TeletexStringDecoderN)r&r'r(r TeletexStringr)r r r r!rrrc@r)VideotexStringDecoderN)r&r'r(r VideotexStringr)r r r r!rrrc@r)IA5StringDecoderN)r&r'r(r IA5Stringr)r r r r!rrrc@r)GraphicStringDecoderN)r&r'r(r GraphicStringr)r r r r!rrrc@r)VisibleStringDecoderN)r&r'r(r VisibleStringr)r r r r!r rr c@r)GeneralStringDecoderN)r&r'r(r GeneralStringr)r r r r!r rr c@r)UniversalStringDecoderN)r&r'r(r UniversalStringr)r r r r!r rr c@r)BMPStringDecoderN)r&r'r(r BMPStringr)r r r r!rrrc@r)ObjectDescriptorDecoderN)r&r'r(rObjectDescriptorr)r r r r!rrrc@r)GeneralizedTimeDecoderN)r&r'r(rGeneralizedTimer)r r r r!rrrc@r)UTCTimeDecoderN)r&r'r(rUTCTimer)r r r r!rrrNcCsg|]}|qSr r ).0xr r r! rrc@s<eZdZeZeZdZifddZddde ddfddZ dS)DecoderTcCs&||_||_i|_i|_td|_dS)N)rr)_Decoder__tagMap_Decoder__typeMap_Decoder__tagCache_Decoder__tagSetCacher_Decoder__eooSentinel)rrtypeMapr r r!__init__s zDecoder.__init__Nc Kstrtdtj|t|t|f|dd} | r5|jr5|dd|jkr5tr,tdtj |ddfSt } |j } |j } |j } |j}|}|tur|tur|sUtdd}|d}|d d}z| |}Wnatyt|}|d @}|d @}|d @}|d krd}d}d}z# t||}|d 7}|d K}||d@O}|d@snq||d}Wn tytdwtj|||d}|r|| |<Ynw|dur|rz||}Wntytd|}|||<Yn wtd|}n||}t}trtd||tur|s tdt|d}|dkrd }|}n?|dkrV|d@}t|d |d }t||krAtd|t||fd}|D] }|dK}||O}qE|d 7}nd }d}||d}|dkro|jsntdnt||krtd|t|t}trtd|t|dkr|p|d|f|tur|durt}nt}|turz| |}Wn tyd}Ynw|rt}nz | |dd }Wn tyd}Ynw|rt}nt }trtd|r|j!j"pd|turdpdftj#|durdp|j$j!j"|tur!|j!t%j&urz||}Wn ty3d}Ynwtrtd |j'(D]\}}td!||j!j"fq@|j)rmtd"|j)(D]\}}td!||j!j"fq]td#|durwdpz|*|fn||j+ks||j,vr|}trtd$|j!j"nd}|durz| |j-}trtd%|j-fWn1tyt|j+j.|j+j.}z| |}trtd&|fWn tyd}YnwYnw|r|}t}nt }nd}t }tr!td'|tur|j!j"pd|tur dp dftj#|durdp|j!j"|tur|/d(ds4|s4d)d*}|j0|d+|dkrQ|j1||||t||fi|\} }n|j2||||t||fi|\} }trtd,|j!j"| j!j"t3| t4j5ry| 6pz| |rt|pdft}nf|t ur|r|dj7tj8kr|dj9tj:krt;}t}nd}|j<}trtd-|r|j!j"pd|turdpd.f|t=ur|j>}trtd/|j!j"t}|t?urtd0||f|tusJtrtjtd1tj| |fS)2NzWdecoder called at scope %s with state %d, working with up to %d octets of substrate: %sr?Frpzend-of-octets sentinel foundz"Short octet stream on tag decodingTrrMr~ rQrkrjz'Short octet stream on long tag decoding)tagClassrHtagIdr z$tag decoded into %s, decoding lengthz%Short octet stream on length decodingz %s<%s at %sr{rzz6Indefinite length encoding not supported by this codecz%d-octet shortz6value length decoded into %d, payload substrate is: %sz/codec %s chosen by a built-in type, decoding %szr4zas explicit tag?z!candidate ASN.1 spec is a map of:z %s -> %szbut neither of: z,new candidate ASN.1 spec is %s, chosen by %szcandidate ASN.1 spec is %sz8value decoder chosen for an ambiguous type by type ID %szvalue decoder chosen by base %sz*codec %s chosen by ASN.1 spec, decoding %s recursiveFlagcSs||d|fSr+r )arcr r r! rz"Decoder.__call__..)rz@codec %s yields type %s, value: %s ...remaining substrate is: %szcodec %s chosen, decoding %sz as failurezcodec %s chosen, decoding valuez%s not in asn1Spec: %rz%decoder left scope %s, call completed)@r9rscoper:r;popsupportIndefLengthr rr@r2rrrrstStop stDecodeTagrrbrrrr TagrstDecodeLengthrrstGetValueDecoderstGetValueDecoderByTagstGetValueDecoderByAsn1Spec stDecodeValuestTryAsExplicitTagr\r&pushr)r r presentTypesr skipTypesprettyPrintTyperrrrr0updater$r" isinstancer Asn1Item prettyPrintrHrr%tagClassUniversalexplicitTagDecoderdefaultErrorStatestDumpRawValuedefaultRawDecoderstErrorCondition)rrrrrrrrrr?r4rr!tagCache tagSetCacher isShortTag firstOctetlastTag integerTagr%rHr&lengthOctetIdxsize encodedLength lengthOctetconcreteDecoder chosenSpecr baseTagSetr r r!__call__s          #              .    0"  $   4      F 0   # zDecoder.__call__) r&r'r(rErBrrDr.r"r0rSr r r r!r s r)npyasn1rrpyasn1.codec.berrpyasn1.compat.integerrpyasn1.compat.octetsrrrr pyasn1.typer r r r rr__all__registerLoggeer& DEBUG_DECODERr9r2objectrr*r7rArErLrPrdrgrirwrrrrrrrrrrrrrrrrrr r r rrrrrJrrNrcrfrhrv Enumeratedrrrrrrrrrrrr r rrrrrrrrrrCr!values typeDecoderr)r\ranger0r2r3r5r4r7r6rCrEr/rrr r r r!s          +`C9kSeb