| 1 | //
|
|---|
| 2 | // CSI.idl
|
|---|
| 3 | // CORBA Core 3.0 Chapter 24
|
|---|
| 4 |
|
|---|
| 5 | #ifndef _CSI_IDL_
|
|---|
| 6 | #define _CSI_IDL_
|
|---|
| 7 |
|
|---|
| 8 | #ifdef _PRE_3_0_COMPILER_
|
|---|
| 9 | #pragma prefix "omg.org"
|
|---|
| 10 | #else
|
|---|
| 11 | #endif // _PRE_3_0_COMPILER_
|
|---|
| 12 |
|
|---|
| 13 | module CSI {
|
|---|
| 14 |
|
|---|
| 15 | #ifndef _PRE_3_0_COMPILER_
|
|---|
| 16 | typeprefix CSI "omg.org";
|
|---|
| 17 | #endif // _PRE_3_0_COMPILER_
|
|---|
| 18 |
|
|---|
| 19 | // The OMG VMCID; same value as CORBA::OMGVMCID. Do not change ever.
|
|---|
| 20 |
|
|---|
| 21 | const unsigned long OMGVMCID = 0x4F4D0;
|
|---|
| 22 |
|
|---|
| 23 | // An X509CertificateChain contains an ASN.1 BER encoded SEQUENCE
|
|---|
| 24 | // [1..MAX] OF X.509 certificates encapsulated in a sequence of octets. The
|
|---|
| 25 | // subject's certificate shall come first in the list. Each following
|
|---|
| 26 | // certificate shall directly certify the one preceding it. The ASN.1
|
|---|
| 27 | // representation of Certificate is as defined in [IETF RFC 2459].
|
|---|
| 28 |
|
|---|
| 29 | typedef sequence <octet> X509CertificateChain;
|
|---|
| 30 |
|
|---|
| 31 | // an X.501 type name or Distinguished Name encapsulated in a sequence of
|
|---|
| 32 | // octets containing the ASN.1 encoding.
|
|---|
| 33 |
|
|---|
| 34 | typedef sequence <octet> X501DistinguishedName;
|
|---|
| 35 |
|
|---|
| 36 | // UTF-8 Encoding of String
|
|---|
| 37 |
|
|---|
| 38 | typedef sequence <octet> UTF8String;
|
|---|
| 39 |
|
|---|
| 40 | // ASN.1 Encoding of an OBJECT IDENTIFIER
|
|---|
| 41 |
|
|---|
| 42 | typedef sequence <octet> OID;
|
|---|
| 43 |
|
|---|
| 44 | typedef sequence <OID> OIDList;
|
|---|
| 45 |
|
|---|
| 46 | // A sequence of octets containing a GSStoken. Initial context tokens are
|
|---|
| 47 | // ASN.1 encoded as defined in [IETF RFC 2743] Section 3.1,
|
|---|
| 48 | // "Mechanism-Independent token Format", pp. 81-82. Initial context tokens
|
|---|
| 49 | // contain an ASN.1 tag followed by a token length, a mechanism identifier,
|
|---|
| 50 | // and a mechanism-specific token (i.e. a GSSUP::InitialContextToken). The
|
|---|
| 51 | // encoding of all other GSS tokens (e.g. error tokens and final context
|
|---|
| 52 | // tokens) is mechanism dependent.
|
|---|
| 53 |
|
|---|
| 54 | typedef sequence <octet> GSSToken;
|
|---|
| 55 |
|
|---|
| 56 | // An encoding of a GSS Mechanism-Independent Exported Name Object as
|
|---|
| 57 | // defined in [IETF RFC 2743] Section 3.2, "GSS Mechanism-Independent
|
|---|
| 58 | // Exported Name Object Format," p. 84.
|
|---|
| 59 |
|
|---|
| 60 | typedef sequence <octet> GSS_NT_ExportedName;
|
|---|
| 61 |
|
|---|
| 62 | typedef sequence <GSS_NT_ExportedName> GSS_NT_ExportedNameList;
|
|---|
| 63 |
|
|---|
| 64 | // The MsgType enumeration defines the complete set of service context
|
|---|
| 65 | // message types used by the CSI context management protocols, including
|
|---|
| 66 | // those message types pertaining only to the stateful application of the
|
|---|
| 67 | // protocols (to insure proper alignment of the identifiers between
|
|---|
| 68 | // stateless and stateful implementations). Specifically, the
|
|---|
| 69 | // MTMessageInContext is not sent by stateless clients (although it may
|
|---|
| 70 | // be received by stateless targets).
|
|---|
| 71 |
|
|---|
| 72 | typedef short MsgType;
|
|---|
| 73 |
|
|---|
| 74 | const MsgType MTEstablishContext = 0;
|
|---|
| 75 | const MsgType MTCompleteEstablishContext = 1;
|
|---|
| 76 | const MsgType MTContextError = 4;
|
|---|
| 77 | const MsgType MTMessageInContext = 5;
|
|---|
| 78 |
|
|---|
| 79 | // The ContextId type is used carry session identifiers. A stateless
|
|---|
| 80 | // application of the service context protocol is indicated by a session
|
|---|
| 81 | // identifier value of 0.
|
|---|
| 82 |
|
|---|
| 83 | typedef unsigned long long ContextId;
|
|---|
| 84 |
|
|---|
| 85 | // The AuthorizationElementType defines the contents and encoding of
|
|---|
| 86 | // the_element field of the AuthorizationElement.
|
|---|
| 87 |
|
|---|
| 88 | // The high order 20-bits of each AuthorizationElementType constant
|
|---|
| 89 | // shall contain the Vendor Minor Codeset ID (VMCID) of the
|
|---|
| 90 | // organization that defined the element type. The low order 12 bits
|
|---|
| 91 | // shall contain the organization-scoped element type identifier. The
|
|---|
| 92 | // high-order 20 bits of all element types defined by the OMG shall
|
|---|
| 93 | // contain the VMCID allocated to the OMG (that is, 0x4F4D0).
|
|---|
| 94 |
|
|---|
| 95 | typedef unsigned long AuthorizationElementType;
|
|---|
| 96 |
|
|---|
| 97 | // An AuthorizationElementType of X509AttributeCertChain indicates that
|
|---|
| 98 | // the_element field of the AuthorizationElement contains an ASN.1 BER
|
|---|
| 99 | // SEQUENCE composed of an (X.509) AttributeCertificate followed by a
|
|---|
| 100 | // SEQUENCE OF (X.509) Certificate. The two-part SEQUENCE is encapsulated
|
|---|
| 101 | // in an octet stream. The chain of identity certificates is provided
|
|---|
| 102 | // to certify the attribute certificate. Each certificate in the chain
|
|---|
| 103 | // shall directly certify the one preceding it. The first certificate
|
|---|
| 104 | // in the chain shall certify the attribute certificate. The ASN.1
|
|---|
| 105 | // representation of (X.509) Certificate is as defined in [IETF RFC 2459].
|
|---|
| 106 | // The ASN.1 representation of (X.509) AtributeCertificate is as defined
|
|---|
| 107 | // in [IETF ID PKIXAC].
|
|---|
| 108 |
|
|---|
| 109 | const AuthorizationElementType X509AttributeCertChain = OMGVMCID | 1;
|
|---|
| 110 |
|
|---|
| 111 | typedef sequence <octet> AuthorizationElementContents;
|
|---|
| 112 |
|
|---|
| 113 | // The AuthorizationElement contains one element of an authorization token.
|
|---|
| 114 | // Each element of an authorization token is logically a PAC.
|
|---|
| 115 |
|
|---|
| 116 | struct AuthorizationElement {
|
|---|
| 117 | AuthorizationElementType the_type;
|
|---|
| 118 | AuthorizationElementContents the_element;
|
|---|
| 119 | };
|
|---|
| 120 |
|
|---|
| 121 | // The AuthorizationToken is made up of a sequence of
|
|---|
| 122 | // AuthorizationElements
|
|---|
| 123 |
|
|---|
| 124 | typedef sequence <AuthorizationElement> AuthorizationToken;
|
|---|
| 125 |
|
|---|
| 126 | typedef unsigned long IdentityTokenType;
|
|---|
| 127 |
|
|---|
| 128 | // Additional standard identity token types shall only be defined by the
|
|---|
| 129 | // OMG. All IdentityTokenType constants shall be a power of 2.
|
|---|
| 130 |
|
|---|
| 131 | const IdentityTokenType ITTAbsent = 0;
|
|---|
| 132 | const IdentityTokenType ITTAnonymous = 1;
|
|---|
| 133 | const IdentityTokenType ITTPrincipalName = 2;
|
|---|
| 134 | const IdentityTokenType ITTX509CertChain = 4;
|
|---|
| 135 | const IdentityTokenType ITTDistinguishedName = 8;
|
|---|
| 136 |
|
|---|
| 137 | typedef sequence <octet> IdentityExtension;
|
|---|
| 138 |
|
|---|
| 139 | union IdentityToken switch ( IdentityTokenType ) {
|
|---|
| 140 | case ITTAbsent: boolean absent;
|
|---|
| 141 | case ITTAnonymous: boolean anonymous;
|
|---|
| 142 | case ITTPrincipalName: GSS_NT_ExportedName principal_name;
|
|---|
| 143 | case ITTX509CertChain: X509CertificateChain certificate_chain;
|
|---|
| 144 | case ITTDistinguishedName: X501DistinguishedName dn;
|
|---|
| 145 | default: IdentityExtension id;
|
|---|
| 146 | };
|
|---|
| 147 |
|
|---|
| 148 | struct EstablishContext {
|
|---|
| 149 | ContextId client_context_id;
|
|---|
| 150 | AuthorizationToken authorization_token;
|
|---|
| 151 | IdentityToken identity_token;
|
|---|
| 152 | GSSToken client_authentication_token;
|
|---|
| 153 | };
|
|---|
| 154 |
|
|---|
| 155 | struct CompleteEstablishContext {
|
|---|
| 156 | ContextId client_context_id;
|
|---|
| 157 | boolean context_stateful;
|
|---|
| 158 | GSSToken final_context_token;
|
|---|
| 159 | };
|
|---|
| 160 |
|
|---|
| 161 | struct ContextError {
|
|---|
| 162 | ContextId client_context_id;
|
|---|
| 163 | long major_status;
|
|---|
| 164 | long minor_status;
|
|---|
| 165 | GSSToken error_token;
|
|---|
| 166 | };
|
|---|
| 167 |
|
|---|
| 168 | // Not sent by stateless clients. If received by a stateless server, a
|
|---|
| 169 | // ContextError message should be returned, indicating the session does
|
|---|
| 170 | // not exist.
|
|---|
| 171 |
|
|---|
| 172 | struct MessageInContext {
|
|---|
| 173 | ContextId client_context_id;
|
|---|
| 174 | boolean discard_context;
|
|---|
| 175 | };
|
|---|
| 176 |
|
|---|
| 177 | union SASContextBody switch ( MsgType ) {
|
|---|
| 178 | case MTEstablishContext: EstablishContext establish_msg;
|
|---|
| 179 | case MTCompleteEstablishContext: CompleteEstablishContext complete_msg;
|
|---|
| 180 | case MTContextError: ContextError error_msg;
|
|---|
| 181 | case MTMessageInContext: MessageInContext in_context_msg;
|
|---|
| 182 | };
|
|---|
| 183 |
|
|---|
| 184 | // The following type represents the string representation of an ASN.1
|
|---|
| 185 | // OBJECT IDENTIFIER (OID). OIDs are represented by the string "oid:"
|
|---|
| 186 | // followed by the integer base 10 representation of the OID separated
|
|---|
| 187 | // by dots. For example, the OID corresponding to the OMG is represented
|
|---|
| 188 | // as: "oid:2.23.130"
|
|---|
| 189 |
|
|---|
| 190 | typedef string StringOID;
|
|---|
| 191 |
|
|---|
| 192 | // The GSS Object Identifier for the KRB5 mechanism is:
|
|---|
| 193 | // { iso(1) member-body(2) United States(840) mit(113554) infosys(1)
|
|---|
| 194 | // gssapi(2) krb5(2) }
|
|---|
| 195 |
|
|---|
| 196 | const StringOID KRB5MechOID = "oid:1.2.840.113554.1.2.2";
|
|---|
| 197 |
|
|---|
| 198 | // The GSS Object Identifier for name objects of the Mechanism-idependent
|
|---|
| 199 | // Exported Name Object type is:
|
|---|
| 200 | // { iso(1) org(3) dod(6) internet(1) security(5) nametypes(6)
|
|---|
| 201 | // gss-api-exported-name(4) }
|
|---|
| 202 |
|
|---|
| 203 | const StringOID GSS_NT_Export_Name_OID = "oid:1.3.6.1.5.6.4";
|
|---|
| 204 |
|
|---|
| 205 | // The GSS Object Identifier for the scoped-username name form is:
|
|---|
| 206 | // { iso-itu-t (2) international-organization (23) omg (130) security (1)
|
|---|
| 207 | // naming (2) scoped-username(1) }
|
|---|
| 208 |
|
|---|
| 209 | const StringOID GSS_NT_Scoped_Username_OID = "oid:2.23.130.1.2.1";
|
|---|
| 210 |
|
|---|
| 211 | }; // CSI
|
|---|
| 212 |
|
|---|
| 213 | #endif
|
|---|