(* X5OOAUTH.TPL *)
(*****************************************************************************)
(* ASN.1 X.500 Authorisation Framework                                       *)
(*                                                                           *)
(* Known deficiencies :                                                      *)
(*   - AlgorithmIdentifier parameters should be ANY DEFINED BY               *)
(*   - CertificateList incompletely specified                                *)
(*****************************************************************************)


Certificate (SIGNED)       LABEL     = 5cers
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5cert, U 16 C,M,0> ,
                                         <5algi, U 16 C,M,0> ,
                                         <5encr, U  3 P,M,0> }

ENCRYPTED                  LABEL     = 5encr
                           STRUCTURE = BITSTRING

Certificate                LABEL     = 5cert
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5vern, C  0 P,D,0> ,
                                         <5srln, U  2 P,M,0> ,
                                         <5sign, U 16 C,M,0> ,
                                         <5issu, U  0 P,M,0> ,
                                         <5vldy, U 16 C,M,0> ,
                                         <5subj, U  0 P,M,0> ,
                                         <5spki, U 16 C,M,0> }

signature                  LABEL     = 5sign
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5algm, U  6 P,M,0> ,
                                         <5prms, U  0 P,O,0> }

issuer                     LABEL     = 5issu
                           STRUCTURE = CHOICE
                           CHILDREN  = { <5rdns, U 16 C,O,0> }

subject                    LABEL     = 5subj
                           STRUCTURE = CHOICE
                           CHILDREN  = { <5rdns, U 16 C,O,0> }

Version                    LABEL     = 5vern
                           STRUCTURE = INTEGER

serialNumber               LABEL     = 5srln
                           STRUCTURE = INTEGER

Validity                   LABEL     = 5vldy
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5nbef, U 23 P,M,0> ,
                                         <5naft, U 23 P,M,0> }

notBefore                  LABEL     = 5nbef
                           STRUCTURE = UTC TIME

notAfter                   LABEL     = 5naft
                           STRUCTURE = UTC TIME

SubjectPublicKeyInfo       LABEL     = 5spki
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5algi, U 16 C,M,0> ,
                                         <5spky, U  3 P,O,0> }

subjectPublicKey           LABEL     = 5spky
                           STRUCTURE = BITSTRING

AlgorithmIdentifier        LABEL     = 5algi
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5algm, U  6 P,M,0>*,
                                         <5prms, U  0 P,O,0> }

algorithm                  LABEL     = 5algm
                           STRUCTURE = OBJECT IDENTIFIER

parameters                 LABEL     = 5prms
                           STRUCTURE = ANY DEFINED BY
                           DEFGLABEL = 5algm
                           REGISTER  = { < {3 4 5 6 7},5xxxx, U  0 P,0> }

xxx dummy parameters       LABEL     = 5xxxx
                           STRUCTURE = ANY
                           CHILDREN  = { }

(* Not sure that such a REGISTER will work. If not then revert back to ANY   *)

Certificates               LABEL     = 5ctfs
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5cers, U 16 C,M,0> ,
                                         <5fctp, U 16 C,O,0> }

ForwardCertificationPath   LABEL     = 5fctp
                           STRUCTURE = SEQUENCE OF
                           CHILDREN  = { <5xctf, U 17 C,O,0> }

CertificationPath          LABEL     = 5cpth
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5cers, U 16 C,M,0> ,
                                         <5CAct, U 16 C,O,0> }

theCACertificates          LABEL     = 5CAct
                           STRUCTURE = SEQUENCE OF
                           CHILDREN  = { <5ctpr, U 16 C,O,0> }

CrossCertificates          LABEL     = 5xctf
                           STRUCTURE = SET OF
                           CHILDREN  = { <5cers, U 16 C,O,0> }

CertificateList (SIGNED)   LABEL     = 5clss
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5clst, U 16 C,M,0> ,
                                         <5algi, U 16 C,M,0> ,
                                         <5encr, U  3 P,M,0> }

CertificateList            LABEL     = 5clst
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5sign, U 16 C,M,0> ,
                                         <5issu, U  0 P,M,0> ,
                                         <5lstu, U 23 P,M,0> ,
                                         <5rvks, U 16 C,M,0> }

lastUpdate                 LABEL     = 5lstu
                           STRUCTURE = UTC TIME

revokedCertificates (SGND) LABEL     = 5rvks
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5rvkd, U 16 C,M,0> ,
                                         <5algi, U 16 C,M,0> ,
                                         <5encr, U  3 P,M,0> }

revokedCertificates        LABEL     = 5rvkd
                           STRUCTURE = SEQUENCE OF
                           CHILDREN  = { <5rvkc, U 16 C,O,0> }

revokedCertificate         LABEL     = 5rvkc
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5sign, U 16 C,M,0> ,
                                         <5issu, U  0 P,M,0> ,
                                         <5usct, U  2 P,M,0> ,
                                         <5rvdt, U 23 P,M,0> }

userCertificate            LABEL     = 5usct
                           STRUCTURE = INTEGER

revocationDate             LABEL     = 5rvdt
                           STRUCTURE = UTC TIME

CertificatePair            LABEL     = 5ctpr
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5frwd, C  0 C,O,0> ,
                                         <5rvrs, C  1 C,O,0> }
(* At least one of CertificatePair must be present                           *)

forward                    LABEL     = 5frwd
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5cert, U 16 C,M,0> ,
                                         <5algi, U 16 C,M,0> ,
                                         <5encr, U  3 P,M,0> }

reverse                    LABEL     = 5rvrs
                           STRUCTURE = SEQUENCE
                           CHILDREN  = { <5cert, U 16 C,M,0> ,
                                         <5algi, U 16 C,M,0> ,
                                         <5encr, U  3 P,M,0> }

!
