Ieee1609Dot2Dot1Protocol.asn 48.4 KB
Newer Older
--***************************************************************************--
--                       IEEE Std 1609.2.1: Protocol                         --
--***************************************************************************--

/** 
 * @brief NOTE: Section references in this file are to clauses in IEEE Std
 * 1609.2.1 unless indicated otherwise. Full forms of acronyms and
 * abbreviations used in this file are specified in 3.2.
 */

Ieee1609Dot2Dot1Protocol {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) protocol(17) 
  major-version-2(2) minor-version-2(2)}

DEFINITIONS AUTOMATIC TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
  CrlSeries,
  EccP256CurvePoint,
  EccP384CurvePoint,
  EcdsaP256Signature,
  EcdsaP384Signature,
  GeographicRegion, 
  HashAlgorithm,
  HashedId3,
  Psid,
  PublicEncryptionKey,
  PublicVerificationKey,
  SequenceOfPsid,
  SequenceOfPsidSsp,
  SubjectAssurance,
  Uint8,
  Uint16,
  ValidityPeriod
FROM Ieee1609Dot2BaseTypes {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609)
  dot2(2) base(1) base-types(2) major-version-2(2) minor-version-4(4)}
 
  Certificate,
  CertificateId,
  Ieee1609Dot2Data,
  SequenceOfCertificate,
  SequenceOfPsidGroupPermissions,
  SignerIdentifier,
  VerificationKeyIndicator,
  Signature,
  ToBeSignedCertificate
FROM Ieee1609Dot2 {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609)
  dot2(2) base(1) schema(1) major-version-2(2) minor-version-6(6)}
--WITH SUCCESSORS

  AcaEeInterfacePdu
FROM Ieee1609Dot2Dot1AcaEeInterface {iso(1) identified-organization(3) 
  ieee(111) standards-association-numbered-series-standards(2) 
  wave-stds(1609) dot2(2) extension-standards(255) dot1(1) interfaces(1) 
  aca-ee(1) major-version-2(2) minor-version-4(4)}

  AcaLaInterfacePdu
FROM Ieee1609Dot2Dot1AcaLaInterface {iso(1) identified-organization(3) 
  ieee(111) standards-association-numbered-series-standards(2) 
  wave-stds(1609) dot2(2) extension-standards(255) dot1(1) interfaces(1) 
  aca-la(2) major-version-2(2) minor-version-4(4)}

  AcaMaInterfacePdu
FROM Ieee1609Dot2Dot1AcaMaInterface {iso(1) identified-organization(3) 
  ieee(111) standards-association-numbered-series-standards(2) 
  wave-stds(1609) dot2(2) extension-standards(255) dot1(1) interfaces(1) 
  aca-ma(3) major-version-2(2) minor-version-4(4)}

  AcaRaInterfacePdu
FROM Ieee1609Dot2Dot1AcaRaInterface {iso(1) identified-organization(3) 
  ieee(111) standards-association-numbered-series-standards(2) 
  wave-stds(1609) dot2(2) extension-standards(255) dot1(1) interfaces(1) 
  aca-ra(4) major-version-2(2) minor-version-2(2)}

  AcpcTreeId
FROM Ieee1609Dot2Dot1Acpc {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) acpc(18) major-version-1(1) 
  minor-version-4(4)}

  CertManagementPdu
FROM Ieee1609Dot2Dot1CertManagement{iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) cert-management(7) 
  major-version-2(2) minor-version-4(4)}

  EcaEeInterfacePdu
FROM Ieee1609Dot2Dot1EcaEeInterface {iso(1) identified-organization(3) 
  ieee(111) standards-association-numbered-series-standards(2) 
  wave-stds(1609) dot2(2) extension-standards(255) dot1(1) interfaces(1) 
  eca-ee(9) major-version-2(2) minor-version-2(2)}

  EeMaInterfacePdu
FROM Ieee1609Dot2Dot1EeMaInterface {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) ee-ma(10) major-version-2(2)
  minor-version-1(1)}

  EeRaInterfacePdu
FROM Ieee1609Dot2Dot1EeRaInterface {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) ee-ra(11) major-version-2(2) 
  minor-version-2(2)}

  LaMaInterfacePdu
FROM Ieee1609Dot2Dot1LaMaInterface {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) la-ma(12) major-version-2(2)
  minor-version-1(1)}

  LaRaInterfacePdu
FROM Ieee1609Dot2Dot1LaRaInterface {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) la-ra(13) major-version-2(2)
  minor-version-1(1)}

  MaRaInterfacePdu
FROM Ieee1609Dot2Dot1MaRaInterface {iso(1) identified-organization(3) ieee(111)
  standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
  extension-standards(255) dot1(1) interfaces(1) ma-ra(14) major-version-2(2)
  minor-version-1(1)}
;

/**
 * @class SecurityMgmtPsid
 *
 * @brief This PSID, 0x23, identifies security management activities as
 * defined in this document. 
 */
  SecurityMgmtPsid ::= Psid (35)

/**
 * @class ScmsPdu
 *
 * @brief This is the parent structure that encompasses all parent structures
 * of interfaces defined in the SCMS. An overview of this structure is as
 * follows:
 *
 * @param version contains the current version of the structure.
 *
 * @param aca-ee contains the interface structures defined for interaction
 * between the ACA and the EE.
 *
 * @param aca-la contains the interface structures defined for interaction
 * between the ACA and the LA.
 *
 * @param aca-ma contains the interface structures defined for interaction
 * between the ACA and the MA.
 *
 * @param aca-ra contains the interface structures defined for interaction
 * between the ACA and the RA.
 *
 * @param cert contains the interface structures defined for certificate
 * management.
 *
 * @param eca-ee contains the interface structures defined for interaction
 * between the ECA and the EE.
 *
 * @param ee-ma contains the interface structures defined for interaction
 * between the EE and the MA.
 *
 * @param ee-ra contains the interface structures defined for interaction
 * between the EE and the RA.
 *
 * @param la-ma contains the interface structures defined for interaction
 * between the LA and the MA.
 *
 * @param la-ra contains the interface structures defined for interaction
 * between the LA and the RA.
 *
 * @param ma-ra contains the interface structures defined for interactions
 * between the MA and the RA.
 */
  ScmsPdu ::= SEQUENCE {
    version  Uint8 (2),
    content  CHOICE {
      aca-ee  AcaEeInterfacePdu,
      aca-la  AcaLaInterfacePdu,
      aca-ma  AcaMaInterfacePdu,
      aca-ra  AcaRaInterfacePdu,
      cert    CertManagementPdu,
      eca-ee  EcaEeInterfacePdu,
      ee-ma   EeMaInterfacePdu,
      ee-ra   EeRaInterfacePdu,
      la-ma   LaMaInterfacePdu,
      la-ra   LaRaInterfacePdu,
      ma-ra   MaRaInterfacePdu,
      ...
    }
  }

--***************************************************************************--
--                            Parameterized Types                            --
--***************************************************************************--

/**
 * @class ScmsPdu-Scoped
 *
 * @brief This structure defines a parameterized type for creating a scoped
 * data as a subtype of ScmsPdu.
 */
  ScmsPdu-Scoped {Pdu} ::= ScmsPdu (WITH COMPONENTS {
    ...,
    content (CONSTRAINED BY {
      Pdu
    })
  })

/**
 * @class Ieee1609Dot2Data-Unsecured
 *
 * @brief This structure defines a parameterized type for creating an
 * unsecured data as a subtype of Ieee1609Dot2Data.
 */
  Ieee1609Dot2Data-Unsecured {Tbu} ::= Ieee1609Dot2Data (WITH COMPONENTS {
    content (WITH COMPONENTS {
      ...,
      unsecuredData (CONTAINING Tbu)
    })
  })

/**
 * @class Ieee1609Dot2Data-Signed
 *
 * @brief This structure defines a parameterized type for creating a signed
 * data as a subtype of Ieee1609Dot2Data.
 */
  Ieee1609Dot2Data-Signed {Tbs, Psid} ::= 
    Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
      ...,
      signedData (WITH COMPONENTS {
        ...,
        tbsData (WITH COMPONENTS {
          ...,
          payload (WITH COMPONENTS {
            ...,
            data (WITH COMPONENTS {
              ...,
              content (WITH COMPONENTS {
                unsecuredData (CONTAINING Tbs)
              })
            })
          }),
          headerInfo (WITH COMPONENTS {
            ...,
            psid (Psid),
            generationTime PRESENT,
            expiryTime ABSENT,
            generationLocation ABSENT,
            p2pcdLearningRequest ABSENT,
            missingCrlIdentifier ABSENT,
            encryptionKey ABSENT
          })
        }),
        signer (SignerSingleCert)
      })
    })
  })

/**
 * @class Ieee1609Dot2Data-Encrypted
 *
 * @brief This structure defines a parameterized type for creating an
 * encrypted data as a subtype of Ieee1609Dot2Data. An overview of this
 * structure is as follows:
 *
 * @param Tbe is first encrypted and the resulting ciphertext is used as
 * input to the encryptedData field.
 */
  Ieee1609Dot2Data-Encrypted {Tbe} ::= 
    Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
      encryptedData (CONSTRAINED BY {
        --encryption of-- Tbe
      })
    })
  })

/**
 * @class Ieee1609Dot2Data-EncryptedOpen
 *
 * @brief This structure defines a parameterized type for creating an
 * encrypted data as a subtype of Ieee1609Dot2Data. This structure differs
 * from Ieee1609Dot2Data-Encrypted in that it does not specify the contents
 * of the encrypted data.
 */
  Ieee1609Dot2Data-EncryptedOpen ::= 
    Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
      encryptedData
    })
  })

/**
 * @class Ieee1609Dot2Data-SignedCertRequest
 *
 * @brief This structure defines a parameterized type for creating a signed
 * certificate request as a subtype of Ieee1609Dot2Data.
 */
  Ieee1609Dot2Data-SignedCertRequest {Tbscr, Signer} ::= 
    Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
    ...,
      signedCertificateRequest (CONTAINING 
      SignedCertificateRequest (WITH COMPONENTS {
        ...,
        tbsRequest (Tbscr),
        signer (Signer)
      }))
    })
  })
  
/**
 * @class X509Certificate
 *
 * @brief This structure is a wrapper for an ITU-T X.509 certificate.
 *
 * <br><br>NOTE: ITU-T X.509 certificates are encoded with the ASN.1 DER
 * rather than the OER used in this document and so cannot be "directly"
 * imported into these structures.
 */ 
  X509Certificate ::= OCTET STRING

/**
 * @class SequenceOfX509Certificate
 *
 * @brief This type is used for clarity of definitions.
 */
  SequenceOfX509Certificate ::= SEQUENCE OF X509Certificate

/**
 * @class X509SignerIdentifier
 *
 * @brief This structure identifies an ITU-T X.509 certificate used to sign a
 * signed data structure. The only data structure currently defined that can
 * be signed by an ITU-T X.509 certificate is SignedX509CertificateRequest.
 */
  X509SignerIdentifier ::= CHOICE {
    certificate  SequenceOfX509Certificate,
    ...
  }

/**
 * @class Ieee1609Dot2Data-SignedX509AuthenticatedCertRequest
 *
 * @brief This structure defines a parameterized type for creating a
 * certificate request, signed with an ITU-T X.509 certificate, as a subtype of
 * Ieee1609Dot2Data. It makes use of the extension of Ieee1609Dot2Content
 * defined in 11.2.3.  
 */
  Ieee1609Dot2Data-SignedX509AuthenticatedCertRequest {Tbscr, Signer} 
    ::= Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
    ...,
      signedX509CertificateRequest (CONTAINING 
      SignedX509CertificateRequest (WITH COMPONENTS {
        ...,
        tbsRequest (Tbscr),
        signer (Signer)
      }))
    })
  })

/**
 * @class Ieee1609Dot2Data-SignedEncrypted
 *
 * @brief This structure defines a parameterized type for creating a signed
 * then encrypted data as a subtype of Ieee1609Dot2Data.
 */
  Ieee1609Dot2Data-SignedEncrypted {Tbse, Psid} ::= 
    Ieee1609Dot2Data-Encrypted {
    Ieee1609Dot2Data-Signed {
      Tbse, 
      Psid
    }
  }

/**
 * @class Ieee1609Dot2Data-EncryptedSigned
 *
 * @brief This structure defines a parameterized type for creating an
 * encrypted then signed data as a subtype of Ieee1609Dot2Data.
 */
/*  Ieee1609Dot2Data-EncryptedSigned {Tbes, Psid} ::= Ieee1609Dot2Data-Signed {
    Ieee1609Dot2Data-Encrypted {
      Tbes
    }, 
    Psid

/**
 * @class Ieee1609Dot2Data-EncryptedOpenSigned
 *
 * @brief This structure defines a parameterized type for creating an
 * encrypted then signed data as a subtype of Ieee1609Dot2Data. Unlike
 * Ieee1609Dot2Data-EncryptedSigned, this structure does not specify the
 * contents to be encrypted. This structure is intended for use in
 * misbehavior report upload where the encrypted data is received by the RA
 * that does not know the contents.
 */
  Ieee1609Dot2Data-EncryptedOpenSigned{Psid} ::= 
    Ieee1609Dot2Data-Signed {
    Ieee1609Dot2Data-EncryptedOpen, 
    Psid
  }

/**
 * @class Ieee1609Dot2Data-SignedEncryptedCertRequest
 *
 * @brief This structure defines a parameterized type for creating a signed
 * then encrypted certificate request as a subtype of Ieee1609Dot2Data.
 */
  Ieee1609Dot2Data-SignedEncryptedCertRequest {Tbstecr, Signer} ::= 
    Ieee1609Dot2Data-Encrypted {
    Ieee1609Dot2Data-SignedCertRequest {
      Tbstecr, 
      Signer
    }
  }

/**
 * @class Ieee1609Dot2Data-SymmEncryptedSingleRecipient
 *
 * @brief This structure defines a parameterized type for creating an
 * encrypted data as a subtype of Ieee1609Dot2Data. An overview of this
 * structure is as follows:
 *
 * @param Tbe is first encrypted and the resulting ciphertext is used as
 * input to the encryptedData field.
 */
  Ieee1609Dot2Data-SymmEncryptedSingleRecipient {Tbe} ::= 
    Ieee1609Dot2Data (WITH COMPONENTS {
    ...,
    content (WITH COMPONENTS {
      encryptedData (CONSTRAINED BY {
        --contains only one RecipientInfo, of form symmRecipinfo
		--symmetric encryption of-- Tbe
      })
    })
  })

--***************************************************************************--
--                                Signer Types                               --
--***************************************************************************--

/**
 * @class SignerSingleCert
 *
 * @brief This structure is used to indicate a SignerIdentifier with a
 * certificate chain of size 1.
 */
  SignerSingleCert ::= SignerIdentifier(WITH COMPONENTS {
    certificate (SequenceOfCertificate (SIZE (1)))
  })

/**
 * @class SignerSingleX509Cert
 *
 * @brief This structure is used to indicate an X509SignerIdentifier with a
 * certificate chain of size 1.
 */  
  SignerSingleX509Cert ::= X509SignerIdentifier(WITH COMPONENTS {
    certificate (SequenceOfX509Certificate (SIZE (1)))
  })

/**
 * @class SignerSelf
 *
 * @brief This structure is used to indicate a SignerIdentifier of type self.
 */
  SignerSelf ::= SignerIdentifier(WITH COMPONENTS {
    self
  })

--***************************************************************************--
--                            Certificate Requests                           --
--***************************************************************************--

  ScmsPdu-RaAcaCertRequest ::= ScmsPdu-Scoped {
    AcaRaInterfacePdu (WITH COMPONENTS {
      raAcaCertRequest
    })
  }
  ScmsPdu-EeEcaCertRequest ::= ScmsPdu-Scoped {
    EcaEeInterfacePdu (WITH COMPONENTS {
      eeEcaCertRequest
    })
  } 
  ScmsPdu-EeRaCertRequest ::= ScmsPdu-Scoped {
    EeRaInterfacePdu (WITH COMPONENTS {
      eeRaCertRequest
    })
  }
  ScmsPdu-EeRaSuccessorEnrollmentCertRequest ::= ScmsPdu-Scoped {
    EeRaInterfacePdu (WITH COMPONENTS {
      eeRaSuccessorEnrollmentCertRequest
    })
  }

/**
 * @class ScopedCertificateRequest
 *
 * @brief This structure defines the all certificate request structures as a
 * scoped version of the ScmsPdu.
 */
  ScopedCertificateRequest ::= ScmsPdu (
    ScmsPdu-RaAcaCertRequest | ScmsPdu-EeEcaCertRequest | ScmsPdu-EeRaCertRequest | ScmsPdu-EeRaSuccessorEnrollmentCertRequest
  )

/**
 * @class SignedCertificateRequest
 *
 * @brief This structure defines the format of a signed certificate request.
 * An overview of this structure is as follows:
 *
 * <br><br>The signature is generated on the hash of this structure, obtained
 * per the rules specified for hashing data objects in 5.3.1 of IEEE Std
 * 1609.2a-2017, with the parameter <i>Data Input</i> equal to the C-OER
 * encoding of tbsRequest, and the parameter <i>Signer Identifier Input</i>
 * equal to the signer's enrollment certificate.
 *
 * @param hashAlgorithmId contains the identifier of the hash algorithm used
 * inside the binary tree.
 *
 * @param tbsRequest contains the certificate request information that is
 * signed by the recipient.
 *
 * @param signer denotes the signing entity's identifier.
 *
 * @param signature contains the request sender's signature.
 */
  SignedCertificateRequest ::= SEQUENCE  {
    hashAlgorithmId  HashAlgorithm,
    tbsRequest       ScopedCertificateRequest,
    signer           SignerIdentifier,
    signature        Signature
  }

/**
 * @class SignedX509CertificateRequest
 *
 * @brief This structure contains a certificate request signed with an ITU-T 
 * X.509 certificate. The only type of certificate request signed with an 
 * ITU-T X.509 certificate supported in this document is an authorization
 * certificate request. An overview of this structure is as follows:
 *
 * <br><br>The signature is generated on the hash of this structure, obtained
 * per the rules specified for hashing data objects in 5.3.1 of IEEE
 * Std 1609.2a-2017, with the parameter <i>Data Input</i> equal to the C-OER
 * encoding of tbsRequest, and the parameter <i>Signer Identifier Input</i>
 * equal to the signer's certificate, that is, the ITU-T X.509 certificate
 * contained in the OCTET STRING indicated by the first X509Certificate in
 * signer.
 *
 * @param hashAlgorithmId contains the identifier of the hash algorithm used
 * inside the binary tree.
 *
 * @param tbsRequest contains the certificate request information that is
 * signed by the recipient.
 *
 * @param signer denotes the signing entity's identifier.
 *
 * @param signature contains the request sender's signature.
 */ 
  SignedX509CertificateRequest ::= SEQUENCE  {
    hashAlgorithmId  HashAlgorithm,
    tbsRequest       ScopedCertificateRequest,
    signer           X509SignerIdentifier,
    signature        Signature
  }

--***************************************************************************--
--                             ACA - EE Interface                            --
--***************************************************************************--

/**
 * @class AcaEeCertResponsePlainSpdu
 *
 * @brief This structure contains a certificate response for consumption by
 * the EE. In the architecture of this document, although it is created by the
 * ACA, it is made available to the EE via the RA as described in 8.2.
 *
 * <br><br>The ACA creates this response when 1) the compact unified
 * butterfly key mechanism is not being used (that is, some other flavor of
 * butterfly key is being used, or butterfly keys are not being used) and 2)
 * it is not necessary to protect the EE's privacy from the RA, for example,
 * when the certificate being returned is not a pseudonym certificate.
 */
  AcaEeCertResponsePlainSpdu ::= Ieee1609Dot2Data-Unsecured {
    ScmsPdu-Scoped {
      AcaEeInterfacePdu (WITH COMPONENTS {
        acaEeCertResponse
      })
    }
  }

/**
 * @class AcaEeCertResponsePrivateSpdu
 *
 * @brief This structure contains a certificate response for consumption by
 * the EE. In the architecture of this document, although it is created by the
 * ACA, it is made available to the EE via the RA as described in 8.2. 
 *
 * <br><br>The ACA creates this response when 1) the compact unified
 * butterfly key mechanism is not being used (that is, some other flavor of
 * butterfly key is being used, or butterfly keys are not being used) and 2)
 * it is necessary to protect the EE's privacy from the RA, for example when
 * the certificate being returned is a pseudonym certificate.
 *
 * <br><br>The structure consists of a signed SPDU containing an encrypted
 * SPDU.
 *
 * <br><br>The encrypted SPDU is encrypted with the response
 * encryption key that was provided to the ACA for that purpose. This key is
 * determined as follows:
 * <ul>
 * <li> If the original EeRaCertRequest from the end entity indicated a single
 * response encryption key, that is, if the additionalParams.encryptionKey
 * field was present in the request, then the response is encrypted with that
 * key.
 * </li>
 *
 * <li> If the original EeRaCertRequest from the end entity indicated a
 * response encryption key generated with the �original� butterfly key
 * mechanism, that is, the additionalParams.original field was provided in the
 * request, then the response is encrypted with the cocoon encryption key
 * derived from additionalParams.original.encryptionKey and 
 * additionalParams.original.encryptionExpansion as specified in 9.3.4.2
 * and the corresponding decryption private key is derived as specified in
 * 9.3.4.1.</li>
 *
 * <li> If the original EeRaCertRequest from the end entity indicated a
 * response encryption key generated with the �unified� butterfly key
 * mechanism, that is, the additionalParams.unified field was provided in the
 * request, then the response is encrypted with the cocoon encryption key
 * derived from tbsCert.verifyKeyIndicator and additionalParams.unified as
 * specified in 9.3.4.2 and the corresponding decryption private key is 
 * derived as specified in 9.3.4.1.</li>
 * </ul>
 *
 * See 9.3 for more material about butterfly keys.
 *
 * <br><br>The resulting Ieee1609Dot2Data of content type encryptedData is
 * signed by the same ACA certificate that was used to issue the certificate
 * field in the AcaEeCertResponse. If this structure is signed by a different
 * ACA certificate, it is invalid. The ACA certificate shall follow the ACA
 * certificate profile given in 7.7.3.2.
 *
 * <br><br>NOTE 1: <b>Other potential responses to an authorization certificate
 * request</b>. If the original request indicated the use of �compact unified�
 * butterfly key mechanism by including the additionalParams.compactUnified
 * field, the response shall be a AcaEeCertResponseCubkSpdu, not a
 * AcaEeCertResponsePrivateSpdu.
 *
 * <br><br>NOTE 2: <b>How the ACA obtains the response encryption key</b>. This
 * document provides the RaAcaCertRequest structure to allow the RA to
 * indicate whether the original or unified butterfly key mechanism is to be
 * used via the flags field. The encryption key for encrypting
 * AcaEeCertResponse is calculated by the indicated method even if the RA
 * does not use an RaAcaCertRequest as defined in this document to
 * communicate the certificate request to the ACA.
 *
 * <br><br>NOTE 3: <b>Consistency between inner and outer signers, and the IEEE
 * Std 1609.2 model</b>. This SPDU introduces a new type of validity condition
 * by requiring that the ACA that signs the outer signed SPDU is also the ACA
 * that issued the certificate inside the encrypted SPDU. This requires that
 * to verify the inner �SPDU�, that is, the certificate, the verifier
 * needs to store the information from the outer SPDU. This is not a violation
 * of the IEEE 1609.2 model: Subclause 4.2.2.3 of IEEE Std 1609.2 considers all
 * operations carried out on received data to be atomic and does not put any
 * restrictions on the information that is stored between operations. However,
 * it should be noted that because the IEEE 1609.2 approach enables SPDUs to
 * be nested within one another as Ieee1609Dot2Data, in principle an
 * implementation could be built that iterated through the layers of a nested
 * SPDU within a single call from the invoking application instance. (And it
 * should also be noted that IEEE Std 1609.2 was consciously designed to
 * enable this approach: Although the primitives provided in IEEE Std 1609.2
 * only support the series-of-single-operations approach, an implementation
 * could layer this �one-invocation processing� on top of the IEEE 1609.2
 * interface as an optimization.) A �one-invocation processing� implementation
 * of that type would have to anticipate situations of coupling between inner
 * and outer SPDUs like the one created by this AcaEeCertResponsePrivateSpdu,
 * and allow the invoking certificate management service to check consistency
 * at the application layer, perhaps by (for example) returning the signing
 * certificates for all nested signed SPDUs. How this is to be implemented is
 * implementation specific; this note is intended as a notification of this
 * potential issue to implementers planning to implement one-invocation
 * processing. 
 */
 /* AcaEeCertResponsePrivateSpdu ::= Ieee1609Dot2Data-EncryptedSigned {
    ScmsPdu-Scoped {
      AcaEeInterfacePdu (WITH COMPONENTS {
        acaEeCertResponse
      })
    }, 
    SecurityMgmtPsid

/**
 * @class AcaEeCertResponseCubkSpdu
 *
 * @brief This structure contains a certificate response for consumption by
 * the EE. In the architecture of this document, although it is created by
 * the ACA, it is made available to the EE via the RA as described in 8.2. 
 *
 * <br><br>The ACA creates a certificate response in this form when the
 * compact unified butterfly key mechanism is being used. If the
 * RaAcaCertRequest structure was used to communicate between the RA and the
 * ACA, the RA indicated use of compact unified butterfly keys by setting the
 * cubk (1) bit in the bkType field in the corresponding RaAcaCertRequest. 
 *
 * <br><br>The AcaEeCertResponse is encrypted by the ACA using the cocoon
 * public key for encryption. See 9.3.4.2 for how the ACA derives the cocoon
 * public key for encryption, using the tbsCert.verifyKeyIndicator field in the
 * corresponding RaAcaCertRequest as the input cocoon public key for signing
 * Bt. See 9.3.4.1 for how the EE derives the corresponding cocoon private
 * key for encryption.
 */
  AcaEeCertResponseCubkSpdu ::= Ieee1609Dot2Data-Encrypted {
    ScmsPdu-Scoped {
      AcaEeInterfacePdu (WITH COMPONENTS {
        acaEeCertResponse
      })
    }
  }

--***************************************************************************--
--                             ACA - LA Interface                            --
--***************************************************************************--

--***************************************************************************--
--                             ACA - MA Interface                            --
--***************************************************************************--

--***************************************************************************--
--                             ACA - RA Interface                            --
--***************************************************************************--

/**
 * @class RaAcaCertRequestSpdu
 *
 * @brief This structure is the SPDU used to send a signed RaAcaCertRequest.
 * For the signature to be valid the signing certificate shall conform to the
 * RA certificate profile given in 7.7.3.9, contain a PSID equal to
 * SecurityMgmtPsid (0x23) and a corresponding SSP containing the C-OER
 * encoding of an ScmsSsp indicating RaSsp. The
 * toBeSigned.certRequestPermissions field of the RA certificate shall permit
 * the requested permissions in the raAcaCertRequest.tbsCert.appPermissions
 * field.
 */
  RaAcaCertRequestSpdu ::= Ieee1609Dot2Data-SignedCertRequest {
    ScmsPdu-Scoped {
      AcaRaInterfacePdu (WITH COMPONENTS {
        raAcaCertRequest
      })
    }, 
    SignerSingleCert
  }

/**
 * @class AcaRaCertResponseSpdu
 *
 * @brief This structure is the SPDU used to send a signed AcaRaCertResponse.
 * For the signature to be valid the signing certificate shall contain a PSID
 * equal to SecurityMgmtPsid (0x23) and a corresponding SSP containing the
 * C-OER encoding of an ScmsSsp indicating AcaSsp.
 */
  AcaRaCertResponseSpdu ::= Ieee1609Dot2Data-Signed {
    ScmsPdu-Scoped {
      AcaRaInterfacePdu (WITH COMPONENTS {
        acaRaCertResponse
      })
    }, 
    SecurityMgmtPsid
  }

--***************************************************************************--
--                           Certificate Management                          --
--***************************************************************************--

/**
 * @class CompositeCrlSpdu
 *
 * @brief This structure is the SPDU used to send an unsecured CompositeCrl.
 * It is used to create composite CRL files as specified in 8.5.
 */
  CompositeCrlSpdu ::= Ieee1609Dot2Data-Unsecured {
    ScmsPdu-Scoped {
      CertManagementPdu (WITH COMPONENTS {
        compositeCrl
      })
    }
  }

/**
 * @class CertificateChainSpdu
 *
 * @brief This structure is the SPDU used to send an unsecured
 * CertificateChain. It is used to create certificate chain files as
 * specified in 8.4.
 */
  CertificateChainSpdu ::= Ieee1609Dot2Data-Unsecured {
    ScmsPdu-Scoped {
      CertManagementPdu (WITH COMPONENTS {
        certificateChain
      })
    }
  }

/**
 * @class MultiSignedCtlSpdu
 *
 * @brief This structure is the SPDU used to send an unsecured MultiSignedCtl.
 */
  MultiSignedCtlSpdu ::= Ieee1609Dot2Data-Unsecured {
    ScmsPdu-Scoped {
      CertManagementPdu (WITH COMPONENTS {
        multiSignedCtl
      })
    }
  }

/**
 * @class CtlSignatureSpdu
 *
 * @brief This structure is the SPDU used to send a signed
 * ToBeSignedCtlSignature. For the signature to be valid, the signing
 * certificate shall match the elector certificate profile in 7.7.3.7. This
 * means that the signature is calculated as specified in IEEE Std 1609.2,
 * with the data input to the hash process consisting of the C-OER encoding
 * of the tbsData that includes the ToBeSignedCtlSignature.
 */
  CtlSignatureSpdu ::= Ieee1609Dot2Data-Signed {
    ScmsPdu-Scoped {
      CertManagementPdu (WITH COMPONENTS {
        tbsCtlSignature
      })
    }, 
    SecurityMgmtPsid
  }
  
/**
 * @class CertificateManagementInformationStatusSpdu
 *
 * @brief This structure is the SPDU used to send a signed
 * CertManagementInfoStatus. For the signature to be valid the signing
 * certificate shall conform to the RA certificate profile given in 7.7.3.9 or
 * the DC certificate profile given in 7.7.3.10.
 */
  CertificateManagementInformationStatusSpdu ::= 
    Ieee1609Dot2Data-Signed {
      ScmsPdu-Scoped {
        CertManagementPdu (WITH COMPONENTS {
          infoStatus 
        })
      }, 
      SecurityMgmtPsid
    }


--***************************************************************************--
--                             ECA - EE Interface                            --
--***************************************************************************--

/**
 * @class EeEcaCertRequestSpdu
 *
 * @brief This structure is the SPDU used to send a signed EeEcaCertRequest,
 * as follows: 
 * <ul>
 * <li> If eeEcaCertRequest.canonicalId is not present, the EE signs this
 * structure using the private key corresponding to the
 * tbsCert.verifyKeyIndicator field of the EeEcaCertRequest.</li>
 *
 * <li> If eeEcaCertRequest.canonicalId is present, the EE signs this
 * structure using the canonical private key as specified in 4.1.4.2.</li>
 * </ul>
 */ 
  EeEcaCertRequestSpdu ::= Ieee1609Dot2Data-SignedCertRequest {
    ScmsPdu-Scoped {
      EcaEeInterfacePdu (WITH COMPONENTS {
        eeEcaCertRequest
      })
    }, 
    SignerSelf
  }

/**
 * @class EcaEeCertResponseSpdu
 *
 * @brief This structure is the SPDU used to send a signed EcaEeCertResponse.
 * For the signature to be valid, the signing certificate shall contain a PSID
 * equal to SecurityMgmtPsid (0x23) and a corresponding SSP containing the
 * C-OER encoding of an ScmsSsp indicating EcaSsp.
 */
  EcaEeCertResponseSpdu ::= Ieee1609Dot2Data-Signed {
    ScmsPdu-Scoped {
      EcaEeInterfacePdu (WITH COMPONENTS {
        ecaEeCertResponse
      })
    }, 
    SecurityMgmtPsid
  }

--***************************************************************************--
--                              EE - MA Interface                            --
--***************************************************************************--

--***************************************************************************--
--                              EE - RA Interface                            --
--***************************************************************************--

/**
 * @class EeRaCertRequestSpdu
 *
 * @brief This structure is the SPDU used to send a signed then encrypted
 * EeRaCertRequest. It is a choice of the IEEE 1609.2 authenticated
 * certificate request, which may be any kind of EE-RA certificate request,
 * and the ITU-T X.509 certificate request, which is required to be an
 * authorization certificate request. 
 */
  EeRaCertRequestSpdu ::= Ieee1609Dot2Data ( 
    EeRa1609Dot2AuthenticatedCertRequestSpdu |
    EeRaX509AuthenticatedCertRequestSpdu
  )

/**
 * @class EeRa1609Dot2AuthenticatedCertRequestSpdu
 *
 * @brief This structure is the SPDU used to send a signed then encrypted IEEE
 * 1609.2 authenticated certificate request. The EE signs this structure
 * using its enrollment certificate. The enrollment certificate shall conform
 * to the enrollment certificate profile given in 7.7.3.5. The EE encrypts
 * the signed structure using the encryptionKey from the RA's certificate.
 */
  EeRa1609Dot2AuthenticatedCertRequestSpdu ::= 
    Ieee1609Dot2Data-SignedEncryptedCertRequest {
    ScmsPdu-Scoped {
      EeRaInterfacePdu (WITH COMPONENTS {
        eeRaCertRequest
      })
    }, 
    SignerSingleCert
  }

/**
 * @class EeRaX509AuthenticatedCertRequestSpdu
 *
 * @brief This structure is the SPDU used to send a signed then encrypted ITU-T
 * X.509authenticated certificate request. The EE signs this structure
 * using its enrollment certificate. The enrollment certificate shall conform
 * to the enrollment certificate profile given in 7.7.3.6. The EE encrypts
 * the signed structure using the encryptionKey from the RA's certificate. 
 */
  EeRaX509AuthenticatedCertRequestSpdu ::= Ieee1609Dot2Data-Encrypted {
    Ieee1609Dot2Data-SignedX509AuthenticatedCertRequest {
      ScmsPdu-Scoped {
        EeRaInterfacePdu (WITH COMPONENTS {
          eeRaCertRequest
        })
      }, 
      SignerSingleX509Cert
    }
  }

/**
 * @class RaEeCertAckSpdu
 *
 * @brief This structure is the SPDU used to send a signed RaEeCertAck to
 * acknowledge the receipt of an EeRaCertRequestSpdu. For the signature to be
 * valid the signing certificate shall conform to the RA certificate profile
 * given in 7.7.3.9.
 */
  RaEeCertAckSpdu ::= Ieee1609Dot2Data-Signed {
    ScmsPdu-Scoped {
      EeRaInterfacePdu (WITH COMPONENTS {
        raEeCertAck