1# 2# This file is part of pyasn1-modules software. 3# 4# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> 5# License: http://pyasn1.sf.net/license.html 6# 7# SNMPv3 message syntax 8# 9# ASN.1 source from: 10# http://www.ietf.org/rfc/rfc3412.txt 11# 12from pyasn1.type import univ, namedtype, constraint 13from pyasn1_modules import rfc1905 14 15 16class ScopedPDU(univ.Sequence): 17 componentType = namedtype.NamedTypes( 18 namedtype.NamedType('contextEngineId', univ.OctetString()), 19 namedtype.NamedType('contextName', univ.OctetString()), 20 namedtype.NamedType('data', rfc1905.PDUs()) 21 ) 22 23 24class ScopedPduData(univ.Choice): 25 componentType = namedtype.NamedTypes( 26 namedtype.NamedType('plaintext', ScopedPDU()), 27 namedtype.NamedType('encryptedPDU', univ.OctetString()), 28 ) 29 30 31class HeaderData(univ.Sequence): 32 componentType = namedtype.NamedTypes( 33 namedtype.NamedType('msgID', 34 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, 2147483647))), 35 namedtype.NamedType('msgMaxSize', 36 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(484, 2147483647))), 37 namedtype.NamedType('msgFlags', univ.OctetString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 1))), 38 namedtype.NamedType('msgSecurityModel', 39 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1, 2147483647))) 40 ) 41 42 43class SNMPv3Message(univ.Sequence): 44 componentType = namedtype.NamedTypes( 45 namedtype.NamedType('msgVersion', 46 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, 2147483647))), 47 namedtype.NamedType('msgGlobalData', HeaderData()), 48 namedtype.NamedType('msgSecurityParameters', univ.OctetString()), 49 namedtype.NamedType('msgData', ScopedPduData()) 50 ) 51