PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /opt/gsutil/third_party/pyasn1/tests/codec/ber
Viewing File: /opt/gsutil/third_party/pyasn1/tests/codec/ber/test_decoder.py
# # This file is part of pyasn1 software. # # Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com> # License: https://pyasn1.readthedocs.io/en/latest/license.html # import gzip import io import os import sys import tempfile import unittest import zipfile from tests.base import BaseTestCase from pyasn1.type import tag from pyasn1.type import namedtype from pyasn1.type import opentype from pyasn1.type import univ from pyasn1.type import char from pyasn1.codec import streaming from pyasn1.codec.ber import decoder from pyasn1.codec.ber import eoo from pyasn1 import error class LargeTagDecoderTestCase(BaseTestCase): def testLargeTag(self): assert decoder.decode(bytes((127, 141, 245, 182, 253, 47, 3, 2, 1, 1))) == (1, b'') def testLongTag(self): assert decoder.decode(bytes((0x1f, 2, 1, 0)))[0].tagSet == univ.Integer.tagSet def testTagsEquivalence(self): integer = univ.Integer(2).subtype(implicitTag=tag.Tag(tag.tagClassContext, 0, 0)) assert decoder.decode(bytes((0x9f, 0x80, 0x00, 0x02, 0x01, 0x02)), asn1Spec=integer) == decoder.decode( bytes((0x9f, 0x00, 0x02, 0x01, 0x02)), asn1Spec=integer) class DecoderCacheTestCase(BaseTestCase): def testCache(self): assert decoder.decode(bytes((0x1f, 2, 1, 0))) == decoder.decode(bytes((0x1f, 2, 1, 0))) class IntegerDecoderTestCase(BaseTestCase): def testPosInt(self): assert decoder.decode(bytes((2, 1, 12))) == (12, b'') def testNegInt(self): assert decoder.decode(bytes((2, 1, 244))) == (-12, b'') def testZero(self): assert decoder.decode(bytes((2, 0))) == (0, b'') def testZeroLong(self): assert decoder.decode(bytes((2, 1, 0))) == (0, b'') def testMinusOne(self): assert decoder.decode(bytes((2, 1, 255))) == (-1, b'') def testPosLong(self): assert decoder.decode( bytes((2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255)) ) == (0xffffffffffffffff, b'') def testNegLong(self): assert decoder.decode( bytes((2, 9, 255, 0, 0, 0, 0, 0, 0, 0, 1)) ) == (-0xffffffffffffffff, b'') def testSpec(self): try: decoder.decode( bytes((2, 1, 12)), asn1Spec=univ.Null() ) == (12, b'') except error.PyAsn1Error: pass else: assert 0, 'wrong asn1Spec worked out' assert decoder.decode( bytes((2, 1, 12)), asn1Spec=univ.Integer() ) == (12, b'') def testTagFormat(self): try: decoder.decode(bytes((34, 1, 12))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' class BooleanDecoderTestCase(BaseTestCase): def testTrue(self): assert decoder.decode(bytes((1, 1, 1))) == (1, b'') def testTrueNeg(self): assert decoder.decode(bytes((1, 1, 255))) == (1, b'') def testExtraTrue(self): assert decoder.decode(bytes((1, 1, 1, 0, 120, 50, 50))) == (1, bytes((0, 120, 50, 50))) def testFalse(self): assert decoder.decode(bytes((1, 1, 0))) == (0, b'') def testTagFormat(self): try: decoder.decode(bytes((33, 1, 1))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' class BitStringDecoderTestCase(BaseTestCase): def testDefMode(self): assert decoder.decode( bytes((3, 3, 1, 169, 138)) ) == ((1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), b'') def testIndefMode(self): assert decoder.decode( bytes((3, 3, 1, 169, 138)) ) == ((1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), b'') def testDefModeChunked(self): assert decoder.decode( bytes((35, 8, 3, 2, 0, 169, 3, 2, 1, 138)) ) == ((1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), b'') def testIndefModeChunked(self): assert decoder.decode( bytes((35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)) ) == ((1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), b'') def testDefModeChunkedSubst(self): assert decoder.decode( bytes((35, 8, 3, 2, 0, 169, 3, 2, 1, 138)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((3, 2, 0, 169, 3, 2, 1, 138)), b'') def testDefModeChunkedSubstV04(self): assert decoder.decode( bytes((35, 8, 3, 2, 0, 169, 3, 2, 1, 138)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((3, 2, 0, 169, 3, 2, 1, 138)), b'') def testIndefModeChunkedSubst(self): assert decoder.decode( bytes((35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), b'') def testIndefModeChunkedSubstV04(self): assert decoder.decode( bytes((35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), b'') def testTypeChecking(self): try: decoder.decode(bytes((35, 4, 2, 2, 42, 42))) except error.PyAsn1Error: pass else: assert 0, 'accepted mis-encoded bit-string constructed out of an integer' class OctetStringDecoderTestCase(BaseTestCase): def testDefMode(self): assert decoder.decode( bytes((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)) ) == (b'Quick brown fox', b'') def testIndefMode(self): assert decoder.decode( bytes((36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0)) ) == (b'Quick brown fox', b'') def testDefModeChunked(self): assert decoder.decode( bytes( (36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)) ) == (b'Quick brown fox', b'') def testIndefModeChunked(self): assert decoder.decode( bytes((36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)) ) == (b'Quick brown fox', b'') def testDefModeChunkedSubst(self): assert decoder.decode( bytes( (36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), b'') def testDefModeChunkedSubstV04(self): assert decoder.decode( bytes( (36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), b'') def testIndefModeChunkedSubst(self): assert decoder.decode( bytes((36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes( (4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), b'') def testIndefModeChunkedSubstV04(self): assert decoder.decode( bytes((36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes( (4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), b'') class ExpTaggedOctetStringDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.o = univ.OctetString( 'Quick brown fox', tagSet=univ.OctetString.tagSet.tagExplicitly( tag.Tag(tag.tagClassApplication, tag.tagFormatSimple, 5) )) def testDefMode(self): o, r = decoder.decode( bytes((101, 17, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)) ) assert not r assert self.o == o assert self.o.tagSet == o.tagSet assert self.o.isSameTypeWith(o) def testIndefMode(self): o, r = decoder.decode( bytes((101, 128, 36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)) ) assert not r assert self.o == o assert self.o.tagSet == o.tagSet assert self.o.isSameTypeWith(o) def testDefModeChunked(self): o, r = decoder.decode( bytes((101, 25, 36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)) ) assert not r assert self.o == o assert self.o.tagSet == o.tagSet assert self.o.isSameTypeWith(o) def testIndefModeChunked(self): o, r = decoder.decode( bytes((101, 128, 36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0, 0, 0)) ) assert not r assert self.o == o assert self.o.tagSet == o.tagSet assert self.o.isSameTypeWith(o) def testDefModeSubst(self): assert decoder.decode( bytes((101, 17, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), b'') def testDefModeSubstV04(self): assert decoder.decode( bytes((101, 17, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), b'') def testIndefModeSubst(self): assert decoder.decode( bytes(( 101, 128, 36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes( (36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), b'') def testIndefModeSubstV04(self): assert decoder.decode( bytes(( 101, 128, 36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes( (36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), b'') class NullDecoderTestCase(BaseTestCase): def testNull(self): assert decoder.decode(bytes((5, 0))) == (b'', b'') def testTagFormat(self): try: decoder.decode(bytes((37, 0))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' # Useful analysis of OID encoding issues could be found here: # https://misc.daniel-marschall.de/asn.1/oid_facts.html class ObjectIdentifierDecoderTestCase(BaseTestCase): def testOne(self): assert decoder.decode( bytes((6, 6, 43, 6, 0, 191, 255, 126)) ) == ((1, 3, 6, 0, 0xffffe), b'') def testEdge1(self): assert decoder.decode( bytes((6, 1, 39)) ) == ((0, 39), b'') def testEdge2(self): assert decoder.decode( bytes((6, 1, 79)) ) == ((1, 39), b'') def testEdge3(self): assert decoder.decode( bytes((6, 1, 120)) ) == ((2, 40), b'') def testEdge4(self): assert decoder.decode( bytes((6, 5, 0x90, 0x80, 0x80, 0x80, 0x4F)) ) == ((2, 0xffffffff), b'') def testEdge5(self): assert decoder.decode( bytes((6, 1, 0x7F)) ) == ((2, 47), b'') def testEdge6(self): assert decoder.decode( bytes((6, 2, 0x81, 0x00)) ) == ((2, 48), b'') def testEdge7(self): assert decoder.decode( bytes((6, 3, 0x81, 0x34, 0x03)) ) == ((2, 100, 3), b'') def testEdge8(self): assert decoder.decode( bytes((6, 2, 133, 0)) ) == ((2, 560), b'') def testEdge9(self): assert decoder.decode( bytes((6, 4, 0x88, 0x84, 0x87, 0x02)) ) == ((2, 16843570), b'') def testNonLeading0x80(self): assert decoder.decode( bytes((6, 5, 85, 4, 129, 128, 0)), ) == ((2, 5, 4, 16384), b'') def testLeading0x80Case1(self): try: decoder.decode( bytes((6, 5, 85, 4, 128, 129, 0)) ) except error.PyAsn1Error: pass else: assert 0, 'Leading 0x80 tolerated' def testLeading0x80Case2(self): try: decoder.decode( bytes((6, 7, 1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F)) ) except error.PyAsn1Error: pass else: assert 0, 'Leading 0x80 tolerated' def testLeading0x80Case3(self): try: decoder.decode( bytes((6, 2, 0x80, 1)) ) except error.PyAsn1Error: pass else: assert 0, 'Leading 0x80 tolerated' def testLeading0x80Case4(self): try: decoder.decode( bytes((6, 2, 0x80, 0x7F)) ) except error.PyAsn1Error: pass else: assert 0, 'Leading 0x80 tolerated' def testTagFormat(self): try: decoder.decode(bytes((38, 1, 239))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' def testZeroLength(self): try: decoder.decode(bytes((6, 0, 0))) except error.PyAsn1Error: pass else: assert 0, 'zero length tolerated' def testIndefiniteLength(self): try: decoder.decode(bytes((6, 128, 0))) except error.PyAsn1Error: pass else: assert 0, 'indefinite length tolerated' def testReservedLength(self): try: decoder.decode(bytes((6, 255, 0))) except error.PyAsn1Error: pass else: assert 0, 'reserved length tolerated' def testLarge1(self): assert decoder.decode( bytes((0x06, 0x11, 0x83, 0xC6, 0xDF, 0xD4, 0xCC, 0xB3, 0xFF, 0xFF, 0xFE, 0xF0, 0xB8, 0xD6, 0xB8, 0xCB, 0xE2, 0xB7, 0x17)) ) == ((2, 18446744073709551535184467440737095), b'') def testLarge2(self): assert decoder.decode( bytes((0x06, 0x13, 0x88, 0x37, 0x83, 0xC6, 0xDF, 0xD4, 0xCC, 0xB3, 0xFF, 0xFF, 0xFE, 0xF0, 0xB8, 0xD6, 0xB8, 0xCB, 0xE2, 0xB6, 0x47)) ) == ((2, 999, 18446744073709551535184467440737095), b'') class RelativeOIDDecoderTestCase(BaseTestCase): def testOne(self): obj, rest = decoder.decode(bytes((13, 1, 39))) assert str(obj) == '39' assert rest == b'' def testTwo(self): assert decoder.decode( bytes((13, 2, 5, 6)) ) == ((5, 6), b'') def testThree(self): assert decoder.decode( bytes((13, 3, 5, 6, 7)) ) == ((5, 6, 7), b'') def testNonLeading0x80(self): assert decoder.decode( bytes((13, 5, 85, 4, 129, 128, 0)), ) == ((85, 4, 16384), b'') def testLeading0x80(self): try: decoder.decode( bytes((13, 5, 85, 4, 128, 129, 0)) ) except error.PyAsn1Error: pass else: assert 0, 'Leading 0x80 tolerated' def testTagFormat(self): try: decoder.decode(bytes((38, 1, 239))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' def testZeroLength(self): try: decoder.decode(bytes((13, 0, 0))) except error.PyAsn1Error: pass else: assert 0, 'zero length tolerated' def testIndefiniteLength(self): try: decoder.decode(bytes((13, 128, 0))) except error.PyAsn1Error: pass else: assert 0, 'indefinite length tolerated' def testReservedLength(self): try: decoder.decode(bytes((13, 255, 0))) except error.PyAsn1Error: pass else: assert 0, 'reserved length tolerated' def testLarge(self): assert decoder.decode( bytes((0x0D, 0x13, 0x88, 0x37, 0x83, 0xC6, 0xDF, 0xD4, 0xCC, 0xB3, 0xFF, 0xFF, 0xFE, 0xF0, 0xB8, 0xD6, 0xB8, 0xCB, 0xE2, 0xB6, 0x47)) ) == ((1079, 18446744073709551535184467440737095), b'') class RealDecoderTestCase(BaseTestCase): def testChar(self): assert decoder.decode( bytes((9, 7, 3, 49, 50, 51, 69, 49, 49)) ) == (univ.Real((123, 10, 11)), b'') def testBin1(self): # check base = 2 assert decoder.decode( # (0.5, 2, 0) encoded with base = 2 bytes((9, 3, 128, 255, 1)) ) == (univ.Real((1, 2, -1)), b'') def testBin2(self): # check base = 2 and scale factor assert decoder.decode( # (3.25, 2, 0) encoded with base = 8 bytes((9, 3, 148, 255, 13)) ) == (univ.Real((26, 2, -3)), b'') def testBin3(self): # check base = 16 assert decoder.decode( # (0.00390625, 2, 0) encoded with base = 16 bytes((9, 3, 160, 254, 1)) ) == (univ.Real((1, 2, -8)), b'') def testBin4(self): # check exponent = 0 assert decoder.decode( # (1, 2, 0) encoded with base = 2 bytes((9, 3, 128, 0, 1)) ) == (univ.Real((1, 2, 0)), b'') def testBin5(self): # case of 2 octs for exponent and negative exponent assert decoder.decode( # (3, 2, -1020) encoded with base = 16 bytes((9, 4, 161, 255, 1, 3)) ) == (univ.Real((3, 2, -1020)), b'') # TODO: this requires Real type comparison fix # def testBin6(self): # assert decoder.decode( # bytes((9, 5, 162, 0, 255, 255, 1)) # ) == (univ.Real((1, 2, 262140)), b'') # def testBin7(self): # assert decoder.decode( # bytes((9, 7, 227, 4, 1, 35, 69, 103, 1)) # ) == (univ.Real((-1, 2, 76354972)), b'') def testPlusInf(self): assert decoder.decode( bytes((9, 1, 64)) ) == (univ.Real('inf'), b'') def testMinusInf(self): assert decoder.decode( bytes((9, 1, 65)) ) == (univ.Real('-inf'), b'') def testEmpty(self): assert decoder.decode( bytes((9, 0)) ) == (univ.Real(0.0), b'') def testTagFormat(self): try: decoder.decode(bytes((41, 0))) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' def testShortEncoding(self): try: decoder.decode(bytes((9, 1, 131))) except error.PyAsn1Error: pass else: assert 0, 'accepted too-short real' class UniversalStringDecoderTestCase(BaseTestCase): def testDecoder(self): assert decoder.decode(bytes((28, 12, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99))) == (char.UniversalString('abc'), b'') class BMPStringDecoderTestCase(BaseTestCase): def testDecoder(self): assert decoder.decode(bytes((30, 6, 0, 97, 0, 98, 0, 99))) == (char.BMPString('abc'), b'') class UTF8StringDecoderTestCase(BaseTestCase): def testDecoder(self): assert decoder.decode(bytes((12, 3, 97, 98, 99))) == (char.UTF8String('abc'), b'') class SequenceOfDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.SequenceOf(componentType=univ.OctetString()) self.s.setComponentByPosition(0, univ.OctetString('quick brown')) def testDefMode(self): assert decoder.decode( bytes((48, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) ) == (self.s, b'') def testIndefMode(self): assert decoder.decode( bytes((48, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)) ) == (self.s, b'') def testDefModeChunked(self): assert decoder.decode( bytes((48, 19, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)) ) == (self.s, b'') def testIndefModeChunked(self): assert decoder.decode( bytes((48, 128, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)) ) == (self.s, b'') def testSchemalessDecoder(self): assert decoder.decode( bytes((48, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=univ.SequenceOf() ) == (self.s, b'') class ExpTaggedSequenceOfDecoderTestCase(BaseTestCase): def testWithSchema(self): s = univ.SequenceOf().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)) s2, r = decoder.decode( bytes((163, 15, 48, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=s ) assert not r assert s2 == [b'quick brown'] assert s.tagSet == s2.tagSet def testWithoutSchema(self): s = univ.SequenceOf().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)) s2, r = decoder.decode( bytes((163, 15, 48, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) ) assert not r assert s2 == [b'quick brown'] assert s.tagSet == s2.tagSet class SequenceOfDecoderWithSchemaTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.SequenceOf(componentType=univ.OctetString()) self.s.setComponentByPosition(0, univ.OctetString('quick brown')) def testDefMode(self): assert decoder.decode( bytes((48, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testIndefMode(self): assert decoder.decode( bytes((48, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testDefModeChunked(self): assert decoder.decode( bytes((48, 19, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testIndefModeChunked(self): assert decoder.decode( bytes((48, 128, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') class SetOfDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.SetOf(componentType=univ.OctetString()) self.s.setComponentByPosition(0, univ.OctetString('quick brown')) def testDefMode(self): assert decoder.decode( bytes((49, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) ) == (self.s, b'') def testIndefMode(self): assert decoder.decode( bytes((49, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)) ) == (self.s, b'') def testDefModeChunked(self): assert decoder.decode( bytes((49, 19, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)) ) == (self.s, b'') def testIndefModeChunked(self): assert decoder.decode( bytes((49, 128, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)) ) == (self.s, b'') def testSchemalessDecoder(self): assert decoder.decode( bytes((49, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=univ.SetOf() ) == (self.s, b'') class SetOfDecoderWithSchemaTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.SetOf(componentType=univ.OctetString()) self.s.setComponentByPosition(0, univ.OctetString('quick brown')) def testDefMode(self): assert decoder.decode( bytes((49, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testIndefMode(self): assert decoder.decode( bytes((49, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testDefModeChunked(self): assert decoder.decode( bytes((49, 19, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testIndefModeChunked(self): assert decoder.decode( bytes((49, 128, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') class SequenceDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.NamedType('first-name', univ.OctetString(b'')), namedtype.NamedType('age', univ.Integer(33)) ) ) self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) self.s.setComponentByPosition(2, univ.Integer(1)) def testWithOptionalAndDefaultedDefMode(self): assert decoder.decode( bytes((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) ) == (self.s, b'') def testWithOptionalAndDefaultedIndefMode(self): assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeChunked(self): assert decoder.decode( bytes( (48, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)) ) == (self.s, b'') def testWithOptionalAndDefaultedIndefModeChunked(self): assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeSubst(self): assert decoder.decode( bytes((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), b'') def testWithOptionalAndDefaultedDefModeSubstV04(self): assert decoder.decode( bytes((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), b'') def testWithOptionalAndDefaultedIndefModeSubst(self): assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes( (5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), b'') def testWithOptionalAndDefaultedIndefModeSubstV04(self): assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes( (5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), b'') def testTagFormat(self): try: decoder.decode( bytes((16, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) ) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' class SequenceDecoderWithSchemaTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.OptionalNamedType('first-name', univ.OctetString()), namedtype.DefaultedNamedType('age', univ.Integer(33)), ) ) def __init(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) def __initWithOptional(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) def __initWithDefaulted(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(2, univ.Integer(1)) def __initWithOptionalAndDefaulted(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) self.s.setComponentByPosition(2, univ.Integer(1)) def testDefMode(self): self.__init() assert decoder.decode( bytes((48, 2, 5, 0)), asn1Spec=self.s ) == (self.s, b'') def testIndefMode(self): self.__init() assert decoder.decode( bytes((48, 128, 5, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testDefModeChunked(self): self.__init() assert decoder.decode( bytes((48, 2, 5, 0)), asn1Spec=self.s ) == (self.s, b'') def testIndefModeChunked(self): self.__init() assert decoder.decode( bytes((48, 128, 5, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalDefMode(self): self.__initWithOptional() assert decoder.decode( bytes((48, 15, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionaIndefMode(self): self.__initWithOptional() assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalDefModeChunked(self): self.__initWithOptional() assert decoder.decode( bytes((48, 21, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalIndefModeChunked(self): self.__initWithOptional() assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedDefMode(self): self.__initWithDefaulted() assert decoder.decode( bytes((48, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedIndefMode(self): self.__initWithDefaulted() assert decoder.decode( bytes((48, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedDefModeChunked(self): self.__initWithDefaulted() assert decoder.decode( bytes((48, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedIndefModeChunked(self): self.__initWithDefaulted() assert decoder.decode( bytes((48, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedDefMode(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedIndefMode(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeChunked(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes( (48, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedIndefModeChunked(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') class SequenceDecoderWithUntaggedOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType('blob', univ.Any(), openType=openType) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 6, 2, 1, 1, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1] == 12 def testDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode( bytes((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 2 assert s[1] == univ.OctetString('quick brown') def testDecodeOpenTypesUnknownType(self): try: s, r = decoder.decode( bytes((48, 6, 2, 1, 2, 6, 1, 39)), asn1Spec=self.s, decodeOpenTypes=True ) except error.PyAsn1Error: pass else: assert False, 'unknown open type tolerated' def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes((48, 6, 2, 1, 3, 6, 1, 39)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1] == univ.OctetString(hexValue='060127') def testDontDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 6, 2, 1, 1, 2, 1, 12)), asn1Spec=self.s ) assert not r assert s[0] == 1 assert s[1] == bytes((2, 1, 12)) def testDontDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode( bytes((48, 16, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) assert not r assert s[0] == 2 assert s[1] == bytes((4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) class SequenceDecoderWithImplicitlyTaggedOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType( 'blob', univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)), openType=openType ) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 1, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1] == 12 def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 3, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1] == univ.OctetString(hexValue='02010C') class SequenceDecoderWithExplicitlyTaggedOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType( 'blob', univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)), openType=openType ) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 1, 163, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1] == 12 def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 3, 163, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1] == univ.OctetString(hexValue='02010C') class SequenceDecoderWithUnaggedSetOfOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType('blob', univ.SetOf(componentType=univ.Any()), openType=openType) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 1, 49, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1][0] == 12 def testDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode( bytes((48, 18, 2, 1, 2, 49, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 2 assert s[1][0] == univ.OctetString('quick brown') def testDecodeOpenTypesUnknownType(self): try: s, r = decoder.decode( bytes((48, 6, 2, 1, 2, 6, 1, 39)), asn1Spec=self.s, decodeOpenTypes=True ) except error.PyAsn1Error: pass else: assert False, 'unknown open type tolerated' def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 3, 49, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1][0] == univ.OctetString(hexValue='02010c') def testDontDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 8, 2, 1, 1, 49, 3, 2, 1, 12)), asn1Spec=self.s ) assert not r assert s[0] == 1 assert s[1][0] == bytes((2, 1, 12)) def testDontDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode( bytes((48, 18, 2, 1, 2, 49, 13, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) assert not r assert s[0] == 2 assert s[1][0] == bytes((4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) class SequenceDecoderWithImplicitlyTaggedSetOfOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType( 'blob', univ.SetOf( componentType=univ.Any().subtype( implicitTag=tag.Tag( tag.tagClassContext, tag.tagFormatSimple, 3))), openType=openType ) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 10, 2, 1, 1, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1][0] == 12 def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes((48, 10, 2, 1, 3, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1][0] == univ.OctetString(hexValue='02010C') class SequenceDecoderWithExplicitlyTaggedSetOfOpenTypesTestCase(BaseTestCase): def setUp(self): openType = opentype.OpenType( 'id', {1: univ.Integer(), 2: univ.OctetString()} ) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('id', univ.Integer()), namedtype.NamedType( 'blob', univ.SetOf( componentType=univ.Any().subtype( explicitTag=tag.Tag( tag.tagClassContext, tag.tagFormatSimple, 3))), openType=openType ) ) ) def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode( bytes((48, 10, 2, 1, 1, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 1 assert s[1][0] == 12 def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode( bytes( (48, 10, 2, 1, 3, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True ) assert not r assert s[0] == 3 assert s[1][0] == univ.OctetString(hexValue='02010C') class SetDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Set( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.NamedType('first-name', univ.OctetString(b'')), namedtype.NamedType('age', univ.Integer(33)) ) ) self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) self.s.setComponentByPosition(2, univ.Integer(1)) def testWithOptionalAndDefaultedDefMode(self): assert decoder.decode( bytes((49, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) ) == (self.s, b'') def testWithOptionalAndDefaultedIndefMode(self): assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeChunked(self): assert decoder.decode( bytes( (49, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)) ) == (self.s, b'') def testWithOptionalAndDefaultedIndefModeChunked(self): assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeSubst(self): assert decoder.decode( bytes((49, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), b'') def testWithOptionalAndDefaultedDefModeSubstV04(self): assert decoder.decode( bytes((49, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), b'') def testWithOptionalAndDefaultedIndefModeSubst(self): assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes( (5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), b'') def testWithOptionalAndDefaultedIndefModeSubstV04(self): assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes( (5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), b'') def testTagFormat(self): try: decoder.decode( bytes((16, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) ) except error.PyAsn1Error: pass else: assert 0, 'wrong tagFormat worked out' class SetDecoderWithSchemaTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Set( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.OptionalNamedType('first-name', univ.OctetString()), namedtype.DefaultedNamedType('age', univ.Integer(33)), ) ) def __init(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) def __initWithOptional(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) def __initWithDefaulted(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(2, univ.Integer(1)) def __initWithOptionalAndDefaulted(self): self.s.clear() self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) self.s.setComponentByPosition(2, univ.Integer(1)) def testDefMode(self): self.__init() assert decoder.decode( bytes((49, 128, 5, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testIndefMode(self): self.__init() assert decoder.decode( bytes((49, 128, 5, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testDefModeChunked(self): self.__init() assert decoder.decode( bytes((49, 2, 5, 0)), asn1Spec=self.s ) == (self.s, b'') def testIndefModeChunked(self): self.__init() assert decoder.decode( bytes((49, 128, 5, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalDefMode(self): self.__initWithOptional() assert decoder.decode( bytes((49, 15, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalIndefMode(self): self.__initWithOptional() assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalDefModeChunked(self): self.__initWithOptional() assert decoder.decode( bytes((49, 21, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalIndefModeChunked(self): self.__initWithOptional() assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedDefMode(self): self.__initWithDefaulted() assert decoder.decode( bytes((49, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedIndefMode(self): self.__initWithDefaulted() assert decoder.decode( bytes((49, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedDefModeChunked(self): self.__initWithDefaulted() assert decoder.decode( bytes((49, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithDefaultedIndefModeChunked(self): self.__initWithDefaulted() assert decoder.decode( bytes((49, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedDefMode(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeReordered(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 18, 2, 1, 1, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 5, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedIndefMode(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedIndefModeReordered(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 128, 2, 1, 1, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 0, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedDefModeChunked(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s ) == (self.s, b'') def testWithOptionalAndDefaultedIndefModeChunked(self): self.__initWithOptionalAndDefaulted() assert decoder.decode( bytes((49, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s ) == (self.s, b'') class SequenceOfWithExpTaggedOctetStringDecoder(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.SequenceOf( componentType=univ.OctetString().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)) ) self.s.setComponentByPosition(0, 'q') self.s2 = univ.SequenceOf() def testDefModeSchema(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113)), asn1Spec=self.s) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeSchema(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0)), asn1Spec=self.s) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testDefModeNoComponent(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113)), asn1Spec=self.s2) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeNoComponent(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0)), asn1Spec=self.s2) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testDefModeSchemaless(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113))) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeSchemaless(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0))) assert not r assert s == self.s assert s.tagSet == self.s.tagSet class SequenceWithExpTaggedOctetStringDecoder(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType( 'x', univ.OctetString().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)) ) ) ) self.s.setComponentByPosition(0, 'q') self.s2 = univ.Sequence() def testDefModeSchema(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113)), asn1Spec=self.s) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeSchema(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0)), asn1Spec=self.s) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testDefModeNoComponent(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113)), asn1Spec=self.s2) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeNoComponent(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0)), asn1Spec=self.s2) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testDefModeSchemaless(self): s, r = decoder.decode(bytes((48, 5, 163, 3, 4, 1, 113))) assert not r assert s == self.s assert s.tagSet == self.s.tagSet def testIndefModeSchemaless(self): s, r = decoder.decode(bytes((48, 128, 163, 128, 4, 1, 113, 0, 0, 0, 0))) assert not r assert s == self.s assert s.tagSet == self.s.tagSet class ChoiceDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Choice( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.NamedType('number', univ.Integer(0)), namedtype.NamedType('string', univ.OctetString()) ) ) def testBySpec(self): self.s.setComponentByPosition(0, univ.Null(b'')) assert decoder.decode( bytes((5, 0)), asn1Spec=self.s ) == (self.s, b'') def testWithoutSpec(self): self.s.setComponentByPosition(0, univ.Null(b'')) assert decoder.decode(bytes((5, 0))) == (self.s, b'') assert decoder.decode(bytes((5, 0))) == (univ.Null(b''), b'') def testUndefLength(self): self.s.setComponentByPosition(2, univ.OctetString('abcdefgh')) assert decoder.decode(bytes((36, 128, 4, 3, 97, 98, 99, 4, 3, 100, 101, 102, 4, 2, 103, 104, 0, 0)), asn1Spec=self.s) == (self.s, b'') def testExplicitTag(self): s = self.s.subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4)) s.setComponentByPosition(0, univ.Null(b'')) assert decoder.decode(bytes((164, 2, 5, 0)), asn1Spec=s) == (s, b'') def testExplicitTagUndefLength(self): s = self.s.subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4)) s.setComponentByPosition(0, univ.Null(b'')) assert decoder.decode(bytes((164, 128, 5, 0, 0, 0)), asn1Spec=s) == (s, b'') class AnyDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Any() def testByUntagged(self): assert decoder.decode( bytes((4, 3, 102, 111, 120)), asn1Spec=self.s ) == (univ.Any('\004\003fox'), b'') def testTaggedEx(self): s = univ.Any('\004\003fox').subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) assert decoder.decode(bytes((164, 5, 4, 3, 102, 111, 120)), asn1Spec=s) == (s, b'') def testTaggedIm(self): s = univ.Any('\004\003fox').subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) assert decoder.decode(bytes((132, 5, 4, 3, 102, 111, 120)), asn1Spec=s) == (s, b'') def testByUntaggedIndefMode(self): assert decoder.decode( bytes((4, 3, 102, 111, 120)), asn1Spec=self.s ) == (univ.Any('\004\003fox'), b'') def testTaggedExIndefMode(self): s = univ.Any('\004\003fox').subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) assert decoder.decode(bytes((164, 128, 4, 3, 102, 111, 120, 0, 0)), asn1Spec=s) == (s, b'') def testTaggedImIndefMode(self): s = univ.Any('\004\003fox').subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) assert decoder.decode(bytes((164, 128, 4, 3, 102, 111, 120, 0, 0)), asn1Spec=s) == (s, b'') def testByUntaggedSubst(self): assert decoder.decode( bytes((4, 3, 102, 111, 120)), asn1Spec=self.s, substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((4, 3, 102, 111, 120)), b'') def testByUntaggedSubstV04(self): assert decoder.decode( bytes((4, 3, 102, 111, 120)), asn1Spec=self.s, substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((4, 3, 102, 111, 120)), b'') def testTaggedExSubst(self): assert decoder.decode( bytes((164, 5, 4, 3, 102, 111, 120)), asn1Spec=self.s, substrateFun=lambda a, b, c, d: streaming.readFromStream(b, c) ) == (bytes((164, 5, 4, 3, 102, 111, 120)), b'') def testTaggedExSubstV04(self): assert decoder.decode( bytes((164, 5, 4, 3, 102, 111, 120)), asn1Spec=self.s, substrateFun=lambda a, b, c: (b, b[c:]) ) == (bytes((164, 5, 4, 3, 102, 111, 120)), b'') class EndOfOctetsTestCase(BaseTestCase): def testUnexpectedEoo(self): try: decoder.decode(bytes((0, 0))) except error.PyAsn1Error: pass else: assert 0, 'end-of-contents octets accepted at top level' def testExpectedEoo(self): result, remainder = decoder.decode(bytes((0, 0)), allowEoo=True) assert eoo.endOfOctets.isSameTypeWith(result) and result == eoo.endOfOctets and result is eoo.endOfOctets assert remainder == b'' def testDefiniteNoEoo(self): try: decoder.decode(bytes((0x23, 0x02, 0x00, 0x00))) except error.PyAsn1Error: pass else: assert 0, 'end-of-contents octets accepted inside definite-length encoding' def testIndefiniteEoo(self): result, remainder = decoder.decode(bytes((0x23, 0x80, 0x00, 0x00))) assert result == () and remainder == b'', 'incorrect decoding of indefinite length end-of-octets' def testNoLongFormEoo(self): try: decoder.decode(bytes((0x23, 0x80, 0x00, 0x81, 0x00))) except error.PyAsn1Error: pass else: assert 0, 'end-of-contents octets accepted with invalid long-form length' def testNoConstructedEoo(self): try: decoder.decode(bytes((0x23, 0x80, 0x20, 0x00))) except error.PyAsn1Error: pass else: assert 0, 'end-of-contents octets accepted with invalid constructed encoding' def testNoEooData(self): try: decoder.decode(bytes((0x23, 0x80, 0x00, 0x01, 0x00))) except error.PyAsn1Error: pass else: assert 0, 'end-of-contents octets accepted with unexpected data' class NonStringDecoderTestCase(BaseTestCase): def setUp(self): BaseTestCase.setUp(self) self.s = univ.Sequence( componentType=namedtype.NamedTypes( namedtype.NamedType('place-holder', univ.Null(b'')), namedtype.NamedType('first-name', univ.OctetString(b'')), namedtype.NamedType('age', univ.Integer(33)) ) ) self.s.setComponentByPosition(0, univ.Null(b'')) self.s.setComponentByPosition(1, univ.OctetString('quick brown')) self.s.setComponentByPosition(2, univ.Integer(1)) self.substrate = bytes([48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1]) def testOctetString(self): s = list(decoder.StreamingDecoder( univ.OctetString(self.substrate), asn1Spec=self.s)) assert [self.s] == s def testAny(self): s = list(decoder.StreamingDecoder( univ.Any(self.substrate), asn1Spec=self.s)) assert [self.s] == s class ErrorOnDecodingTestCase(BaseTestCase): def testErrorCondition(self): decode = decoder.SingleItemDecoder( tagMap=decoder.TAG_MAP, typeMap=decoder.TYPE_MAP) substrate = bytes((00, 1, 2)) stream = streaming.asSeekableStream(substrate) try: asn1Object = next(decode(stream)) except error.PyAsn1Error: pass else: assert False, 'Unexpected decoder result %r' % (asn1Object,) def testRawDump(self): substrate = bytes((31, 8, 2, 1, 1, 131, 3, 2, 1, 12)) stream = streaming.asSeekableStream(substrate) class SingleItemEncoder(decoder.SingleItemDecoder): defaultErrorState = decoder.stDumpRawValue class StreamingDecoder(decoder.StreamingDecoder): SINGLE_ITEM_DECODER = SingleItemEncoder class OneShotDecoder(decoder.Decoder): STREAMING_DECODER = StreamingDecoder d = OneShotDecoder() asn1Object, rest = d(stream) assert isinstance(asn1Object, univ.Any), ( 'Unexpected raw dump type %r' % (asn1Object,)) assert asn1Object.asNumbers() == (31, 8, 2, 1, 1), ( 'Unexpected raw dump value %r' % (asn1Object,)) assert rest == bytes((131, 3, 2, 1, 12)), ( 'Unexpected rest of substrate after raw dump %r' % rest) class BinaryFileTestCase(BaseTestCase): """Assure that decode works on open binary files.""" def testOneObject(self): _, path = tempfile.mkstemp() try: with open(path, "wb") as out: out.write(bytes((2, 1, 12))) with open(path, "rb") as source: values = list(decoder.StreamingDecoder(source)) assert values == [12] finally: os.remove(path) def testMoreObjects(self): _, path = tempfile.mkstemp() try: with open(path, "wb") as out: out.write(bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0))) with open(path, "rb") as source: values = list(decoder.StreamingDecoder(source)) assert values == [12, (1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1)] finally: os.remove(path) def testInvalidFileContent(self): _, path = tempfile.mkstemp() try: with open(path, "wb") as out: out.write(bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0, 7))) with open(path, "rb") as source: list(decoder.StreamingDecoder(source)) except error.EndOfStreamError: pass finally: os.remove(path) class BytesIOTestCase(BaseTestCase): def testRead(self): source = bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)) stream = io.BytesIO(source) values = list(decoder.StreamingDecoder(stream)) assert values == [12, (1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1)] class UnicodeTestCase(BaseTestCase): def testFail(self): # This ensures that str objects cannot be parsed. source = bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)).decode("latin-1") try: next(decoder.StreamingDecoder(source)) except error.UnsupportedSubstrateError: pass else: assert False, 'Tolerated parsing broken unicode strings' class RestartableDecoderTestCase(BaseTestCase): class NonBlockingStream(io.BytesIO): block = False def read(self, size=-1): self.block = not self.block if self.block: return # this is what non-blocking streams sometimes do return io.BytesIO.read(self, size) def setUp(self): BaseTestCase.setUp(self) self.s = univ.SequenceOf(componentType=univ.OctetString()) self.s.setComponentByPosition(0, univ.OctetString('quick brown')) source = bytes( (48, 26, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)) self.stream = self.NonBlockingStream(source) def testPartialReadingFromNonBlockingStream(self): iterator = iter(decoder.StreamingDecoder(self.stream, asn1Spec=self.s)) res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' not in res.context res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' not in res.context res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 0 res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 0 res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 0 res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 1 res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 1 res = next(iterator) assert isinstance(res, error.SubstrateUnderrunError) assert 'asn1Object' in res.context assert isinstance(res.context['asn1Object'], univ.SequenceOf) assert res.context['asn1Object'].isValue assert len(res.context['asn1Object']) == 1 res = next(iterator) assert isinstance(res, univ.SequenceOf) assert res.isValue assert len(res) == 2 try: next(iterator) except StopIteration: pass else: assert False, 'End of stream not raised' class CompressedFilesTestCase(BaseTestCase): def testGzip(self): _, path = tempfile.mkstemp(suffix=".gz") try: with gzip.open(path, "wb") as out: out.write(bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0))) with gzip.open(path, "rb") as source: values = list(decoder.StreamingDecoder(source)) assert values == [12, (1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1)] finally: os.remove(path) def testZipfile(self): # It is a seekable stream. _, path = tempfile.mkstemp(suffix=".zip") try: with zipfile.ZipFile(path, "w") as myzip: myzip.writestr("data", bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0))) with zipfile.ZipFile(path, "r") as myzip: with myzip.open("data", "r") as source: values = list(decoder.StreamingDecoder(source)) assert values == [12, (1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1)] finally: os.remove(path) def testZipfileMany(self): _, path = tempfile.mkstemp(suffix=".zip") try: with zipfile.ZipFile(path, "w") as myzip: #for i in range(100): myzip.writestr("data", bytes((2, 1, 12, 35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)) * 1000) with zipfile.ZipFile(path, "r") as myzip: with myzip.open("data", "r") as source: values = list(decoder.StreamingDecoder(source)) assert values == [12, (1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1)] * 1000 finally: os.remove(path) class NonStreamingCompatibilityTestCase(BaseTestCase): def setUp(self): from pyasn1 import debug BaseTestCase.setUp(self) debug.setLogger(None) # undo logger setup from BaseTestCase to work around unrelated issue def testPartialDecodeWithCustomSubstrateFun(self): snmp_req_substrate = bytes(( 0x30, 0x22, 0x02, 0x01, 0x01, 0x04, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0xa0, 0x15, 0x02, 0x04, 0x69, 0x30, 0xdb, 0xeb, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x30, 0x07, 0x30, 0x05, 0x06, 0x01, 0x01, 0x05, 0x00)) seq, next_substrate = decoder.decode( snmp_req_substrate, asn1Spec=univ.Sequence(), recursiveFlag=False, substrateFun=lambda a, b, c: (a, b[:c]) ) assert seq.isSameTypeWith(univ.Sequence) assert next_substrate == snmp_req_substrate[2:] version, next_substrate = decoder.decode( next_substrate, asn1Spec=univ.Integer(), recursiveFlag=False, substrateFun=lambda a, b, c: (a, b[:c]) ) assert version == 1 def testPartialDecodeWithDefaultSubstrateFun(self): substrate = bytes(( 0x04, 0x0e, 0x30, 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x3c, 0x03, 0x02 )) result, rest = decoder.decode(substrate, recursiveFlag=False) assert result.isSameTypeWith(univ.OctetString) assert rest == substrate[2:] def testPropagateUserException(self): substrate = io.BytesIO(bytes((0x04, 0x00))) def userSubstrateFun(_asn1Object, _substrate, _length, _options): raise TypeError("error inside user function") try: decoder.decode(substrate, asn1Spec=univ.OctetString, substrateFun=userSubstrateFun) except TypeError as exc: assert str(exc) == "error inside user function" else: raise AssertionError("decode() must not hide TypeError from inside user provided callback") suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) if __name__ == '__main__': unittest.TextTestRunner(verbosity=2).run(suite)