-- Module SIOsAccessControl-MODULE (X.841:10/2000)
-- See also ITU-T X.841 (10/2000)
-- See also the index of all ASN.1 assignments needed in this document

SIOsAccessControl-MODULE {joint-iso-itu-t sios(24) specification(0) modules(0)
  accessControl(0)} DEFINITIONS IMPLICIT TAGS ::=
BEGIN

-- EXPORTS All; 
IMPORTS
  id-at-clearance
    FROM EnhancedSecurity {joint-iso-itu-t ds(5) module(1) enhancedSecurity(28)
      1} -- ITU-T Rec. X.501 | ISO/IEC 9594-2 
  ATTRIBUTE, Name
    FROM InformationFramework {joint-iso-itu-t ds(5) module(1)
      informationFramework(1) 3} -- ITU-T Rec. X.501 | ISO/IEC 9594-2 
  Extensions
    FROM AuthenticationFramework {joint-iso-itu-t ds(5) module(1)
      authenticationFramework(7) 3} -- ITU-T Rec. X.509 | ISO/IEC 9594-8 
  DirectoryString{}
    FROM SelectedAttributeTypes {joint-iso-itu-t ds(5) module(1)
      selectedAttributeTypes(5) 3}; -- ITU-T Rec. X.520 | ISO/IEC 9594-6 

id-ConfidentialityLabel OBJECT IDENTIFIER ::=
  {joint-iso-itu-t sios(24) specification(0) securityLabels(1)
   confidentiality(0)}

ConfidentialityLabel ::= SET {
  security-policy-identifier  SecurityPolicyIdentifier OPTIONAL,
  security-classification     INTEGER(0..MAX) OPTIONAL,
  privacy-mark                PrivacyMark OPTIONAL,
  security-categories         SecurityCategories OPTIONAL
}(ALL EXCEPT ({ -- none; at least one component shall be present --}))

SecurityPolicyIdentifier ::= OBJECT IDENTIFIER

PrivacyMark ::= CHOICE {
  pString     PrintableString(SIZE (1..ub-privacy-mark-length)),
  utf8String  UTF8String(SIZE (1..ub-privacy-mark-length))
}

ub-privacy-mark-length INTEGER ::= 128 -- as defined in X.411

SecurityCategories ::= SET SIZE (1..MAX) OF SecurityCategory

SecurityCategory ::= SEQUENCE {
  type   [0]  SECURITY-CATEGORY.&id({SecurityCategoriesTable}),
  value
    [1] EXPLICIT SECURITY-CATEGORY.&Type({SecurityCategoriesTable}{@type})
}

SECURITY-CATEGORY ::= TYPE-IDENTIFIER

SecurityCategoriesTable SECURITY-CATEGORY ::=
  {... -- objects defined as needed --}

SecurityPolicyInformationFile ::= SIGNED{EncodedSPIF}

-- Type EncodedSPIF is an open type constrained to be a value
-- of type SPIF. This open type representation is an opaque
-- string of hexadecimal characters suitable for signature 
-- and signature verification operations. 
EncodedSPIF ::= TYPE-IDENTIFIER.&Type(SPIF)

SPIF ::= SEQUENCE {
  versionInformation           VersionInformationData DEFAULT v1,
  updateInformation            UpdateInformationData,
  securityPolicyIdData         ObjectIdData,
  privilegeId                  OBJECT IDENTIFIER,
  rbacId                       OBJECT IDENTIFIER,
  securityClassifications      [0]  SecurityClassifications OPTIONAL,
  securityCategories           [1]  SPIF-SecurityCategories OPTIONAL,
  equivalentPolicies           [2]  EquivalentPolicies OPTIONAL,
  defaultSecurityPolicyIdData  [3]  ObjectIdData OPTIONAL,
  extensions                   [4]  Extensions OPTIONAL
}

VersionInformationData ::= INTEGER {v1(0)}(0..MAX)

UpdateInformationData ::= SEQUENCE {
  sPIFVersionNumber            SPIFVersionNumber,
  creationDate                 GeneralizedTime,
  originatorDistinguishedName  Name,
  keyIdentifier                OCTET STRING OPTIONAL
}

SPIFVersionNumber ::= INTEGER(0..MAX)

ObjectIdData ::= SEQUENCE {
  objectId      OBJECT IDENTIFIER,
  objectIdName  ObjectIdName
}

ObjectIdName ::= DirectoryString{ubObjectIdNameLength}

SecurityClassifications ::= SEQUENCE SIZE (0..MAX) OF SecurityClassification

SPIF-SecurityCategories ::= SEQUENCE SIZE (0..MAX) OF SecurityCategory

EquivalentPolicies ::= SEQUENCE SIZE (0..MAX) OF EquivalentPolicy

SecurityClassification ::= SEQUENCE {
  labelAndCertValue          LabelAndCertValue,
  classificationName         ClassificationName,
  equivalentClassifications  [0]  EquivalentClassifications OPTIONAL,
  hierarchyValue             INTEGER,
  markingData                [1]  MarkingDataInfo OPTIONAL,
  requiredCategory           [2]  OptionalCategoryGroups OPTIONAL,
  obsolete                   BOOLEAN DEFAULT FALSE
}

LabelAndCertValue ::= INTEGER(0..MAX)

ClassificationName ::= DirectoryString{ubClassificationNameLength}

EquivalentClassifications ::=
  SEQUENCE SIZE (0..MAX) OF EquivalentClassification

EquivalentClassification ::= SEQUENCE {
  securityPolicyId   OBJECT IDENTIFIER,
  labelAndCertValue  LabelAndCertValue,
  applied            Applied
}

Applied ::= INTEGER {encrypt(0), decrypt(1), both(2)}(encrypt | decrypt | both)

MarkingDataInfo ::= SEQUENCE SIZE (1..MAX) OF MarkingData

MarkingData ::= SEQUENCE {
  markingPhrase  MarkingPhrase OPTIONAL,
  markingCodes   MarkingCodes OPTIONAL
}(ALL EXCEPT ({ -- none; at least one component shall be present --}))

MarkingPhrase ::= DirectoryString{ubMarkingPhraseLength}

MarkingCodes ::= SEQUENCE SIZE (1..MAX) OF MarkingCode

MarkingCode ::= INTEGER {
  pageTop(1), pageBottom(2), pageTopBottom(3), documentEnd(4),
  noNameDisplay(5), noMarkingDisplay(6), unused(7), documentStart(8),
  suppressClassName(9)}

OptionalCategoryGroups ::= SEQUENCE SIZE (1..MAX) OF OptionalCategoryGroup

OptionalCategoryGroup ::= SEQUENCE {
  operation      Operation,
  categoryGroup  CategoryGroup
}

Operation ::= INTEGER {onlyOne(1), oneOrMore(2), all(3)
}(onlyOne | oneOrMore | all)

CategoryGroup ::= SEQUENCE SIZE (1..MAX) OF OptionalCategoryData

OptionalCategoryData ::= SEQUENCE {
  optCatDataId  OC-DATA.&id({CatData}),
  categorydata  OC-DATA.&Type({CatData}{@optCatDataId})
}

OC-DATA ::= TYPE-IDENTIFIER

CatData OC-DATA ::=
  {... -- defined as needed --}

EquivalentPolicy ::= SEQUENCE {
  securityPolicyId    OBJECT IDENTIFIER,
  securityPolicyName  SecurityPolicyName OPTIONAL
}

SecurityPolicyName ::= DirectoryString{ubObjectIdNameLength}

clearance ATTRIBUTE ::= {WITH SYNTAX  Clearance
                         ID           id-at-clearance
}

Clearance ::= SEQUENCE { -- Automatic tags applied
  policyId            [0]  OBJECT IDENTIFIER,
  classList           [1]  ClassList DEFAULT {unclassified},
  securityCategories  [2]  SecurityCategories OPTIONAL
}

ClassList ::= BIT STRING {
  unmarked(0), unclassified(1), restricted(2), confidential(3), secret(4),
  topSecret(5)}

-- upper bound values
ubObjectIdNameLength INTEGER ::= 256

ubClassificationNameLength INTEGER ::= 256

ubMarkingPhraseLength INTEGER ::= 256

-- information object classes 
ALGORITHM ::= CLASS {&id    OBJECT IDENTIFIER UNIQUE,
                     &Type  OPTIONAL
}WITH SYNTAX {OID &id
              [PARMS &Type]
}

-- parameterized types 
SIGNED{ToBeSigned} ::= SEQUENCE {
  toBeSigned  ToBeSigned,
  algorithm   AlgorithmIdentifier{{SignatureAlgorithms}},
  signature   BIT STRING
}

AlgorithmIdentifier{ALGORITHM:IOSet} ::= SEQUENCE {
  algorithm   ALGORITHM.&id({IOSet}),
  parameters  ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL
}

SignatureAlgorithms ALGORITHM ::=
  {... -- defined as needed --}

END -- SecurityInformationObjects 
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D