123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- # This file is being contributed to pyasn1-modules software.
- #
- # Created by Russ Housley with assistance from the asn1ate tool, with manual
- # changes to implement appropriate constraints and added comments.
- # Modified by Russ Housley to add maps for use with opentypes.
- #
- # Copyright (c) 2019, Vigil Security, LLC
- # License: http://snmplabs.com/pyasn1/license.html
- #
- # JWT Claim Constraints and TN Authorization List for certificate extensions.
- #
- # ASN.1 source from:
- # https://www.rfc-editor.org/rfc/rfc8226.txt (with errata corrected)
- from pyasn1.type import char
- from pyasn1.type import constraint
- from pyasn1.type import namedtype
- from pyasn1.type import tag
- from pyasn1.type import univ
- from pyasn1_modules import rfc5280
- MAX = float('inf')
- def _OID(*components):
- output = []
- for x in tuple(components):
- if isinstance(x, univ.ObjectIdentifier):
- output.extend(list(x))
- else:
- output.append(int(x))
- return univ.ObjectIdentifier(output)
- class JWTClaimName(char.IA5String):
- pass
- class JWTClaimNames(univ.SequenceOf):
- pass
- JWTClaimNames.componentType = JWTClaimName()
- JWTClaimNames.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- class JWTClaimPermittedValues(univ.Sequence):
- pass
- JWTClaimPermittedValues.componentType = namedtype.NamedTypes(
- namedtype.NamedType('claim', JWTClaimName()),
- namedtype.NamedType('permitted', univ.SequenceOf(
- componentType=char.UTF8String()).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)))
- )
- class JWTClaimPermittedValuesList(univ.SequenceOf):
- pass
- JWTClaimPermittedValuesList.componentType = JWTClaimPermittedValues()
- JWTClaimPermittedValuesList.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- class JWTClaimConstraints(univ.Sequence):
- pass
- JWTClaimConstraints.componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('mustInclude',
- JWTClaimNames().subtype(explicitTag=tag.Tag(tag.tagClassContext,
- tag.tagFormatSimple, 0))),
- namedtype.OptionalNamedType('permittedValues',
- JWTClaimPermittedValuesList().subtype(explicitTag=tag.Tag(tag.tagClassContext,
- tag.tagFormatSimple, 1)))
- )
- JWTClaimConstraints.subtypeSpec = constraint.ConstraintsUnion(
- constraint.WithComponentsConstraint(
- ('mustInclude', constraint.ComponentPresentConstraint())),
- constraint.WithComponentsConstraint(
- ('permittedValues', constraint.ComponentPresentConstraint()))
- )
- id_pe_JWTClaimConstraints = _OID(1, 3, 6, 1, 5, 5, 7, 1, 27)
- class ServiceProviderCode(char.IA5String):
- pass
- class TelephoneNumber(char.IA5String):
- pass
- TelephoneNumber.subtypeSpec = constraint.ConstraintsIntersection(
- constraint.ValueSizeConstraint(1, 15),
- constraint.PermittedAlphabetConstraint(
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*')
- )
- class TelephoneNumberRange(univ.Sequence):
- pass
- TelephoneNumberRange.componentType = namedtype.NamedTypes(
- namedtype.NamedType('start', TelephoneNumber()),
- namedtype.NamedType('count',
- univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(2, MAX)))
- )
- class TNEntry(univ.Choice):
- pass
- TNEntry.componentType = namedtype.NamedTypes(
- namedtype.NamedType('spc',
- ServiceProviderCode().subtype(explicitTag=tag.Tag(tag.tagClassContext,
- tag.tagFormatSimple, 0))),
- namedtype.NamedType('range',
- TelephoneNumberRange().subtype(explicitTag=tag.Tag(tag.tagClassContext,
- tag.tagFormatConstructed, 1))),
- namedtype.NamedType('one',
- TelephoneNumber().subtype(explicitTag=tag.Tag(tag.tagClassContext,
- tag.tagFormatSimple, 2)))
- )
- class TNAuthorizationList(univ.SequenceOf):
- pass
- TNAuthorizationList.componentType = TNEntry()
- TNAuthorizationList.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- id_pe_TNAuthList = _OID(1, 3, 6, 1, 5, 5, 7, 1, 26)
- id_ad_stirTNList = _OID(1, 3, 6, 1, 5, 5, 7, 48, 14)
- # Map of Certificate Extension OIDs to Extensions added to the
- # ones that are in rfc5280.py
- _certificateExtensionsMapUpdate = {
- id_pe_TNAuthList: TNAuthorizationList(),
- id_pe_JWTClaimConstraints: JWTClaimConstraints(),
- }
- rfc5280.certificateExtensionsMap.update(_certificateExtensionsMapUpdate)
|