summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SecurityLevel3.idl
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/SecurityLevel3.idl')
-rw-r--r--TAO/orbsvcs/orbsvcs/SecurityLevel3.idl2039
1 files changed, 2039 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/SecurityLevel3.idl b/TAO/orbsvcs/orbsvcs/SecurityLevel3.idl
new file mode 100644
index 00000000000..018e6daf69b
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/SecurityLevel3.idl
@@ -0,0 +1,2039 @@
+//tabstop=4
+//***********************************************************************
+// ORBAsec SL3
+// ----------------------------------------------------------------------
+// Copyright (C) 2001 Adiron, LLC.
+// All rights reserved.
+// ----------------------------------------------------------------------
+// $Id$
+//***********************************************************************
+
+//***********************************************************************
+/**
+ * @note Some interfaces in this IDL module have been altered from the
+ * original Adiron sources.
+ */
+//***********************************************************************
+
+
+#ifndef _SecurityLevel3_
+#define _SecurityLevel3_
+
+#include "tao/Policy.pidl"
+#include "tao/TimeBase.pidl"
+#include "tao/StringSeq.pidl"
+#include "tao/WStringSeq.pidl"
+
+#pragma prefix "adiron.com"
+
+/**
+ * The Security Level 3 module contains the data definitions and
+ * the Application Programmers Interface for dealing with the
+ * ORBAsec SL3 Security, and the new CSIv2 Security Protocol, which has
+ * been adopted by the OMG.
+ * <p>
+ * The SecurityLevel3 interfaces and its security data structures
+ * are based on the Principal Calculus. This is a mathematical
+ * model of representing principals for the use of access control
+ * and auditing.
+ * <p>
+ * The SecurityLevel3 Security Service is represented by two objects
+ * that are returned by the ORB's resolve_initial_reference call.
+ * Those two objects are the SecurityManager and the SecurityCurrent.
+ * Other objects associated with the security service emanate from
+ * these two objects.
+ * <p>
+ * The SecurityLevel3 Security Service has a Credentials model. This
+ * model, which is heavily based on the Principal Calculus, yields
+ * an API for accessing principal information. The credentials
+ * represent a principal's credentials, as well as the establishment
+ * of security contexts between client and servers.
+ * <p>
+ * The SecurityLevel3 Security Service is currently CSIv2 Level 2
+ * compliant:
+ * <ul>
+ * <li>
+ * It works over TLS and plain TCPIP.
+ * <li>
+ * It handles the GSSUP (Username/Password) mechanism for
+ * CSI level Client Authentication.
+ * <li>
+ * It has the ability to "quote" an identity, i.e. CSIv2
+ * Identity Assertion.
+ * <li>
+ * It has the ability to "push" privileges, which it does
+ * ATLAS enabled servers.
+ * <li>
+ * It has the ability to install your own authorization
+ * token process that can allow for delegation.
+ * </ul>
+ * <p>
+ * The Security Level 3 ORB Security Service does supports retention
+ * of CSI state. Client Authentication information and Identity
+ * assertion information is transmitted on each request.
+ * <p>
+ * The Security Level 3 ORB Security Service does not automatically
+ * support endorsement at this time (CSIv2 Level 2 compliance), but
+ * does give you facility to do so.
+ */
+module SecurityLevel3 {
+
+ /**
+ * The Adiron VMCID, which is used in Minor Error Codes,
+ * Policy Tags, etc.
+ */
+ const unsigned long ADIRON_VMCID = 0xA11C000;
+
+ //-------------------------------------------------------------
+ // Security Level 3 Data Representations
+ //
+ //-------------------------------------------------------------
+
+ //
+ // A Principal Name
+ // A principal name always has a type, and a path of
+ // name components. They are ordered from least significant
+ // to most significant. For example, if a principal is represented
+ // by a single X.509 certificate, the first element in the path
+ // is the SubjectDN, and the second is the IssuerDN.
+ //
+ /**
+ * A NameType is used for typing a PrincipalName data structure.
+ * A NameType is a string that represents an ASN.1
+ * OBJECT IDENTIFIER. Its representation usually of the form
+ * "oid:1.2.3.4". Other forms may be possible. It is used
+ * for encoding name type identifiers, which are ASN.1 DER encoded
+ * OBJECT IDENTIFIERs, in the CSI protocol.
+ * @see NameComponent
+ * @see NamePath
+ * @see NameValue
+ * @see PrincipalName
+ */
+ typedef string NameType;
+
+ /**
+ * A NameComponent is an ordered component of a NamePath. The
+ * least significant component is always the first component.
+ * It is the type of a wstring to handle international character
+ * values.
+ * @see NameType
+ * @see NamePath
+ * @see NameValue
+ * @see PrincipalName
+ */
+ typedef wstring NameComponent;
+
+ /**
+ * A NamePath is an ordered collection of NameComponents, ordered
+ * from the least significant to most significant. For example,
+ * an identity that is defined by a certificate that has a
+ * SubjectDN of "C=US,CN=Joe,O=Adiron" and an IssuerDN of
+ * "C=US,CN=AdironCA,O=Adiron" will have the following
+ * name components:
+ * <pre>
+ * NameComponent[0] = "C=US,CN=Joe,O=Adiron"
+ * NameComponent[1] = "C=US,CN=AdironCA,O=Adiron"
+ * </pre>
+ * @see NameType
+ * @see NameComponent
+ * @see NameValue
+ * @see PrincipalName
+ */
+ typedef sequence<NameComponent> NamePath;
+
+ /**
+ * A NameValue is the value component of a PrincipalName,
+ * which is a "type-value" pair. It is defined as a NamePath.
+ * @see NameType
+ * @see NameComponent
+ * @see NamePath
+ * @see PrincipalName
+ */
+ typedef NamePath NameValue;
+
+ /**
+ * A PrincipalName is a "type-value" structure. The type directs
+ * what the encoding and format of the components in the the
+ * value component are. For example, a type of "X509DirectoryPath"
+ * means that the value contains the DNs of the subject and
+ * subsequent issuers.
+ * @see NameType
+ * @see NameComponent
+ * @see NamePath
+ * @see NameValue
+ */
+ struct PrincipalName {
+ NameType the_type;
+ NameValue the_name;
+ };
+
+ /**
+ * A list of PrincipalNames.
+ * @see PrincipalName
+ */
+ typedef sequence<PrincipalName> PrincipalNameList;
+
+
+ //
+ // Attributes for privileges and other things. They are type value pairs.
+ //
+
+ /**
+ * A PrinAttribute is a "type-value" pair, usually attributed to
+ * a Principal by some means, such as values stored in its certificate
+ * or environmental concerns, such as the channel the principal was
+ * authenticated over.
+ * <p>
+ * The type of a PrinAttribute is represented by a string.
+ * <p>
+ * Privilege Attribute Types, that might come from X.509 certificates
+ * might be represented by OIDs. OIDs are represented as:
+ * <pre>
+ * oid:n1.n2.n3.n4.n5.n6....
+ * for an OID where ni are non-negative integers.
+ * </pre>
+ * These OIDs are meant to be used to direct the "type-value" encoding
+ * of a GSS-API ExportName, which uses an OID as a type that directs
+ * the encoding of the value.
+ * <p>
+ * Example Environmental Attribute Types
+ * <p><pre>
+ * SL3:ChannelIdentifier
+ * SL3:LocalAddress
+ * SL3:LocalPort
+ * SL3:TransportMechanism
+ * SL3:TLSCipherSuite
+ * </pre>
+ * @see PrinAttribute
+ */
+ typedef string PrinAttributeType;
+
+ /**
+ * A PrinAttributeValue is a wide character string that encodes
+ * or decodes the value of an attribute. An attempt is always
+ * meant to represent an attribute's value in a human readable
+ * string form. If the value cannot be decoded this way, and its
+ * native form is binary, then it is represented in a Hex encoding
+ * of the binary form.
+ * @see PrinAttribute
+ */
+ typedef wstring PrinAttributeValue;
+
+ /**
+ * A PrinAttribute is a "type-value" pair, usually attributed to
+ * a Principal by some means, such as values stored in its certificate
+ * or environmental concerns, such as the channel the principal was
+ * authenticated over.
+ * @see PrinAttribute
+ */
+ struct PrinAttribute {
+ PrinAttributeType the_type;
+ PrinAttributeValue the_value;
+ };
+
+ /**
+ * A list of PrinAttributes.
+ * @see PrinAttribute
+ */
+ typedef sequence<PrinAttribute> PrinAttributeList;
+
+
+ /**
+ * This is just a sequence of strings that make
+ * up the components of a ResourceName.
+ * @see ResourceName
+ */
+ typedef sequence<string> ResourceNameComponents;
+
+ /**
+ * A ResourceName is the constructed name of a "resource". A
+ * ResourceName is closely modeled after CORBAmed's Resource
+ * Access Decision (RAD) facility's "Resource". It contains
+ * a sequence of strings.
+ */
+ struct ResourceName {
+ ResourceNameComponents components;
+ };
+
+ /**
+ * A List of Resource Names.
+ * @See ResourceName
+ */
+ typedef sequence<ResourceName> ResourceNameList;
+
+
+ //
+ // NameTypes used in SL3
+ //
+
+ /**
+ * An NT_KerberosName is a NameType that signifies that the
+ * value of a PrincipalName is a Kerberos formated name.
+ * A KerberosName is a single string encoded in the
+ * familiar "name@REALM" format.
+ * <p>
+ * From GSS-Kerboeros RFC 1964:
+ * <p>
+ * 2.1.1. Kerberos Principal Name Form
+ * <p>
+ * This name form shall be represented by the Object Identifier {iso(1)
+ * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2)
+ * krb5(2) krb5_name(1)}.
+ */
+ const NameType NT_KerberosName = "oid:1.2.840.113554.1.2.2.1";
+
+ /**
+ * An NT_X509DirectoryNamePath is a NameType that signifies that
+ * the value of a PrincipalName is constructed from a chain
+ * of certificates, such that the end entity is the least
+ * significant position, with the subsequent issuers following
+ * in order of signature.
+ * <p>
+ * The coding of the names is the string encoding of
+ * complete X.500 DN's, such as "C=US, CN=Joe, O=Adiron".
+ * There is no indication whether the last DN in the path is a
+ * "root", i.e. it's issuer is the same.
+ */
+ const NameType NT_X509DirectoryNamePath = "SL3:X509DirectoryPathName";
+
+ /**
+ * The NT_Anonymous is a name type that specifies that the
+ * PrincipalName is representing the "anonymous" principal.
+ * Its value always as a single name component of "anonymous"
+ */
+ const NameType NT_Anonymous = "SL3:anonymous";
+
+ /**
+ * The NT_StringName is a NameType that specifies that the
+ * PrincipalName is represented by a single NameComponent
+ * of name in a "scoped" name space. The name and scope
+ * are separated by a single "@" character. The escape character
+ * is "\". This string name as we call it is the same form
+ * used for the GSSUP (GSS-UserPassword NameType). This
+ * oid is the OID defined by the OMG CSIv2 specification. It
+ * is the value defined by the CSI::GSS_NT_Scoped_Username_OID
+ * constant.
+ */
+ const NameType NT_StringName = "oid:2.23.130.1.2.1";
+
+ //
+ // Privileges
+ //
+
+ /**
+ * A ScopedPrivileges structure represents privileges that
+ * belong to a scope defined by a principal. This structure
+ * is used to represent a principal that is a privilege authority
+ * that issues privileges. Privileges are represented as
+ * PrinAttributes.
+ */
+ struct ScopedPrivileges {
+ PrincipalName privilege_authority;
+ PrinAttributeList privileges;
+ };
+
+ /**
+ * A list of ScopedPrivileges
+ * @see ScopedPrivileges
+ */
+ typedef sequence<ScopedPrivileges> ScopedPrivilegesList;
+
+ //
+ // Principals
+ //
+
+ /**
+ * A Principal comes in three forms, which correspond to the
+ * Principal Calculus. The forms are "Simple", "Quoting", and
+ * "Proxy". Simple is a principal that represents a single
+ * entity, usually "speaking for" itself. A "Quoting" principal
+ * is a "compound" principal that says that one principal is
+ * speaking on behalf of another, usually denoted by "(A|B)", i.e.
+ * "A is quoting B", which means that "A is speaking on behalf of B".
+ * A "Proxy" principal is almost the same as a "Quoting" principal.
+ * However, the security service has determined that enough evidence
+ * exists that proves that Principal A is authorized to speak in
+ * B's behalf. This principal is denoted in the calculus as "(A for B)"
+ * in contrast to the quoting principal "(A|B)".
+ */
+ typedef unsigned long PrincipalType;
+
+ /**
+ * The Simple Principal Type (A)
+ * @see PrincipalType
+ */
+ const PrincipalType PT_Simple = 0; // A, valuetype SimplePrincipal
+ /**
+ * The Quoting Principal Type (A|B)
+ * @see PrincipalType
+ */
+ const PrincipalType PT_Quoting = 1; // B | A, valuetype QuotingPrincipal
+ /**
+ * The Proxy Principal Type (A for B)
+ * @see PrincipalType
+ */
+ const PrincipalType PT_Proxy = 2; // B for A, valuetype ProxyPrincipal
+
+ /**
+ * A Principal is represented by a base value type, which is extended
+ * for the various principals, Simple, Quoting, and Proxy. This base
+ * type of a Principal may be sufficient for access control in
+ * most systems.
+ * @param the_type contains the corresponding identifier
+ * @param the_name contains the logical name of the most derived
+ * Principal. Such as if the Principal is a nested
+ * ProxyPrincipal (i.e. C for B for A) the name here
+ * is A.
+ * @param environmental_attributes
+ * The attributes name certain things that do are
+ * environmental, such as IP addresses.
+ * @param with_privileges
+ * These are the privileges associated with Principal A
+ * restricted_resources.
+ * This attribute contains a collection of resources on which
+ * the principal is authorized to perform actions.
+ */
+ valuetype Principal {
+ /** This field contains the type of the Principal. */
+ public PrincipalType the_type;
+ /** This field contains the name of the Principal */
+ public PrincipalName the_name;
+ /**
+ * This field contains the attributes of the principal
+ * that are considered environmental, such as authentication
+ * mechanism, authentication channel identifier, etc.
+ */
+ public PrinAttributeList environmental_attributes;
+ /**
+ * This field contains the list of scoped privileges the
+ * security service has determined belong to the particular
+ * principal.
+ */
+ public ScopedPrivilegesList with_privileges;
+ };
+
+ /**
+ * A list of Principals.
+ * @see Principal
+ */
+ typedef sequence<Principal> PrincipalList;
+
+ /**
+ * A Simple Principal represents a single entity. It is usually
+ * derived by credentials acquisition, authentication, trust rules concerning quoting,
+ * or trust rules and certificates concerning Proxying.
+ * It has one extra field over the base Principal, which is
+ * "alternate_names".
+ */
+ valuetype SimplePrincipal : /* truncatable */ Principal {
+ /**
+ * This field indicates whether the principal was derived or is
+ * going to be derived from an authentication mechanism.
+ * <p>
+ * If the <code>SimplePrincipal</code> is directly or indirectly
+ * (as part of a composite <code>Principal</code>) in the
+ * <code>ClientCredentials.client_principal<code> or
+ * <code>TargetCredentials.target_principal<code> field,
+ * the <code>authenticated</code> field indicates the authentication
+ * status of the <code>SimplePrincipal</code> in the client or target
+ * principal, respectively.
+ * <p>
+ * If the <code>SimplePricipal</code> is directly or indirectly in
+ * the <code>ClientCredentials.target_principal<code>
+ * (or <code>TargetCredentials.client_principal<code>) field,
+ * the <code>authenticated</code> field indicates the target's
+ * (or client's belief) about its authentication status to the other
+ * party.
+ * <p>
+ * If the <code>SimplePrincipal</code> is directly or indirectly in
+ * the <code>the_principal</code> field of the initiator or acceptor
+ * of <code>OwnCredentials</code>, the <code>authenticated</code>
+ * field indicates the expectation of being authenticated to the other
+ * side of the communication when the initiator or acceptor is used.
+ * <p>
+ * If the <code>SimplePrincipal</code> is directly or indirectly in
+ * the <code>the_principal</code> field of a
+ * <code>PrincipalIdentityStatement</code>,
+ * the <code>authenticated</code> field indicates only the
+ * "best effort" of knowing whether the principal has been possibly
+ * authenticated or not. In other word, if this field is
+ * <code>TRUE</code>, it is for sure that the principal has been
+ * authenticated (or is expecting to be authenticated).
+ * If this field is <code>FALSE</code>, the principal may or may not
+ * have been authenticated. The reason for this ambiguity is that
+ * a <code>PrincipalIdentityStatement</code> may be created before
+ * the authentication of the principal being performed. In general,
+ * the <code>authenticated</code> field of a
+ * <code>SimplePrincipal</code> inside the <code>the_principal</code>
+ * field of a <code>PrincipalIdentityStatement</code> should not be
+ * taken as a definite answer for the authentication status of the
+ * <code>SimplePrincipal</code>.
+ *
+ * @see ClientCredentials.client_authentication
+ * @see ClientCredentials.target_authentication
+ * @see TargetCredentials.client_authentication
+ * @see TargetCredentials.target_authentication
+ */
+ // For example, if a client uses the User/Password mechanism to
+ // communicate with a target, the client's OwnCredentials, created
+ // using a PasswordGenerator, will have the <code>authenticated</code>
+ // field in the principal in the initiator being true,
+ // although the client may not have been authenticated to the target.
+ //
+ public boolean authenticated;
+ /**
+ * This field contains the other name types, such as
+ * that appear in the X.509 alternate name fields.
+ */
+ public PrincipalNameList alternate_names;
+
+ };
+
+ /**
+ * A ProxyPrincipal represents a principal that speaks for another.
+ * The principal is proved that it is authorized to speak for another.
+ * The system believes this, either by trust rules of its own,
+ * or by delivered endorsement from the principal such as
+ * Principal (B for A) where the endorsement takes the form
+ * in the Principal Calculus as (T says B serves A)
+ * where T is some entity trusted by the security service
+ * to make those statements.
+ * <p>
+ * Important: This valuetype extends the Principal value type. The
+ * <code>the_name</code> filed of this object will contain the name of the
+ * <code>speaks_for</code> principal, as that is the name most access control
+ * systems would care about. Therefore, this value type can be
+ * truncated by access control systems that do not want to
+ * examine the principal in detail.
+ */
+ valuetype ProxyPrincipal : /* truncatable */ Principal {
+
+ /**
+ * In a Proxy Principal of (A for B) the <code>speaking</code> field
+ * represents the principal A.
+ */
+ public Principal speaking;
+
+ /**
+ * In a Proxy Principal of (A for B) the <code>speaks_for</code> field
+ * represents the principal B.
+ */
+ public Principal speaks_for;
+
+ };
+
+ /**
+ * A QuotingPrincipal represents a principal that speaks for another.
+ * The principal is not proved that it is authorized to speak for another.
+ * The system derives principals like this based on statements in the
+ * Pricipal Calculus, such as "A says B says r", which results in the
+ * quoting principal (A|B) says r, where "r" is a statement, such as
+ * a CORBA request. The security service derives principals like
+ * this from the CSI Identity Assertion mechanism.
+ * <p>
+ * Important: This valuetype extends the Principal value type. The
+ * <code>the_name</code> filed of this object will contain the name of the
+ * <code>quotes_for</code> principal, as that is the name most access control
+ * systems would care about. Therefore, this value type can be
+ * truncated by access control systems that do not want to
+ * examine the principal in detail.
+ */
+ valuetype QuotingPrincipal : /* truncatable */ Principal {
+
+ /**
+ * In a Quoting Principal of (A|B) the <code>speaking</code> field
+ * represents the principal A.
+ */
+ public Principal speaking;
+
+ /**
+ * In a Quoting Principal of (A|B) the <code>quotes_for</code> field
+ * represents the principal B.
+ */
+ public Principal quotes_for;
+
+ };
+
+ //
+ // Statements
+ //
+
+ /**
+ * A Statement is a value type that has extensions which
+ * represent the different relevant data directed by its StatementType.
+ * There are two basic Statement Types, an IdentityStatement and
+ * an EndorsementStatement. An identity statement is a statement that
+ * asserts an identity. It may represent a the components of
+ * an X.509 certificate during an authentication. An EndorsementStatement
+ * may represent the contents of an X.509 AttributeCertificate or
+ * some other notion of an endorsement, such as a certificate in
+ * BizTalk XML.
+ * <p>
+ * Statements are contained in the Credentials Objects. They
+ * represent pieces of evidence collected from which the security
+ * service deduces the Principal of the Credentials Objects.
+ */
+ typedef unsigned long StatementType;
+
+ /**
+ * The Identity Statement Type.
+ * <p>
+ * A statement of this type at least extends to the
+ * IdentityStatement valuetype, if not truncated
+ * @see IdentityStatement
+ */
+ const StatementType ST_IdentityStatement = 1; //valuetype IdentityStatement
+
+ /**
+ * The Endorsement Statement Type.
+ * <p>
+ * A statement of this type at least extends to the
+ * EndorsementStatement valuetype, if not truncated
+ * @see EndorsementStatement
+ */
+ const StatementType ST_EndorsementStatement = 2; //valuetype EndorsementStatement
+
+ /**
+ * An encoding is a sequence of bytes.
+ */
+ typedef sequence<octet> Encoding;
+
+ /**
+ * Statement encoding type.
+ * <p>
+ * Statements carry their original encoding information, if
+ * they came from an encoding, such as list of X.509 identity
+ * certificates (i.e. a chain). The encoding type may be derivable
+ * from the encoding itself. For example, it's easy to tell the
+ * difference between a PEM encoded certificate, and a DER encoded
+ * certificate. Therefore, the encoding type may default to "Unknown".
+ * Other types may exist than the ones provided as constants in
+ * this module.
+ */
+ typedef string EncodingType;
+
+ /**
+ * The ET_NoEncoding type signifies that the statement
+ * has been generated solely by the security service
+ * and has no encoding.
+ */
+ const EncodingType ET_NoEncoding = "NoEncoding";
+
+ /**
+ * The ET_Unknown encoding type may always be used if the encoding
+ * type can only be figured out from encoding itself.
+ */
+ const EncodingType ET_Unknown = "Unknown";
+
+ /**
+ * User Exception for a bad encoding.
+ */
+ exception BadEncoding {};
+
+ /**
+ * User Exception for a bad or unsupported encoding type.
+ */
+ exception BadEncodingType {};
+
+ /**
+ * The Statement Layer is the layer of the protocol or security
+ * service from which the statement emanated, derived, or was collected.
+ */
+ typedef unsigned long StatementLayer;
+
+ /**
+ * Default type for a Statement Layer
+ */
+ const StatementLayer SL_Unknown = 0;
+ /**
+ * The SL_Transport statement type signifies that the associated
+ * statement is derived from the transport layer, such as
+ * an X.509 Certificate from a TLS handshake.
+ */
+ const StatementLayer SL_Transport = 1;
+ /**
+ * The SL_CSIAuthorization statement type signifies that the associated
+ * statement is derived from the CSI Authorization Layer in the CSIv2
+ * protocol.
+ */
+ const StatementLayer SL_CSIAuthorization = 2;
+ /**
+ * The SL_CSIClientAuth statement type signifies that the associated
+ * statement is derived from the CSI Client Authentication Layer
+ * in the CSIv2 protocol.
+ */
+ const StatementLayer SL_CSIClientAuth = 3;
+ /**
+ * The SL_CSIIdentity statement type signifies that the associated
+ * statement is derived from the CSI Identity Assertion Layer
+ * in the CSIv2 protocol.
+ */
+ const StatementLayer SL_CSIIdentity = 4;
+
+ /**
+ * The SL_UserDefined statement layer signifies that the associate
+ * statement is derived or created by a user or some other
+ * entity than the security service.
+ */
+ const StatementLayer SL_UserDefined = 5;
+
+ /**
+ * The Statement base type contains the information common
+ * to all statements. A statement has an "external" encoding, such
+ * as an X509 Certificate. Some statements may not have an encoding,
+ * but its extension may carry the pertinent marshable information,
+ * such as a PrincipalIdentityStatement for anonymous, which is
+ * generated by the security service.
+ */
+ valuetype Statement {
+ /**
+ * This field contains an identifier of the
+ * service layer that generated the statement.
+ * The layer that generated or delivered
+ * the statement, i.e. Transport, CSIv2 Authentication,
+ * CSIv2 Authorization, or CSIv2 Identity Assertion.
+ */
+ public StatementLayer the_layer;
+ /**
+ * The type of statement, which indicates its extension
+ * such as an Identity Statement or an Endorsement
+ * Statement.
+ */
+ public StatementType the_type;
+ /**
+ * This field indicates the type of encoding.
+ * The encoding may be contrived, at the encoding
+ * may not exist, however, the extension of the
+ * statement type may contain data that can
+ * be marshaled across the wire. See the Principal
+ * Identity Statement.
+ */
+ private EncodingType encoding_type;
+ /**
+ * The bytes of the encoding, if it exists.
+ */
+ private Encoding the_encoding;
+
+ /**
+ * Returns the encoding type
+ */
+ EncodingType get_encoding_type();
+
+ /**
+ * Returns an encoding of this statement. Some implementations
+ * may be able to convert. Using and encoding_type of
+ * ET_Unknown, will always yield the default encoding,
+ * if it exists. If the encoding does not exist,
+ * a successful return containing an empty
+ * sequence will result.
+ */
+ Encoding get_encoding(
+ in EncodingType encoding_type
+ ) raises (
+ BadEncodingType
+ );
+
+ /**
+ * This factory method allows users to create their
+ * own Statements from an encoding. The statements created
+ * by this factory method may have a type which is a further
+ * extension of the valuetype Statement.
+ */
+ factory create(
+ in EncodingType encoding_type,
+ in Encoding the_encoding
+ );
+ };
+ typedef sequence<Statement> StatementList;
+
+ /**
+ * The Identity Statement further classifies the encoding
+ * as a statement that if verified asserts an identity.
+ */
+ valuetype IdentityStatement : Statement {
+ /**
+ * This field contains a possibly well known identifier that
+ * may aid in the interpretation of the identity statement's
+ * encoding. It may be an empty string, which signifies that
+ * there is no known interpretation aid for the encoding, or
+ * that there is no encoding.
+ */
+ public string interpretation_aid;
+ };
+
+ /**
+ * The Principal Identity Statement is the minimal version of an
+ * Identity statement that asserts a single identity that the
+ * security service can translate into a principal.
+ * <p>
+ * An example of an identity statement is an X.509 certificate in
+ * which its attributes are exposed into the principal, such as
+ * privileges. This valuetype may also be further extended by the
+ * security service depending on its encoding and the capabilities
+ * of the security service.
+ */
+ valuetype PrincipalIdentityStatement : IdentityStatement {
+ public Principal the_principal;
+ };
+
+ /**
+ * The Endorsement Statement is a statement that is used for
+ * authorization. An Endorsement statement endorses a
+ * principal with certain characteristics, such as privileges
+ * or the authority to act on behalf of another principal, sometimes
+ * called "delegation".
+ * <p>
+ * According to our research, an endorsement statement may be a
+ * complex entity containing matching rules for the endorsement.
+ * An endorsement may have the following general form:
+ * <pre>
+ * I says Principal A matching [(P1 with [p1,...,pn]) or ....]
+ * speaks_for
+ * Principal B matching [(T1 with [t1,...,tn]) or ... ]
+ * has [s1,...,sm]
+ * on Resources matching [R1, .... Rn]
+ * </pre>
+ * Actual semantic reduction of principals is directed by the
+ * the matching rules, and may depend on other statements as well,
+ * such as local trust rules in the security service configuration.
+ * Also, much of the capability of an endorsement statement is
+ * dependent on its encoding.
+ * <p>
+ * This approach to authorization is a largely unexplored research
+ * topic. There are not many or well known encodings of endorsement
+ * statements. Therefore, we are reluctant to produce interfaces
+ * just yet, that go beyond the encoding. However, we do expose the
+ * Endorsement statement type, which may further direct the interpretation
+ * of it's encoding.
+ */
+ valuetype EndorsementStatement : Statement {
+ /**
+ * This field contains a possibly well known identifier that
+ * may aid in the interpretation of the identity statement's
+ * encoding. It may be an empty string, which signifies that
+ * there is no known interpretation aid for the encoding, or
+ * that there is no encoding.
+ */
+ public string interpretation_aid;
+ };
+
+ /**
+ * An X509IdentityStatement is one that extends the Principal Identity
+ * Statement. If one does get an X509 IdentityStatement, it is
+ * currently supported with IAIK in both DER and PEM formats.
+ */
+ valuetype X509IdentityStatement : PrincipalIdentityStatement {
+ /**
+ * This factory method allows users to create their
+ * own X509Identity statements from an encoding.
+ */
+ factory create(
+ in EncodingType encoding_type,
+ in Encoding the_encoding
+ );
+ };
+ typedef sequence<X509IdentityStatement> X509IdentityStatementList;
+
+ //-------------------------------------------------------------
+ // Security Level 3 Application Users Interface
+ //
+ //-------------------------------------------------------------
+
+ //
+ // The Security Level 3 Credentials Model
+ //
+
+ /**
+ * Credentials come in three types. OwnCredentials, ClientCredentials,
+ * and TargetCredentials. OwnCredentials represent the ORB instance's
+ * credentials. Each Credentials has initiating and accepting capability.
+ * ClientCredentials represent an established security context with
+ * a client. TargetCredentials represent an established security context
+ * with a Target's Server.
+ */
+ typedef unsigned long CredentialsType;
+
+ /**
+ * The CT_OwnCredentials CredentialsType signifies that the
+ * Credentials can be extended to the OwnCredentials Type.
+ */
+ const CredentialsType CT_OwnCredentials = 0;
+ /**
+ * The CT_ClientCredentials CredentialsType signifies that the
+ * Credentials can be extended to the ClientCredentials Type.
+ */
+ const CredentialsType CT_ClientCredentials = 1;
+ /**
+ * The CT_TargetCredentials CredentialsType signifies that the
+ * Credentials can be extended to the ClientCredentials Type.
+ */
+ const CredentialsType CT_TargetCredentials = 2;
+
+ /**
+ * A Credentials object has a validity state. Some credentials
+ * may be time or use dependent.
+ */
+ typedef long CredentialsState;
+
+ /**
+ * The Credentials with a CredentialsState of CS_Invalid cannot be
+ * used in any the initiating or accepting establishment of any
+ * security contexts.
+ */
+ const CredentialsState CS_Invalid = -3;
+
+ /**
+ * Credentials with a CredentialsState of CS_Expired can no longer
+ * be used for initiating or accepting establishment of any
+ * security contexts.
+ */
+ const CredentialsState CS_Expired = -2;
+ /**
+ * Credentials with a CredentialsState of CS_PendingRelease can no longer
+ * be used for initiating or accepting establishment of any
+ * security contexts. It means that "release_credentials" has been
+ * called on the credentials.
+ */
+ const CredentialsState CS_PendingRelease = -1;
+ /**
+ * Credentials with a CredentialsState of CS_Initialized cannot
+ * be used for initiating or accepting establishment of any
+ * security contexts. It means that credentials are in an initial
+ * state. This value is for internal use, and there is no
+ * reason a SecurityLevel3 user should see credentials in this state.
+ */
+ const CredentialsState CS_Initialized = 0;
+ /**
+ * Credentials with a CredentialsState of CS_Valid can
+ * be used for initiating or accepting establishment of
+ * security contexts.
+ */
+ const CredentialsState CS_Valid = 1;
+
+ /**
+ * Credentials have system generated identifiers
+ * to which they can be referred and retrieved.
+ */
+ typedef string CredentialsId;
+ typedef sequence<CredentialsId> CredentialsIdList;
+
+ /**
+ * A Context Id is a system generated unique identifier for identifying
+ * a security context to the application.
+ * Security Contexts may be long lived and not established on
+ * every request. Therefore, an identifier is assigned.
+ * <p>
+ * Note that this Context Id is not directly related to the context
+ * defined in the CSIv2 specification.
+ */
+ typedef string ContextId;
+
+ /**
+ * Credentials Usage
+ * <p>
+ * Credentials Usage refers to the concept that Credentials may
+ * be used to initiate security context, accept security contexts,
+ * or do both. its values are used in the acquisition
+ * of credentials for the purpose of designating the abilities
+ * of the credentials acquired.
+ */
+ typedef unsigned long CredentialsUsage;
+ /**
+ * The CU_Indefinite CredentialsUsage type is a value that
+ * signifies the default. Depending on some other acquisition
+ * arguments, the credentials usage may be able to be implicitly
+ * determined.
+ */
+ const CredentialsUsage CU_Indefinite = 1;
+ /**
+ * The CU_None CredentialsUsage type is a value that states the
+ * credentials cannot be used to make or accept security
+ * contexts. ClientCredentials and TargetCredentials have
+ * this credentials usage.
+ */
+ const CredentialsUsage CU_None = 2;
+ /**
+ * The CU_AcceptOnly CredentialsUsage type is a value that signifies
+ * that the credentials can only be used to accept the establishment
+ * of security contexts.
+ */
+ const CredentialsUsage CU_AcceptOnly = 3;
+ /**
+ * The CU_InitiateOnly CredentialsUsage type is a value that signifies
+ * that the credentials can only be used to initiate the establishment
+ * of security contexts.
+ */
+ const CredentialsUsage CU_InitiateOnly = 4;
+ /**
+ * The CU_InitiateAndAccept CredentialsUsage type is a value that
+ * signifies that the credentials can be used to both initiate
+ * and accept the establishment of security contexts.
+ */
+ const CredentialsUsage CU_InitiateAndAccept = 5;
+
+ /**
+ * A CredsDirective is a directive on a invocation as to the
+ * effects of the initiated security context will have on the
+ * the accepting side. Please see ContextEstablishmentPolicy
+ * for is use in context with establishing security contexts.
+ * @see ContextEstablishmentPolicy
+ */
+ typedef unsigned long CredsDirective;
+ /**
+ * The CD_Default CredsDirective is a value that signifies to
+ * use the capabilities of the selected credentials.
+ */
+ const CredsDirective CD_Default = 0;
+ /**
+ * The CD_InvokeTarget CredsDirective is a value that signifies that
+ * the selected credentials should only be used in a simple
+ * invocation fashion. They shall not attempt to endorse or embody
+ * the target to act on its behalf.
+ */
+ const CredsDirective CD_InvokeTarget = 1;
+ /**
+ * The CD_EndorseTarget CredsDirective is a value that signifies that
+ * the selected credentials, if capable, should attempt to endorse
+ * the target. In other words, it gives the accepting side the ability
+ * to act on behalf of the initiating side.
+ */
+ const CredsDirective CD_EndorseTarget = 2;
+ /**
+ * The CD_EmbodyTarget CredsDirective is a value that signifies that
+ * the selected credentials, if capable, should attempt to embody
+ * the target. In other words, it gives the accepting side the ability
+ * to impersonate the initiating side.
+ */
+ const CredsDirective CD_EmbodyTarget = 3;
+
+ /**
+ * A Feature Directive is a general directive used in policy that
+ * stipulates the of a particular feature. Such examples include,
+ * confidentiality, integrity, client authentication, etc.
+ */
+ typedef long FeatureDirective;
+
+ /**
+ * The FD_DoNotUse FeatureDirective means definitely not to use
+ * the feature.
+ */
+ const FeatureDirective FD_DoNotUse = -2;
+ /**
+ * The FD_DoNotUseIfPossible FeatureDirective means not to use
+ * the feature if it is possible. Note, some mechanisms may always
+ * use confidentiality.
+ */
+ const FeatureDirective FD_DoNotUseIfPossible = -1;
+ /**
+ * The FD_UseDefault FeatureDirective means to use or not to use
+ * the feature depending on defaults.
+ */
+ const FeatureDirective FD_UseDefault = 0;
+ /**
+ * The FD_UseIfPossible FeatureDirective means to use the feature
+ * if it is possible.
+ */
+ const FeatureDirective FD_UseIfPossible = 1;
+ /**
+ * The FD_Use FeatureDirective means definitely to use the feature.
+ */
+ const FeatureDirective FD_Use = 2;
+
+
+ /**
+ * The Initiator Type of the Initiator Side of the Credentials states
+ * the kind of Initiator it is. There are three types that mirror
+ * the type of Principal, Simple, Quoting, and Proxy, that the
+ * initiator intends to represent to a server while trying to
+ * establish a security context with the server.
+ */
+ typedef unsigned long InitiatorType;
+ /**
+ * The IT_None InitiatorType is a value that is defined for
+ * completeness, and has no real use.
+ */
+ const InitiatorType IT_None = 0;
+ /**
+ * The IT_Simple InitiatorType is a value that states that the
+ * initiator is a "Simple" Principal.
+ */
+ const InitiatorType IT_Simple = 1;
+ /**
+ * The IT_Quoting InitiatorType is a value that states that the
+ * initiator will quote another principal to the server. This
+ * principal is denoted in the Principal Calculus as (A|B), i.e.
+ * A quoting B.
+ */
+ const InitiatorType IT_Quoting = 2;
+ /**
+ * The IT_Proxy InitiatorType is a value that states that the
+ * initiator will quote another principal to the server along with
+ * getting or providing proof to the server that it can act on
+ * behalf of the quoted principals. This
+ * principal is denoted in the Principal Calculus as (A for B).
+ */
+ const InitiatorType IT_Proxy = 3;
+
+ /**
+ * The CredsInitiator object is an object that is directly a
+ * member of a particular OwnCredentials object. It represents
+ * the "initiator" side of the credentials.
+ */
+ local interface CredsInitiator {
+
+ /**
+ * The principal attribute contains a local view of the
+ * Principal that the Credentials intend to represent.
+ * Note that during context establishment, the actual establish
+ * client principal may be represented differently, especially
+ * with respect to environmental attributes. Some environmental
+ * attributes are a direct result of context establishment.
+ */
+ readonly attribute Principal the_principal;
+ /**
+ * The supporting statements attribute contains a list of statements
+ * supporting the principal associated with this initiator.
+ */
+ readonly attribute StatementList supporting_statements;
+ /**
+ * The restricted_resources attribute contains a list of
+ * resource names, by which the credentials initiator
+ * believes his authorizations apply.
+ */
+ readonly attribute ResourceNameList restricted_resources;
+ /**
+ * The initiator_type attribute signifies the intent of the
+ * initiator as to the principal it presents for the
+ * security context establishment. It should correspond
+ * to the type of the Principal. However, it might be slightly
+ * different, because using CSIv2 Client Authentication
+ * technically creates a "QuotingPrincipal" however, the
+ * initiator type will still be simple as no CSIv2 Identity
+ * Assertion will be used in establishing the security
+ * context.
+ */
+ readonly attribute InitiatorType initiator_type;
+ /**
+ * The supports_embodiment attribute is <code>TRUE</code> if these credentials
+ * can be directed by use of the CredsDirective, to give the
+ * the accepting end of a context establishment the ability
+ * to impersonate this initiator principal.
+ */
+ readonly attribute boolean supports_embodiment;
+ /**
+ * The supports_endorsement attribute is <code>TRUE</code> if these credentials
+ * can be directed by use of the CredsDirective, to endorse
+ * the accepting end of a context establishment to act
+ * on behalf of this initiator principal.
+ */
+ readonly attribute boolean supports_endorsement;
+ /**
+ * The supports_quoting attribute is <code>TRUE</code> if these credentials
+ * can be directed by use of the CredsDirective, to simply
+ * quote another principal on top of these credentials.
+ */
+ readonly attribute boolean supports_quoting;
+ /**
+ * The expiry_time attribute denotes the time that these
+ * credentials expire.
+ */
+ readonly attribute TimeBase::UtcT expiry_time;
+ };
+
+ /**
+ * The CredsAcceptor object is an object that is directly a
+ * member of a particular OwnCredentials object. It represents
+ * the "acceptor" side of the credentials.
+ */
+ local interface CredsAcceptor {
+
+ /**
+ * The principal attribute contains a local view of the
+ * Principal that the Credentials intend to represent.
+ * Note that during context establishment, the actual establish
+ * target principal may be represented differently, especially
+ * with respect to environmental attributes. Some environmental
+ * attributes are a direct result of context establishment.
+ */
+ readonly attribute SecurityLevel3::Principal the_principal;
+ /**
+ * The supporting_statements attribute contains a list of statements
+ * supporting the principal associated with this acceptor.
+ */
+ readonly attribute SecurityLevel3::StatementList supporting_statements;
+ /**
+ * The restricted_resources attribute contains a list of
+ * resource names, by which the credentials initiator
+ * believes his authorizations apply.
+ */
+ readonly attribute ResourceNameList restricted_resources;
+ /**
+ * The accepts_endorsement attribute is <code>TRUE</code> if these credentials
+ * supports and accepts CSIv2 endorsement information.
+ */
+ readonly attribute boolean accepts_endorsement;
+ /**
+ * The accepts_quoting attribute is <code>TRUE</code> if these credentials
+ * supports and accepts CSIv2 Identity Assertion information.
+ */
+ readonly attribute boolean accepts_quoting;
+ /**
+ * The expiry_time attribute denotes the time that these
+ * credentials expire.
+ */
+ readonly attribute TimeBase::UtcT expiry_time;
+
+ };
+
+ /**
+ * This type is used to identify listeners for removal.
+ * A Listener identity will be assigned to a listener when
+ * it is assigned to a particular object.
+ */
+ typedef string ListenerId;
+
+ /**
+ * This local interface is used to notify the user when the credentials
+ * have been relinquished. When credentials are "released" they may
+ * stay around until their work is finished. At that point they
+ * will be relinquished. Also, if the underlying transport credentials
+ * are released, then the SecurityLevel3 Credentials get released
+ * as well. This listener will get informed of this event.
+ */
+ local interface RelinquishedCredentialsListener {
+ void relinquished_notify(
+ in CredentialsId creds_id
+ );
+ };
+
+ /**
+ * The Credentials base interface contains the common items for
+ * the different types of credentials.
+ * @see OwnCredentials
+ * @see ClientCredentials
+ * @see TargetCredentials
+ */
+ local interface Credentials {
+
+ /**
+ * The creds_id attribute contains a system generated
+ * identifier with which can uniquely reference the credentials
+ * object.
+ */
+ readonly attribute CredentialsId creds_id;
+
+ /**
+ * The creds_type stipulates the type of credentials, i.e.
+ * to which type of credentials it may be narrowed, e.g.,
+ * Own, Client, or Target.
+ */
+ readonly attribute CredentialsType creds_type;
+
+ /**
+ * The creds_usage attribute stipulates the intended usage of the
+ * credentials. For OwnCredentials, it will be one of
+ * CU_AcceptOnly, CU_Initiate, CU_InitiateAndAccept.
+ * For ClientCredentials and TargetCredentials it will be
+ * CU_None.
+ */
+ readonly attribute CredentialsUsage creds_usage;
+
+ /**
+ * The expiry_time attribute denotes the time that these
+ * credentials expire.
+ */
+ readonly attribute TimeBase::UtcT expiry_time;
+
+ /**
+ * The creds_state attribute contains the
+ * validity state of the credentials.
+ */
+ readonly attribute CredentialsState creds_state;
+
+ /**
+ * Add a listener that will get notified when the
+ * OwnCredentials are finally done with any pending
+ * work and are relinquished by the security service.
+ */
+ ListenerId add_relinquished_listener(
+ in RelinquishedCredentialsListener listener
+ );
+
+ /**
+ * Removes a listener. This function raises a BAD_PARAM
+ * exception if the listener is not registered.
+ */
+ void remove_relinquished_listener(
+ in ListenerId id
+ );
+ };
+ /**
+ * A list of credentials.
+ */
+ typedef sequence<Credentials> CredentialsList;
+
+ /**
+ * OwnCredentials are created as a result of Credentials acquisition
+ * from the CredentialsCurator's CredentialsAcquirers.
+ * The Credentials have an initiator and an acceptor based
+ * upon its intended usage and capability. Some OwnCredentials
+ * that were acquired solely for initiating contexts (i.e. client side)
+ * will not have an acceptor, and visa versa.
+ */
+ local interface OwnCredentials : Credentials {
+
+ /**
+ * The creds_initiator attribute contains a reference to the
+ * local credentials initiator associated with these credentials.
+ * It is null if the creds_usage is AcceptOnly.
+ */
+ readonly attribute CredsInitiator creds_initiator;
+
+ /**
+ * The creds_acceptor attribute contains a reference to the
+ * local credentials acceptor associated with these credentials.
+ * It is null if the creds_usage is InitiateOnly.
+ */
+ readonly attribute CredsAcceptor creds_acceptor;
+
+ /**
+ * The release_credentials operation disables the credentials
+ * from further initiating and/or accepting contexts.
+ * Formal destruction of the Credentials object is delayed until
+ * its pending work is done, at which time it becomes Invalid.
+ */
+ void release_credentials ();
+ };
+
+ /**
+ * A list of OwnCredentials
+ */
+ typedef sequence<OwnCredentials> OwnCredentialsList;
+
+ /**
+ * An object of this interface represents the security context for
+ * a CSIv2 based remote client. It is created as the result of accepting
+ * a security context for the remote client.
+ * This object is only available during the servicing of a CORBA request.
+ * It can be retrieved from the
+ * <code>SecurityLevel3::SecurityCurrent</code> object,
+ * as it is thread based.
+ * <p>
+ * This object contains only the information used from the
+ * <code>OwnCredentials</code> that was pertinent in establishing the
+ * context. There is a pointer back to that <code>OwnCredentials</code>
+ * object. Once this context is created, its attributes are guaranteed
+ * not to change.
+ */
+ local interface ClientCredentials : Credentials {
+
+ /**
+ * The context_id attribute contains a system generated unique identifier
+ * for the context,
+ */
+ readonly attribute ContextId context_id;
+
+ /**
+ * The client_principal attribute contains the principal that
+ * the security service can deduce is the client from the
+ * information and mechanisms used.
+ */
+ readonly attribute Principal client_principal;
+
+ /**
+ * The client_supporting_statements attribute contains the statements that
+ * delivered from CSIv2 protocol along with any from the associated
+ * OwnCredentials that are used to deduce the client principal.
+ */
+ readonly attribute StatementList client_supporting_statements;
+
+ /**
+ * The client_restricted_resources attribute contains the names of the
+ * resources that the security service deduces from the CSIv2
+ * information and information from the associated OwnCredentials.
+ */
+ readonly attribute ResourceNameList client_restricted_resources;
+
+ /**
+ * The target_principal attribute contains the exact principal that
+ * the security service believes is representative of the
+ * clients version of the target's principal.
+ */
+ readonly attribute Principal target_principal;
+
+ /**
+ * The target_supporting_statements attribute contains the statements that
+ * support the deduction of the target principal.
+ */
+ readonly attribute StatementList target_supporting_statements;
+
+ /**
+ * The target_restricted_resources attribute contains names of resources
+ * on which the target is restricted. This information may come
+ * from the OwnCredentials.
+ */
+ readonly attribute ResourceNameList target_restricted_resources;
+
+ /**
+ * This attribute refers to the OwnCredentials that were used in
+ * establishing the security context.
+ */
+ readonly attribute OwnCredentials parent_credentials;
+
+ /**
+ * This attribute is <code>TRUE</code> if the target has
+ * authenticated the client, either over the transport, or at
+ * the CSIv2 Client Authentication layer.
+ */
+ readonly attribute boolean client_authentication;
+
+ /**
+ * This attribute is <code>TRUE</code> if the target believes that
+ * the client has authenticated the target over the transport.
+ */
+ readonly attribute boolean target_authentication;
+
+ /**
+ * This attribute is <code>TRUE</code> if the context is providing
+ * confidentiality protection.
+ */
+ readonly attribute boolean confidentiality;
+
+ /**
+ * This attribute is <code>TRUE</code> if the context is providing
+ * integrity protection.
+ */
+ readonly attribute boolean integrity;
+ };
+
+ /**
+ * The TargetCredentials object is created as the result of accepting a
+ * security context for a target. It represents that context.
+ * It contains only the information used from the OwnCredentials
+ * that was pertinent in establishing the context.
+ * There is a pointer back to that OwnCredentials object.
+ * Once this context is created, its attributes are guaranteed
+ * not to change.
+ */
+ local interface TargetCredentials : Credentials {
+
+ /**
+ * The context_id attribute contains a system generated
+ * unique identifier for the context.
+ */
+ readonly attribute ContextId context_id;
+
+ /**
+ * The client_principal attribute contains the principal that
+ * the security service believe is the target's
+ * ClientCredentials client_principal attribute.
+ */
+ readonly attribute Principal client_principal;
+
+ /**
+ * The client_supporting_statements attribute contains the
+ * statements that support the deduction of the client principal.
+ */
+ readonly attribute StatementList client_supporting_statements;
+
+ /**
+ * The client_restricted_resources attribute contains names of
+ * resources on which the client believes the client is restricted.
+ * This information may be derived from newly acquired endorsement
+ * information.
+ */
+ readonly attribute ResourceNameList client_restricted_resources;
+
+ /**
+ * The target_principal attribute contains the exact principal that
+ * the security service deduces to be the target.
+ */
+ readonly attribute Principal target_principal;
+
+ /**
+ * The target_supporting_statements attribute contains the statements
+ * that support the deduction of the target principal.
+ */
+ readonly attribute StatementList target_supporting_statements;
+
+ /**
+ * The target_restricted_resources attribute contains names of
+ * resources on which the target is restricted. This information
+ * may not be available.
+ */
+ readonly attribute ResourceNameList target_restricted_resources;
+
+ /**
+ * The parent_credentials attribute refers to the OwnCredentials
+ * that were used in establishing the security context.
+ */
+ readonly attribute OwnCredentials parent_credentials;
+
+ /**
+ * The client_authentication attribute is <code>TRUE</code> if the client
+ * believes that the target has authenticated the client, either
+ * over the transport, or at the CSIv2 Client Authentication layer.
+ */
+ readonly attribute boolean client_authentication;
+
+ /**
+ * The target_authentication attribute is <code>TRUE</code> if the client has
+ * authenticated the target over the transport.
+ */
+ readonly attribute boolean target_authentication;
+
+ /**
+ * The confidentiality attribute is <code>TRUE</code> if the context is
+ * providing confidentiality protection.
+ */
+ readonly attribute boolean confidentiality;
+
+ /**
+ * The integrity attribute is <code>TRUE</code> if the context is providing
+ * integrity protection.
+ */
+ readonly attribute boolean integrity;
+
+ /**
+ * The target_embodied attribute is <code>TRUE</code> if the security service
+ * believes that the target is embodied to impersonate the client
+ * side principal.
+ */
+ readonly attribute boolean target_embodied;
+
+ /**
+ * The target_endorsed attribute is <code>TRUE</code> if the security service
+ * believes that the target is endorsed to act on behalf of the
+ * client side principal.
+ */
+ readonly attribute boolean target_endorsed;
+
+ /**
+ * The release operation indicates to the CSIv2 protocol, that if
+ * state is being retained for these credentials, they
+ * will be discarded with the pending next request that
+ * may have not yet gone out.
+ * <p>
+ * Any objects references that are binded to these
+ * credentials after you release them will become unusable.
+ *
+ * This operation is experimental.
+ */
+ void release();
+ };
+
+
+ //--------------------------------------------------------------------
+ // Security Invocation Policy
+ //
+ //--------------------------------------------------------------------
+
+ /**
+ * The ContextEstablishmentPolicy policy object directs the
+ * establishment of security contexts with a target.
+ * <p>
+ * The CredsDirective usage is the following:
+ * <dl>
+ * <dt>
+ * CD_Default
+ * <dd>
+ * This directive means to use the default set
+ * up by the thread, the ORB, the ORB configuration,
+ * available credentials, or other policies.
+ * <dt>
+ * CD_InvokeTarget
+ * <dd>
+ * This directive means to use the
+ * the specified OwnCredentials to create a
+ * secure association with the target
+ * before invocation. Do not endorse or embody the target.
+ * Credentials may be IT_Simple, IT_Quoting, or IT_Proxy.
+ * <dt>
+ * CD_EndorseTarget
+ * <dd>
+ * This directive means to use the
+ * the specified OwnCredentials to create a
+ * secure association with the target
+ * before invocation.
+ * The credentials must be
+ * IT_Simple, IT_Quoting, or IT_Proxy own credentials
+ * that supports endorsement.
+ * Note, a Initiator Credentials that is a IT_Proxy
+ * may have an endorsement statement that not only
+ * endorses this immediate client, but may very well
+ * apply to the next target.
+ * <dt>
+ * CD_EmbodyTarget
+ * <dd>
+ * If possible give the target the ability to
+ * impersonate the client, is performed using
+ * transports that can forward their credentials
+ * in the transport that give the ability to the
+ * target to work in their own behalf. Alternatively,
+ * the authenticator may be able to be passed on.
+ * IT_Simple credentials must have or have the
+ * ability to forward credentials. This is analogous
+ * to flipping the DELEGATE bit on GSS-Kerberos Forwardable
+ * credentials. IT_Quoting principals means
+ * that you can forward the transport credentials,
+ * authenticator plus the Quoting statement.
+ * IT_Proxy principals means that you can forward
+ * the transport credentials, authenticator,
+ * and associated proxy statements.
+ * </dl>
+ * <p>
+ * On using Own Credentials. The creds_ids name Own Credentials.
+ * Also, they restrict the invocation to use only certain credentials.
+ * If the cred_ids list is empty, then the own credentials for the
+ * invocation are selected from a default, which may be
+ * set on the thread or the ORB instance.
+ */
+ local interface ContextEstablishmentPolicy : CORBA::Policy {
+
+ readonly attribute CredsDirective creds_directive;
+ readonly attribute OwnCredentialsList creds_list;
+ readonly attribute FeatureDirective use_client_auth;
+ readonly attribute FeatureDirective use_target_auth;
+ readonly attribute FeatureDirective use_confidentiality;
+ readonly attribute FeatureDirective use_integrity;
+ };
+
+ /**
+ * Type to be passed to ContextEstablishmentPolicy PolicyFactory
+ * through an Any.
+ */
+ struct ContextEstablishmentPolicyArgument
+ {
+ CredsDirective creds_directive;
+ OwnCredentialsList creds_list;
+ FeatureDirective use_client_auth;
+ FeatureDirective use_target_auth;
+ FeatureDirective use_confidentiality;
+ FeatureDirective use_integrity;
+ };
+
+ /**
+ * The ContextEstablishmentPolicyType constant is
+ * holds value used to denote the ContextEstablishmentPolicy.
+ */
+ const CORBA::PolicyType ContextEstablishmentPolicyType = ADIRON_VMCID | 1001;
+
+
+ /**
+ * The ObjectCredentialsPolicy object is placed on the policy list
+ * of a POA to indicate the own credentials
+ * that govern the accepting contexts for objects underneath
+ * that POA. The credentials listed here, only if they have Accepting
+ * capability, are used to created security components in the
+ * IOR of the object's reference when created.
+ */
+ local interface ObjectCredentialsPolicy : CORBA::Policy {
+ readonly attribute OwnCredentialsList creds_list;
+ };
+
+ /**
+ * Type to be passed to ObjectCredentialsPolicy PolicyFactory
+ * through an Any.
+ */
+ typedef OwnCredentialsList ObjectCredentialsPolicyArgument;
+
+ /**
+ * The ObjectCredentialsPolicyType constant is
+ * holds value used to denote the ObjectCredentialsPolicy.
+ */
+ const CORBA::PolicyType ObjectCredentialsPolicyType = ADIRON_VMCID | 1002;
+
+
+ //--------------------------------------------------------------------
+ // Security Level 3 Credentials Acquisition Mechanism
+ //
+ //--------------------------------------------------------------------
+
+ /**
+ * Credentials are acquired by a Credentials Acquirer by some
+ * acquisition mechanism specified in the Credentials Curator.
+ * Acquisition methods are available on the curator. The
+ * specifics of arguments needed and the acquisition process
+ * are defined by the method itself.
+ */
+ typedef string AcquisitionMethod;
+ typedef sequence<AcquisitionMethod> AcquisitionMethodList;
+
+ /**
+ * An acquisition of credentials may quite possibly fail as well
+ * as be a multistep process. A status defines the current
+ * state of an acquisition.
+ */
+ typedef long AcquisitionStatus;
+ /** Acquisition has failed. */
+ const AcquisitionStatus AQST_Failed = -2;
+ /** Acquisition has expired. */
+ const AcquisitionStatus AQST_Expired = -1;
+ /** Acquisition is initialized. */
+ const AcquisitionStatus AQST_Initialized = 0;
+ /** Acquisition needs more processing. */
+ const AcquisitionStatus AQST_Continued = 1;
+ /** Acquisition has succeeded. */
+ const AcquisitionStatus AQST_Succeeded = 2;
+
+ /**
+ * The CredentialsAcquirer object is created by the Credentials
+ * Curator based on the selected method and initial acquisition
+ * arguments. When this acquisition is complete and successful,
+ * the created credentials can be retrieved using the get_credentials
+ * operation. Once get_credentials is called, this object is destroyed.
+ */
+ local interface CredentialsAcquirer {
+
+ /**
+ * This attribute contains the acquisition method
+ * identifier naming the method by which these credentials
+ * are being acquired.
+ */
+ readonly attribute AcquisitionMethod acquisition_method;
+
+ /**
+ * This attribute contains the current acquisition
+ * status of the acquisition process.
+ */
+ readonly attribute AcquisitionStatus current_status;
+
+ /**
+ * If the acquisition process is a multistep process through calls
+ * to this acquirer, then this attribute contains the current
+ * iteration.
+ */
+ readonly attribute unsigned long nth_iteration;
+
+ /**
+ * If the <code>current_status</code> attribute contains
+ * the <code>AQST_Continued</code> value,
+ * this operation returns, if necessary and supported
+ * by the acquisition method, any data that may direct the
+ * acquisition.
+ * <p>
+ * If this operation in invoked when the <code>current_status</code>
+ * attribute does not have the <code>AQST_Continued</code> value,
+ * a <code>BAD_INV_ORDER</code> exception will be raised.
+ */
+ any get_continuation_data();
+
+ /**
+ * This operation continues the acquisition. The argument
+ * data is dependent on the acquisition method.
+ */
+ AcquisitionStatus continue_acquisition(
+ in any acquisition_arguments
+ );
+
+ /**
+ * Once the <code>current_status</code> attribute has the
+ * <code>AQST_Succeeded</code> value, a call to this operation
+ * is used to retrieve the acquired <code>OwnCredentials</code>
+ * and, optionally, place the credentials on the curator's default own
+ * credentials list (for use with default ContextEstablishmentPolicy
+ * and ObjectCredentialsPolicy).
+ * <p>
+ * The <code>CredentialsAcquirer</code> object is destroyed after
+ * this call.
+ * Any operation called on a destroyed <code>CredentialsAcquirer</code>
+ * raises a <code>BAD_INV_ORDER</code> exception.
+ * <p>
+ * If this operation in invoked when the <code>current_status</code>
+ * attribute does not have the <code>AQST_Succeeded</code> value,
+ * a <code>BAD_INV_ORDER</code> exception will be raised.
+ *
+ * @param on_list <code>TRUE</code> if these credentials go on the
+ * default own credentials list of the
+ * <code>CredentialsCurator</code>.
+ */
+ OwnCredentials get_credentials(
+ in boolean on_list
+ );
+
+ /**
+ * This operation is used to destroy the
+ * <code>CredentialsAcquirer</code> object before
+ * <code>get_credentials</code> is called.
+ * Any operation called on a destroyed <code>CredentialsAcquirer</code>
+ * raises a <code>BAD_INV_ORDER</code> exception.
+ */
+ void destroy();
+ };
+
+ /**
+ * The <code>CredentialsCurator</code> object is a single object per an ORB
+ * instance's Security Service. It has the ability to create
+ * <code>CredentialsAcquirer</code>s and keeps a list of active default
+ * credentials. It is resolved by a call to
+ * <pre>
+ * ORB.resolve_initial_references("SecurityLevel3:CredentialsCurator");
+ * </pre>
+ * Or it may be retrieved from the <code>SecurityManager</code>'s
+ * <code>credentials_curator</code> attribute.
+ * <p>
+ * The following pseudo code describes the process of credentials
+ * acquisition using <code>CredentialsCurator</code>.
+ * <pre>
+ * // Resolve the Credentials Curator
+ * CredentialsCurator curator = ....
+ * resolve_initial_references("SecurityLevel3:CredentialsCurator");
+ *
+ * // Build up an acquisition argument (e.g., using SL3CSI::CSIArgBuilder)
+ * Any arg = ...
+ *
+ * // Acquire credentials and get a Credentials Acquirer
+ * CredentialsAcquirer acquirer =
+ * curator.acquire_credentials("SL3CSIAQArgs",arg);
+ *
+ * // Get credentials and destroy the Credentials Acquirer
+ * OwnCredentials own = acquirer.get_credentials(false);
+ * </pre>
+ */
+ local interface CredentialsCurator {
+
+ /**
+ * This attribute contains a list of
+ * acquisition methods that are supported. Method identifiers
+ * are defined in modules that signify their support.
+ *
+ * @see "SL3CSI"
+ * @see "SL3TLS"
+ * @see "SL3TCPIP"
+ * @see "SL3KRB5"
+ */
+ readonly attribute SecurityLevel3::AcquisitionMethodList
+ supported_methods;
+
+ /**
+ * This operation starts the process of credentials acquisition and
+ * create a <code>CredentialsAcquirer</code> for a particular
+ * acquisition method. It takes an initial set of arguments for
+ * the acquisition. The content of the arguments are based on the
+ * acquisiton method. Depending on the method, it is possible that
+ * the credentials may be immediately available from a call to
+ * <code>get_credentials</code> on the returned
+ * <code>CredentialsAcquirer</code>.
+ * <p>
+ * If the process of credentials acquisition is not completed upon
+ * the return of the <code>acquire_credentials</code> operation,
+ * the returned <code>CredentialsAcquirer</code> object shall have
+ * its <code>current_status</code> at <code>AQST_Continued</code>.
+ * In this case, the <code>get_continuation_data</code> and
+ * <code>continue_acquisition</code> operations shall be used to
+ * complete the credentials acquisition process.
+ * <p>
+ * If the process of credentials acquisition fails, it is up to the
+ * implementation to either throw a system exception or return a
+ * <code>CredentialsAcquirer</code> with the <code>AQST_Failed</code>
+ * status.
+ * <p>
+ * The <code>acquisition_arguments</code> parameter is a CORBA
+ * <code>any</code> that is constructed according to the acquisition
+ * method used. The <code>ArgumentFactory</code> from the
+ * <code>SL3AQArgs</code> module is a local object that helps
+ * immensely with the construction of this complex argument.
+ * Extensions of that object are defined in their own separate
+ * modules that pertain to the particular acquisition mechanism,
+ * such as the SL3CSI, SL3TLS, SL3TCPIP, SL3KRB5 modules.
+ *
+ * @param acquisition_method
+ * The identifier of the desired acquisition method.
+ * A CORBA <code>BAD_PARAM</code> exception will be raised
+ * if the named method is not supported.
+ * @param acquisition_arguments
+ * The argument of the desired acquisition method.
+ * This CORBA <code>any</code> type is constructed according
+ * to the particular acquisition method.
+ *
+ * @see "SL3AQArgs"
+ * @see "SL3CSI"
+ * @see "SL3TLS"
+ * @see "SL3TCPIP"
+ * @see "SL3KRB5"
+ */
+ CredentialsAcquirer acquire_credentials(
+ in SecurityLevel3::AcquisitionMethod acquisition_method,
+ in any acquisition_arguments
+ );
+
+ /**
+ * The Curator's Default Own Credentials list.
+ */
+ readonly attribute OwnCredentialsList default_creds_list;
+
+ /**
+ * The Curator's ids of the credentials on the default list.
+ */
+ readonly attribute CredentialsIdList default_creds_ids;
+
+ /**
+ * This operation retrieves Own Credentials by identifier.
+ * It is not required that the identifier name a credentials
+ * on the default_credentials_list. The Curator keeps track
+ * of all OwnCredentials it creates, until they are explicitly
+ * released.
+ */
+ OwnCredentials get_own_credentials(
+ in CredentialsId credentials_id
+ );
+
+ /**
+ * This operation releases credentials from the default_creds_list,
+ * if there, and also disables the credentials from further use,
+ * provided that all their pending work is done.
+ */
+ void release_own_credentials (
+ in CredentialsId credentials_id
+ );
+
+ };
+
+ //--------------------------------------------------------------------
+ // Security Service ORB Objects
+ // Retrieved from the ORB by "resolve_initial_references".
+ //
+ //--------------------------------------------------------------------
+
+ /**
+ * The <code>SecurityManager</code> object represents the Security Level 3
+ * Security Service. There is one object of this type per ORB
+ * instance. It is resolved by a call to
+ * <pre>
+ * ORB.resolve_initial_references("SecurityLevel3:SecurityManager");
+ * </pre>
+ */
+ local interface SecurityManager {
+
+ /**
+ * The credentials_curator attribute contains the reference
+ * to the SecurityLevel3 Credentials Curator. There is only
+ * one instance per ORB.
+ */
+ readonly attribute CredentialsCurator credentials_curator;
+
+ /**
+ * The get_target_credentials operation retrieves the
+ * TargetCredentials that represents a CSIv2 security association
+ * with a Target. This operation causes communication with
+ * the target in order to establish a security context.
+ */
+ TargetCredentials get_target_credentials(
+ in Object the_object
+ );
+
+ /**
+ * The create_context_estab_policy operation is a policy factory
+ * operation that creates the Security Level 3
+ * ContextEstablishmentPolicy object. This policy is placed on
+ * the policy override lists of object references to direct
+ * the security characteristics when communicating through
+ * that object reference.
+ * <p>
+ * If this policy is not put on an object reference, and the
+ * <a href="TransportSecurity.ObjectCredentialsPolicy.html">
+ * TransportSecurity::ObjectCredentialsPolicy</a>
+ * is also not on the object references policy list,
+ * then the default credentials lists from the
+ * <a href="SecurityLevel3.CredentialsCurator.html">
+ * SecurityLevel3::CredentialsCurator</a>
+ * and
+ * <a href="TransportSecurity.CredentialsCurator.html">
+ * TransportSecurity::CredentialsCurator</a>
+ * are used.
+ */
+ ContextEstablishmentPolicy create_context_estab_policy(
+ in CredsDirective creds_directive,
+ in OwnCredentialsList creds_list,
+ in FeatureDirective use_client_auth,
+ in FeatureDirective use_target_auth,
+ in FeatureDirective use_confidentiality,
+ in FeatureDirective use_integrity
+ );
+
+ /**
+ * The create_object_creds_policy is a policy factory operation
+ * that creates the ObjectCredentialsPolicy object. This policy
+ * is solely for use with policies place on POAs with "POA.create_POA".
+ * It restricts the POAs use of credentials. If this policy is
+ * not put on a POA, and the
+ * <a href="TransportSecurity.ObjectCredentialsPolicy.html">
+ * TransportSecurity::ObjectCredentialsPolicy</a>
+ * is also not on the POA policy list, then the default
+ * credentials lists from the
+ * <a href="SecurityLevel3.CredentialsCurator.html">
+ * SecurityLevel3::CredentialsCurator</a>
+ * and
+ * <a href="TransportSecurity.CredentialsCurator.html">
+ * TransportSecurity::CredentialsCurator</a>
+ * are used.
+ */
+ ObjectCredentialsPolicy create_object_creds_policy(
+ in OwnCredentialsList creds_list
+ );
+ };
+
+ /**
+ * The <code>SecurityCurrent</code> object references thread specific
+ * data pertaining to the security service. It is used to retrieve
+ * the client's credentials during an invocation on the server side.
+ * <p>
+ * There is only one instance of this object per ORB instance.
+ * It is resolved by a call to
+ * <pre>
+ * ORB.resolve_initial_references("SecurityLevel3:SecurityCurrent");
+ * </pre>
+ */
+ local interface SecurityCurrent {
+
+ /**
+ * From inside the execution of a target object implementation,
+ * this attribute contains the representation of the remote client's
+ * credentials. This attribute is null if the client is not CSIv2
+ * based, or the client is from a collocated call.
+ * <p>
+ * The value of this attribute, if not null, represents the
+ * security context with a remote CSIv2 client.
+ * If the <code>request_is_local<code> attribute is <code>FALSE</code>,
+ * the current thread of execution is directly servicing a remote
+ * request for the target object within the target's implemenation.
+ * If the <code>request_is_local</code> attribute is <code>TRUE</code>,
+ * the current thread of execution is servicing an ORB mediated call
+ * on a collocated object.
+ * <p>
+ * If the client is not CSIv2 based, there are no CSIv2 Client
+ * Credentials, and this attribute is null. In this case,
+ * the user should try the
+ * <a href="TransportSecurity.SecurityCurrent.html>
+ * TransportSecurity::SecurityCurrent</a>,
+ * as the request may have come over a secure or
+ * insecure transport, such as IIOP or TLS, without a CSIv2
+ * Service Context.
+ */
+ readonly attribute ClientCredentials client_credentials;
+
+ /**
+ * If this attribute is <code>TRUE</code>, the client_credentials attribute
+ * returns the credentials of the remote client no matter how
+ * deep the collocated call stack, unless of course, this request
+ * is not CSIv2 based, in which case it returns null.
+ * This attribute is <code>TRUE</code> if the current thread of
+ * execution is servicing a request on a collocated object.
+ * This attribute is <code>FALSE</code> if the current thread of
+ * execution is immediately servicing a remote request.
+ * <p>
+ * If this attribute is <code>TRUE</code>, there may or may not be
+ * a remote client. If there is a remote client and the client is
+ * CSIv2 based, the <code>client_credentials</code> attribute will
+ * return the credentials of the remote client.
+ * <p>
+ * If this attribute is <code>FALSE</code>, there will always be a
+ * remote client. In such case, the <code>client_credentials</code>
+ * attribute will return the credentials of the remote client,
+ * unless the client is not CSIv2 based.
+ */
+ readonly attribute boolean request_is_local;
+ };
+
+};
+#endif