Advertisement
Guest User

rfc 2986 asn1

a guest
May 2nd, 2012
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.30 KB | None | 0 0
  1. from pyasn1.type import tag,namedtype,namedval,univ,constraint,char,useful
  2. from pyasn1.codec.der import decoder, encoder
  3. from pyasn1 import error
  4. from pyasn1_modules.rfc2511 import *
  5.  
  6. MAX = 64
  7.  
  8. EXTENSIONREQUEST = '1.2.840.113549.1.9.14'
  9.  
  10. class rfc822Name(char.IA5String):
  11.     tagSet = char.IA5String.tagSet.tagImplicitly(
  12.         tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)
  13.         )
  14.  
  15. class dNSName(char.IA5String):
  16.     tagSet = char.IA5String.tagSet.tagImplicitly(
  17.         tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)
  18.         )
  19.  
  20. class x400Address(univ.OctetString):
  21.     tagSet = univ.OctetString.tagSet.tagImplicitly(
  22.         tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 3)
  23.         )
  24.  
  25. class directoryName(Name):
  26.     tagSet = Name.tagSet.tagImplicitly(
  27.         tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 4)
  28.         )
  29.  
  30. class uniformResourceIdentifier(char.IA5String):
  31.     tagSet = char.IA5String.tagSet.tagImplicitly(
  32.         tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)
  33.         )
  34.  
  35. class OtherName(univ.Sequence):
  36.     componentType = namedtype.NamedTypes(
  37.         namedtype.NamedType('type-id', univ.ObjectIdentifier()),
  38.         namedtype.NamedType('value', univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
  39.         )
  40.  
  41. class GeneralName(univ.Choice):
  42.     componentType = namedtype.NamedTypes(
  43.         namedtype.NamedType('otherName', OtherName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  44.         namedtype.NamedType('rfc822Name', rfc822Name()), #1
  45.         namedtype.NamedType('dNSName', dNSName()), #2
  46.         namedtype.NamedType('x400Address', x400Address()), #3
  47.         namedtype.NamedType('directoryName', directoryName()), #4
  48.         # 5 FIXME
  49.         namedtype.NamedType('uniformResourceIdentifier', uniformResourceIdentifier()), #6
  50.         #namedtype.NamedType('uniformResourceIdentifier', char.IA5String(tagSet=char.IA5String.tagSet.tagImplicitly(tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 6)))),
  51.         )
  52.  
  53. class GeneralNames(univ.SequenceOf):
  54.     componentType = GeneralName()
  55.     sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
  56.  
  57. class SubjectAltName(univ.SequenceOf):
  58.     componentType = GeneralName()
  59.     sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
  60.  
  61. class AttributeValueSet(univ.SetOf):
  62.     componentType = univ.Any()
  63.     sizeSpec = univ.SetOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
  64.  
  65. class Attribute(univ.Sequence):
  66.     componentType = namedtype.NamedTypes(
  67.         namedtype.NamedType('type', AttributeType()),
  68.         namedtype.NamedType('values', AttributeValueSet()),
  69.         )
  70.  
  71. class Attributes(univ.SetOf): componentType = Attribute()
  72.  
  73. class AlgorithmIdentifier(univ.Sequence):
  74.     componentType = namedtype.NamedTypes(
  75.         namedtype.NamedType('algorithm', univ.ObjectIdentifier()),
  76.         namedtype.OptionalNamedType('parameters', univ.Any())
  77.         )
  78.  
  79. class SubjectPublicKeyInfo(univ.Sequence):
  80.     componentType = namedtype.NamedTypes(
  81.         namedtype.NamedType('algorithm', AlgorithmIdentifier()),
  82.         namedtype.NamedType('subjectPublicKey', univ.BitString())
  83.         )
  84.  
  85. class AttributeValue(univ.Any): pass
  86.  
  87. class AttributeType(univ.ObjectIdentifier): pass
  88.  
  89. class AttributeTypeAndValue(univ.Sequence):
  90.     componentType = namedtype.NamedTypes(
  91.         namedtype.NamedType('type', AttributeType()),
  92.         namedtype.NamedType('value', AttributeValue())
  93.         )
  94.  
  95. class RelativeDistinguishedName(univ.SetOf):
  96.     componentType = AttributeTypeAndValue()
  97.  
  98. class RDNSequence(univ.SequenceOf):
  99.     componentType = RelativeDistinguishedName()
  100.  
  101. class Name(univ.Choice):
  102.     componentType = namedtype.NamedTypes(
  103.         namedtype.NamedType('', RDNSequence())
  104.         )
  105.  
  106. class Version(univ.Integer):
  107.     namedValues = namedval.NamedValues(
  108.         ('v1', 0), ('v2', 1), ('v3', 2)
  109.         )
  110.  
  111. class CertificationRequestInfo(univ.Sequence):
  112.     componentType = namedtype.NamedTypes(
  113.         namedtype.NamedType('version', Version()),
  114.         namedtype.NamedType('subject', Name()),
  115.         namedtype.NamedType('subjectPKInfo', SubjectPublicKeyInfo()),
  116.         namedtype.OptionalNamedType('attributes', Attributes().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
  117.         )
  118.  
  119. class CertificationRequest(univ.Sequence):
  120.     componentType = namedtype.NamedTypes(
  121.         namedtype.NamedType('certificationRequestInfo', CertificationRequestInfo()),
  122.         namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
  123.         namedtype.NamedType('signatureValue', univ.BitString())
  124.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement