blob: 6e1bb2261d57cc3f537814493a8a0c3c1b18ba29 [file] [log] [blame]
#
# This file is part of pyasn1-modules software.
#
# Created by Russ Housley with assistance from asn1ate v.0.6.0.
#
# Copyright (c) 2019, Vigil Security, LLC
# License: http://snmplabs.com/pyasn1/license.html
#
# CMS Symmetric Key Package Content Type
#
# ASN.1 source from:
# https://www.rfc-editor.org/rfc/rfc6031.txt
#
from pyasn1.type import char
from pyasn1.type import constraint
from pyasn1.type import namedtype
from pyasn1.type import namedval
from pyasn1.type import opentype
from pyasn1.type import tag
from pyasn1.type import univ
from pyasn1.type import useful
from pyasn1_modules import rfc5652
from pyasn1_modules import rfc6019
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)
MAX = float('inf')
id_pskc = univ.ObjectIdentifier('1.2.840.113549.1.9.16.12')
# Symmetric Key Package Attributes
id_pskc_manufacturer = _OID(id_pskc, 1)
class at_pskc_manufacturer(char.UTF8String):
pass
id_pskc_serialNo = _OID(id_pskc, 2)
class at_pskc_serialNo(char.UTF8String):
pass
id_pskc_model = _OID(id_pskc, 3)
class at_pskc_model(char.UTF8String):
pass
id_pskc_issueNo = _OID(id_pskc, 4)
class at_pskc_issueNo(char.UTF8String):
pass
id_pskc_deviceBinding = _OID(id_pskc, 5)
class at_pskc_deviceBinding(char.UTF8String):
pass
id_pskc_deviceStartDate = _OID(id_pskc, 6)
class at_pskc_deviceStartDate(useful.GeneralizedTime):
pass
id_pskc_deviceExpiryDate = _OID(id_pskc, 7)
class at_pskc_deviceExpiryDate(useful.GeneralizedTime):
pass
id_pskc_moduleId = _OID(id_pskc, 8)
class at_pskc_moduleId(char.UTF8String):
pass
id_pskc_deviceUserId = _OID(id_pskc, 26)
class at_pskc_deviceUserId(char.UTF8String):
pass
# Symmetric Key Attributes
id_pskc_keyId = _OID(id_pskc, 9)
class at_pskc_keyUserId(char.UTF8String):
pass
id_pskc_algorithm = _OID(id_pskc, 10)
class at_pskc_algorithm(char.UTF8String):
pass
id_pskc_issuer = _OID(id_pskc, 11)
class at_pskc_issuer(char.UTF8String):
pass
id_pskc_keyProfileId = _OID(id_pskc, 12)
class at_pskc_keyProfileId(char.UTF8String):
pass
id_pskc_keyReference = _OID(id_pskc, 13)
class at_pskc_keyReference(char.UTF8String):
pass
id_pskc_friendlyName = _OID(id_pskc, 14)
class FriendlyName(univ.Sequence):
pass
FriendlyName.componentType = namedtype.NamedTypes(
namedtype.NamedType('friendlyName', char.UTF8String()),
namedtype.OptionalNamedType('friendlyNameLangTag', char.UTF8String())
)
class at_pskc_friendlyName(FriendlyName):
pass
id_pskc_algorithmParameters = _OID(id_pskc, 15)
class Encoding(char.UTF8String):
pass
Encoding.namedValues = namedval.NamedValues(
('dec', "DECIMAL"),
('hex', "HEXADECIMAL"),
('alpha', "ALPHANUMERIC"),
('b64', "BASE64"),
('bin', "BINARY")
)
Encoding.subtypeSpec = constraint.SingleValueConstraint(
"DECIMAL", "HEXADECIMAL", "ALPHANUMERIC", "BASE64", "BINARY" )
class ChallengeFormat(univ.Sequence):
pass
ChallengeFormat.componentType = namedtype.NamedTypes(
namedtype.NamedType('encoding', Encoding()),
namedtype.DefaultedNamedType('checkDigit',
univ.Boolean().subtype(value=0)),
namedtype.NamedType('min', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX))),
namedtype.NamedType('max', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX)))
)
class ResponseFormat(univ.Sequence):
pass
ResponseFormat.componentType = namedtype.NamedTypes(
namedtype.NamedType('encoding', Encoding()),
namedtype.NamedType('length', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX))),
namedtype.DefaultedNamedType('checkDigit',
univ.Boolean().subtype(value=0))
)
class PSKCAlgorithmParameters(univ.Choice):
pass
PSKCAlgorithmParameters.componentType = namedtype.NamedTypes(
namedtype.NamedType('suite', char.UTF8String()),
namedtype.NamedType('challengeFormat', ChallengeFormat().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
namedtype.NamedType('responseFormat', ResponseFormat().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
)
class at_pskc_algorithmParameters(PSKCAlgorithmParameters):
pass
id_pskc_counter = _OID(id_pskc, 16)
class at_pskc_counter(univ.Integer):
pass
at_pskc_counter.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
id_pskc_time = _OID(id_pskc, 17)
class at_pskc_time(rfc6019.BinaryTime):
pass
id_pskc_timeInterval = _OID(id_pskc, 18)
class at_pskc_timeInterval(univ.Integer):
pass
at_pskc_timeInterval.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
id_pskc_timeDrift = _OID(id_pskc, 19)
class at_pskc_timeDrift(univ.Integer):
pass
at_pskc_timeDrift.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
id_pskc_valueMAC = _OID(id_pskc, 20)
class ValueMac(univ.Sequence):
pass
ValueMac.componentType = namedtype.NamedTypes(
namedtype.NamedType('macAlgorithm', char.UTF8String()),
namedtype.NamedType('mac', char.UTF8String())
)
class at_pskc_valueMAC(ValueMac):
pass
id_pskc_keyUserId = _OID(id_pskc, 27)
class at_pskc_keyId(char.UTF8String):
pass
id_pskc_keyStartDate = _OID(id_pskc, 21)
class at_pskc_keyStartDate(useful.GeneralizedTime):
pass
id_pskc_keyExpiryDate = _OID(id_pskc, 22)
class at_pskc_keyExpiryDate(useful.GeneralizedTime):
pass
id_pskc_numberOfTransactions = _OID(id_pskc, 23)
class at_pskc_numberOfTransactions(univ.Integer):
pass
at_pskc_numberOfTransactions.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
id_pskc_keyUsages = _OID(id_pskc, 24)
class PSKCKeyUsage(char.UTF8String):
pass
PSKCKeyUsage.namedValues = namedval.NamedValues(
('otp', "OTP"),
('cr', "CR"),
('encrypt', "Encrypt"),
('integrity', "Integrity"),
('verify', "Verify"),
('unlock', "Unlock"),
('decrypt', "Decrypt"),
('keywrap', "KeyWrap"),
('unwrap', "Unwrap"),
('derive', "Derive"),
('generate', "Generate")
)
PSKCKeyUsage.subtypeSpec = constraint.SingleValueConstraint(
"OTP", "CR", "Encrypt", "Integrity", "Verify", "Unlock",
"Decrypt", "KeyWrap", "Unwrap", "Derive", "Generate" )
class PSKCKeyUsages(univ.SequenceOf):
pass
PSKCKeyUsages.componentType = PSKCKeyUsage()
class at_pskc_keyUsage(PSKCKeyUsages):
pass
id_pskc_pinPolicy = _OID(id_pskc, 25)
class PINUsageMode(char.UTF8String):
pass
PINUsageMode.namedValues = namedval.NamedValues(
("local", "Local"),
("prepend", "Prepend"),
("append", "Append"),
("algorithmic", "Algorithmic")
)
PINUsageMode.subtypeSpec = constraint.SingleValueConstraint(
"Local", "Prepend", "Append", "Algorithmic" )
class PINPolicy(univ.Sequence):
pass
PINPolicy.componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('pinKeyId', char.UTF8String().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
namedtype.NamedType('pinUsageMode', PINUsageMode().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
namedtype.OptionalNamedType('maxFailedAttempts', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX)).subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
namedtype.OptionalNamedType('minLength', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX)).subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
namedtype.OptionalNamedType('maxLength', univ.Integer().subtype(
subtypeSpec=constraint.ValueRangeConstraint(0, MAX)).subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
namedtype.OptionalNamedType('pinEncoding', Encoding().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5)))
)
class at_pskc_pinPolicy(PINPolicy):
pass
# Map of Symmetric Key Package Attribute OIDs to Attributes
sKeyPkgAttributesMap = {
id_pskc_manufacturer: at_pskc_manufacturer(),
id_pskc_serialNo: at_pskc_serialNo(),
id_pskc_model: at_pskc_model(),
id_pskc_issueNo: at_pskc_issueNo(),
id_pskc_deviceBinding: at_pskc_deviceBinding(),
id_pskc_deviceStartDate: at_pskc_deviceStartDate(),
id_pskc_deviceExpiryDate: at_pskc_deviceExpiryDate(),
id_pskc_moduleId: at_pskc_moduleId(),
id_pskc_deviceUserId: at_pskc_deviceUserId(),
}
# Map of Symmetric Key Attribute OIDs to Attributes
sKeyAttributesMap = {
id_pskc_keyId: at_pskc_keyId(),
id_pskc_algorithm: at_pskc_algorithm(),
id_pskc_issuer: at_pskc_issuer(),
id_pskc_keyProfileId: at_pskc_keyProfileId(),
id_pskc_keyReference: at_pskc_keyReference(),
id_pskc_friendlyName: at_pskc_friendlyName(),
id_pskc_algorithmParameters: at_pskc_algorithmParameters(),
id_pskc_counter: at_pskc_counter(),
id_pskc_time: at_pskc_time(),
id_pskc_timeInterval: at_pskc_timeInterval(),
id_pskc_timeDrift: at_pskc_timeDrift(),
id_pskc_valueMAC: at_pskc_valueMAC(),
id_pskc_keyUserId: at_pskc_keyUserId(),
id_pskc_keyStartDate: at_pskc_keyStartDate(),
id_pskc_keyExpiryDate: at_pskc_keyExpiryDate(),
id_pskc_numberOfTransactions: at_pskc_numberOfTransactions(),
id_pskc_keyUsages: at_pskc_keyUsage(),
id_pskc_pinPolicy: at_pskc_pinPolicy(),
}
# This definition replaces Attribute() from rfc5652.py; it is the same except
# that opentype is added with sKeyPkgAttributesMap and sKeyAttributesMap
class AttributeType(univ.ObjectIdentifier):
pass
class AttributeValue(univ.Any):
pass
class SKeyAttribute(univ.Sequence):
pass
SKeyAttribute.componentType = namedtype.NamedTypes(
namedtype.NamedType('attrType', AttributeType()),
namedtype.NamedType('attrValues',
univ.SetOf(componentType=AttributeValue()),
openType=opentype.OpenType('attrType', sKeyAttributesMap)
)
)
class SKeyPkgAttribute(univ.Sequence):
pass
SKeyPkgAttribute.componentType = namedtype.NamedTypes(
namedtype.NamedType('attrType', AttributeType()),
namedtype.NamedType('attrValues',
univ.SetOf(componentType=AttributeValue()),
openType=opentype.OpenType('attrType', sKeyPkgAttributesMap)
)
)
# Symmetric Key Package Content Type
id_ct_KP_sKeyPackage = univ.ObjectIdentifier('1.2.840.113549.1.9.16.1.25')
class KeyPkgVersion(univ.Integer):
pass
KeyPkgVersion.namedValues = namedval.NamedValues(
('v1', 1)
)
class OneSymmetricKey(univ.Sequence):
pass
OneSymmetricKey.componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('sKeyAttrs',
univ.SequenceOf(componentType=SKeyAttribute()).subtype(
subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
namedtype.OptionalNamedType('sKey', univ.OctetString())
)
OneSymmetricKey.sizeSpec = univ.Sequence.sizeSpec + constraint.ValueSizeConstraint(1, 2)
class SymmetricKeys(univ.SequenceOf):
pass
SymmetricKeys.componentType = OneSymmetricKey()
SymmetricKeys.subtypeSpec=constraint.ValueSizeConstraint(1, MAX)
class SymmetricKeyPackage(univ.Sequence):
pass
SymmetricKeyPackage.componentType = namedtype.NamedTypes(
namedtype.DefaultedNamedType('version', KeyPkgVersion().subtype(value='v1')),
namedtype.OptionalNamedType('sKeyPkgAttrs',
univ.SequenceOf(componentType=SKeyPkgAttribute()).subtype(
subtypeSpec=constraint.ValueSizeConstraint(1, MAX),
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
namedtype.NamedType('sKeys', SymmetricKeys())
)
# Map of Content Type OIDs to Content Types are
# added to the ones that are in rfc5652.py
_cmsContentTypesMapUpdate = {
id_ct_KP_sKeyPackage: SymmetricKeyPackage(),
}
rfc5652.cmsContentTypesMap.update(_cmsContentTypesMapUpdate)