5Q ddlZddlmZddlmZddlmZgdZGddeZGdd eZ Gd d eZ Gd d eZ dS)N)error)tag)tagmap) NamedTypeOptionalNamedTypeDefaultedNamedType NamedTypesceZdZdZdZdZddZdZdZdZ dZ d Z d Z d Z d Zd ZdZedZedZedZdZdZdS)raCreate named field object for a constructed ASN.1 type. The |NamedType| object represents a single name and ASN.1 type of a constructed ASN.1 type. |NamedType| objects are immutable and duck-type Python :class:`tuple` objects holding *name* and *asn1Object* components. Parameters ---------- name: :py:class:`str` Field name asn1Object: ASN.1 type object FNcB||_||_||f|_||_dSN)_NamedType__name_NamedType__type_NamedType__nameAndType_NamedType__openType)selfname asn1ObjectopenTypes u/builddir/build/BUILD/imunify360-venv-2.6.2/opt/imunify360/venv/lib/python3.11/site-packages/pyasn1/type/namedtype.py__init__zNamedType.__init__#s(   !:-"cr|jd|j}|jr |d|jzz }d|jjd|dS)N=z, open type %r)rrr __class____name__rrepresentations r__repr__zNamedType.__repr__)sS$(IIIt? = ? .> >N N # # #^^^5 5rc|j|kSr rrothers r__eq__zNamedType.__eq__2!U**rc|j|kSr r"r#s r__ne__zNamedType.__ne__5r&rc|j|kSr r"r#s r__lt__zNamedType.__lt__8!E))rc|j|kSr r"r#s r__le__zNamedType.__le__;r&rc|j|kSr r"r#s r__gt__zNamedType.__gt__>r+rc|j|kSr r"r#s r__ge__zNamedType.__ge__Ar&rc*t|jSr )hashrrs r__hash__zNamedType.__hash__DD&'''rc|j|Sr r"ridxs r __getitem__zNamedType.__getitem__Gs!#&&rc*t|jSr )iterrr4s r__iter__zNamedType.__iter__Jr6rc|jSr )r r4s rrzNamedType.nameM {rc|jSr )rr4s rrzNamedType.asn1ObjectQr?rc|jSr )rr4s rrzNamedType.openTypeUs rc|jSr rr4s rgetNamezNamedType.getName[s yrc|jSr rr4s rgetTypezNamedType.getType^s rr )r __module__ __qualname____doc__ isOptional isDefaultedrr r%r(r*r-r/r1r5r:r=propertyrrrrDrGrrrrsCJK#### 555++++++***+++***+++((('''(((XXX rrc eZdZejZdZdS)rTN)rrHrIrrJrKrNrrrrbsGJJJrrc eZdZejZdZdS)rTN)rrHrIrrJrLrNrrrrhsGKKKrrcveZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZGddeZdZdZdZdZdZdZdZdZdZ dZ!e"d Z#d!Z$e"d"Z%e"d#Z&e"d$Z'e"d%Z(e"d&Z)e"d'Z*d(S))r a+Create a collection of named fields for a constructed ASN.1 type. The NamedTypes object represents a collection of named fields of a constructed ASN.1 type. *NamedTypes* objects are immutable and duck-type Python :class:`dict` objects holding *name* as keys and ASN.1 type object as values. Parameters ---------- *namedTypes: :class:`~pyasn1.type.namedtype.NamedType` Examples -------- .. code-block:: python class Description(Sequence): ''' ASN.1 specification: Description ::= SEQUENCE { surname IA5String, first-name IA5String OPTIONAL, age INTEGER DEFAULT 40 } ''' componentType = NamedTypes( NamedType('surname', IA5String()), OptionalNamedType('first-name', IA5String()), DefaultedNamedType('age', Integer(40)) ) descr = Description() descr['surname'] = 'Smith' descr['first-name'] = 'John' cD||_t|j|_||_||_||_d|vr| pi|_ | d|_ | d|_ td|jD|_td|jD|_t#dt%|jD|_t#d|jD|_t+d |jD|_t+d |jD|_dS) NterminalT)uniqueFc.g|]}|js|jdST)rLrK.0 namedTypes r z'NamedTypes.__init__..sB+]+]+]I.7.C+]GPG[+]4+]+]+]rc g|] }|j d SrV)rrWs rrZz'NamedTypes.__init__..s/#:#:#:I&/&8#:4#:#:#:rc4g|]\}}|j |j|SrN)rKrL)rXr9nts rrZz'NamedTypes.__init__..s,mmmb m^`^lmmmmrcg|] }|j SrNrCrWs rrZz'NamedTypes.__init__..s S S SI S S Srcg|] }|j SrNrFrWs rrZz'NamedTypes.__init__..sWWW y3WWWrc*g|]}|j|jfSrN)rrrWs rrZz'NamedTypes.__init__..s"hhhy~y/CDhhhr)_NamedTypes__namedTypeslen_NamedTypes__namedTypesLen_NamedTypes__computeMinTagSet_NamedTypes__minTagSet _NamedTypes__computeNameToPosMap_NamedTypes__nameToPosMap_NamedTypes__computeTagToPosMap_NamedTypes__tagToPosMap"_NamedTypes__computeAmbiguousTypes_NamedTypes__ambiguousTypes_NamedTypes__computeTagMaps_NamedTypes__uniqueTagMap_NamedTypes__nonUniqueTagMapany!_NamedTypes__hasOptionalOrDefault_NamedTypes__hasOpenTypes frozenset enumerate_NamedTypes__requiredComponents_NamedTypes__keystuple_NamedTypes__values_NamedTypes__items)r namedTypeskwargss rrzNamedTypes.__init__s&"4#4552244"88::!6688 *& 8 [T=Y=Y=[=[ a_a"3343@@!%!6!6e!6!D!D&)+]+]AR+]+]+]'^'^#!#:#:9J#:#:#:;;%.mmId.?$@$@mmm%%! S SAR S S STT WWTEVWWWXX hhVZVghhhii rcpdd|jD}d|jjd|dS)Nz, cg|]}d|zS)z%rrNrXxs rrZz'NamedTypes.__repr__..s#H#H#HD1H#H#H#Hrrz object, types r)joinrarrrs rr zNamedTypes.__repr__sE#H#Hd6G#H#H#HII N # # #^^^5 5rc|j|kSr rar#s rr%zNamedTypes.__eq__ E))rc|j|kSr rr#s rr(zNamedTypes.__ne__rrc|j|kSr rr#s rr*zNamedTypes.__lt__ 5((rc|j|kSr rr#s rr-zNamedTypes.__le__rrc|j|kSr rr#s rr/zNamedTypes.__gt__rrc|j|kSr rr#s rr1zNamedTypes.__ge__rrc*t|jSr )r3rar4s rr5zNamedTypes.__hash__sD%&&&rcn |j|S#t$r|j|j|cYSwxYwr )ra TypeErrorrgr8s rr:zNamedTypes.__getitem__sL ?$S) ) ? ? ?$T%8%=> > > > ?s "44c||jvSr )rg)rkeys r __contains__zNamedTypes.__contains__sd)))rc$d|jDS)Nc3&K|] }|dV dS)rNrNr}s r z&NamedTypes.__iter__..s&00!000000rrr4s rr=zNamedTypes.__iter__s00d/0000rc|jdkS)Nrrcr4s r__bool__zNamedTypes.__bool__s#a''rc|jSr rr4s r__len__zNamedTypes.__len__s ##rc|jSr )rwr4s rvalueszNamedTypes.valuess }rc|jSr )rur4s rkeyszNamedTypes.keyss {rc|jSr )rxr4s ritemszNamedTypes.itemss |rc |j|jSr )rrar4s rclonezNamedTypes.clonest~t011rceZdZdZdZdS)NamedTypes.PostponedErrorc||_dSr )_PostponedError__errorMsg)rerrorMsgs rrz"NamedTypes.PostponedError.__init__s &DOOOrc4tj|jr )r PyAsn1Errorr)ritems rr:z%NamedTypes.PostponedError.__getitem__s$T_55 5rN)rrHrIrr:rNrrPostponedErrorrs2 ' ' ' 6 6 6 6 6rrci}t|jD]i\}}|jj}t |t jr|cS|s2|jD]/}||vr$t d|d|ccS|||<0j|S)NzDuplicate component tag  at )rsrartagMap isinstancer r presentTypes)r tagToPosMapr9rYr_tagSets r__computeTagToPosMapzNamedTypes.__computeTagToPosMaps '(9:: + +NC)0F&*";<<   !. + +k))%444[b[b[bdmdm5nooooooo'* G$$ + rci}t|jD]?\}}|j|vr'td|jd|cS|||j<@|S)NzDuplicate component name r)rsrarr r)r nameToPosMapr9rYs r__computeNameToPosMapz NamedTypes.__computeNameToPosMapsw '(9:: / /NC~--!000XaXfXfXfhqhq1rsssss+.L ( (rc6i}d}ttt|jD]e\}}|js|jr|f|z}n|f}t |t |jkr|||<Ht|itd||<f|S)NrNT)rS) reversedrvrsrarKrLrbr dict)rambiguousTypespartialAmbiguousTypesr9rYs r__computeAmbiguousTypesz"NamedTypes.__computeAmbiguousTypess "&uYt7H-I-I'J'JKK ` `NC# 5y'< 5)2 7L(L%%)2 %())S1B-C-CCC&*s##&02G&_4Y]K^K^K^&_&_s##rcl |j|jS#t$rtjdwxYw)aTReturn ASN.1 type object by its position in fields set. Parameters ---------- idx: :py:class:`int` Field index Returns ------- : ASN.1 type Raises ------ ~pyasn1.error.PyAsn1Error If given position is out of fields range Type position out of range)rar IndexErrorrrr8s rgetTypeByPositionzNamedTypes.getTypeByPositionsJ$ B$S)4 4 B B B#$@AA A B3cj |j|S#t$rtjd|dwxYw)aReturn field position by its ASN.1 type. Parameters ---------- tagSet: :class:`~pysnmp.type.tag.TagSet` ASN.1 tag set distinguishing one ASN.1 type from others. Returns ------- : :py:class:`int` ASN.1 type position in fields set Raises ------ ~pyasn1.error.PyAsn1Error If *tagSet* is not present or ASN.1 types are not unique within callee *NamedTypes* zType not found)riKeyErrorrr)rtagSets rgetPositionByTypezNamedTypes.getPositionByType(sP$ E%f- - E E E##666$CDD D E #2cl |j|jS#t$rtjdwxYw)anReturn field name by its position in fields set. Parameters ---------- idx: :py:class:`idx` Field index Returns ------- : :py:class:`str` Field name Raises ------ ~pyasn1.error.PyAsn1Error If given field name is not present in callee *NamedTypes* r)rarrrrr8s rgetNameByPositionzNamedTypes.getNameByPosition@sJ$ B$S). . B B B#$@AA A Brcj |j|S#t$rtjd|dwxYw)a|Return field position by filed name. Parameters ---------- name: :py:class:`str` Field name Returns ------- : :py:class:`int` Field position in fields set Raises ------ ~pyasn1.error.PyAsn1Error If *name* is not present or not unique within callee *NamedTypes* zName r)rgrrr)rrs rgetPositionByNamezNamedTypes.getPositionByNameXsP$ C&t, , C C C##444$ABB B Crcl |j|jS#t$rtjdwxYw)aReturn ASN.1 types that are allowed at or past given field position. Some ASN.1 serialisation allow for skipping optional and defaulted fields. Some constructed ASN.1 types allow reordering of the fields. When recovering such objects it may be important to know which types can possibly be present at any given position in the field sets. Parameters ---------- idx: :py:class:`int` Field index Returns ------- : :class:`~pyasn1.type.tagmap.TagMap` Map if ASN.1 types allowed at given field position Raises ------ ~pyasn1.error.PyAsn1Error If given position is out of fields range r)rkrrrrr8s rgetTagMapNearPositionz NamedTypes.getTagMapNearPositionpsJ. B(-4 4 B B B#$@AA A Brc ||j||zS#t$rtjdwxYw)aReturn the closest field position where given ASN.1 type is allowed. Some ASN.1 serialisation allow for skipping optional and defaulted fields. Some constructed ASN.1 types allow reordering of the fields. When recovering such objects it may be important to know at which field position, in field set, given *tagSet* is allowed at or past *idx* position. Parameters ---------- tagSet: :class:`~pyasn1.type.tag.TagSet` ASN.1 type which field position to look up idx: :py:class:`int` Field position at or past which to perform ASN.1 type look up Returns ------- : :py:class:`int` Field position in fields set Raises ------ ~pyasn1.error.PyAsn1Error If *tagSet* is not present or not unique within callee *NamedTypes* or *idx* is out of fields range r)rkrrrr)rrr9s rgetPositionNearTypezNamedTypes.getPositionNearTypesZ6 B.s3EEfMMM M B B B#$@AA A Bs "%Acd}|jD]3}|j} |j}n#t$r |j}YnwxYw|||kr|}4|pt jSr )rar minTagSetAttributeErrorrrTagSet)rrrYrrs r__computeMinTagSetzNamedTypes.__computeMinTagSets * # #I"-J +#-! + + +#* + FY$6$6" (CJLL(s 00c|jS)aReturn the minimal TagSet among ASN.1 type in callee *NamedTypes*. Some ASN.1 types/serialisation protocols require ASN.1 types to be arranged based on their numerical tag value. The *minTagSet* property returns that. Returns ------- : :class:`~pyasn1.type.tagset.TagSet` Minimal TagSet among ASN.1 types in callee *NamedTypes* )rer4s rrzNamedTypes.minTagSets rc i}i}d}|jD]}|jj}t|tjr|cS|D]9}|r+||vr'td|d|d|ccS|j||<:||j||j}|jtd|cStj |||S)NzNon-unique tagSet z of rz Duplicate default ASN.1 type at ) rarrrr rupdate skipTypes defaultTyperTagMap)rrTrrrrYrrs r__computeTagMapszNamedTypes.__computeTagMapss+   * a aI)0F&*";<<    < <uf 44%444[a[a[aclclclnrnr5sttttttt'0'; V$$   V- . . ."$0 #/!000Y]Y]1_`````0}\9kBBBrc|jS)aReturn a *TagMap* object from tags and types recursively. Return a :class:`~pyasn1.type.tagmap.TagMap` object by combining tags from *TagMap* objects of children types and associating them with their immediate child type. Example ------- .. code-block:: python OuterType ::= CHOICE { innerType INTEGER } Calling *.tagMap* on *OuterType* will yield a map like this: .. code-block:: python Integer.tagSet -> Choice )rnr4s rrzNamedTypes.tagMaps ,%%rc|jS)aReturn a *TagMap* object from unique tags and types recursively. Return a :class:`~pyasn1.type.tagmap.TagMap` object by combining tags from *TagMap* objects of children types and associating them with their immediate child type. Example ------- .. code-block:: python OuterType ::= CHOICE { innerType INTEGER } Calling *.tagMapUnique* on *OuterType* will yield a map like this: .. code-block:: python Integer.tagSet -> Choice Note ---- Duplicate *TagSet* objects found in the tree of children types would cause error. )rmr4s r tagMapUniquezNamedTypes.tagMapUniques 8""rc|jSr )rpr4s rhasOptionalOrDefaultzNamedTypes.hasOptionalOrDefaults **rc|jSr )rqr4s r hasOpenTypeszNamedTypes.hasOpenTypess ""rc*t|jSr )rvrar4s rryzNamedTypes.namedTypes sT&'''rc|jSr )rtr4s rrequiredComponentszNamedTypes.requiredComponents$s ((rN)+rrHrIrJrr r%r(r*r-r/r1r5r:rr=rrrrrrobjectrrhrfrjrrrrrrrdrMrrlrrrrryrrNrrr r ns##Hjjj*555 ******)))***)))***'''???***111((($$$ 22266666666      BBB0EEE0BBB0CCC0BBB:BBBB)))    X  CCC*&&X&.##X#:++X+##X#((X())X)))rr ) syspyasn1r pyasn1.typerr__all__rrrrr rNrrrs    OOOOOOOOd   x)x)x)x)x)x)x)x)x)x)r