credentials are valid for context acceptor use only, because the
caller lacks authorization to access the referenced credentials, or
because the resolution of default credentials failed.
o GSS_S_CREDENTIALS_EXPIRED indicates that the credentials provided
through the input claimant_cred_handle argument are no longer valid,
so context establishment cannot be completed.
o GSS_S_BAD_BINDINGS indicates that a mismatch between the caller-
provided chan_bindings and those extracted from the input_token was
detected, signifying a security-relevant event and preventing context
establishment. (This result will be returned by
GSS_Init_sec_context() only for contexts where mutual_state is TRUE.)
o GSS_S_OLD_TOKEN indicates that the input_token is too old to be
checked for integrity. This is a fatal error during context
establishment.
o GSS_S_DUPLICATE_TOKEN indicates that the input token has a correct
integrity check, but is a duplicate of a token already processed.
This is a fatal error during context establishment.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided; this major status will be
returned only for successor calls following GSS_S_CONTINUE_ NEEDED
status returns.
o GSS_S_BAD_NAMETYPE indicates that the provided targ_name is of a
type uninterpretable or unsupported by the applicable underlying
GSS-API mechanism(s), so context establishment cannot be completed.
o GSS_S_BAD_NAME indicates that the provided targ_name is
inconsistent in terms of internally-incorporated type specifier
information, so context establishment cannot be accomplished.
o GSS_S_BAD_MECH indicates receipt of a context establishment token
or of a caller request specifying a mechanism unsupported by the
local system or with the caller's active credentials
o GSS_S_FAILURE indicates that context setup could not be
accomplished for reasons unspecified at the GSS-API level, and that
no interface-defined recovery action is available.
This routine is used by a context initiator, and ordinarily emits an
output_token suitable for use by the target within the selected
mech_type's protocol. For the case of a multi-step exchange, this
output_token will be one in a series, each generated by a successive
call. Using information in the credentials structure referenced by
claimant_cred_handle, GSS_Init_sec_context() initializes the data
structures required to establish a security context with target
targ_name.
The targ_name may be any valid INTERNAL NAME; it need not be an MN.
In addition to support for other name types, it is recommended (newly
as of GSS-V2, Update 1) that mechanisms be able to accept
GSS_C_NO_NAME as an input type for targ_name. While recommended,
such support is not required, and it is recognized that not all
mechanisms can construct tokens without explicitly naming the context
target, even when mutual authentication of the target is not
obtained. Callers wishing to make use of this facility and concerned
with portability should be aware that support for GSS_C_NO_NAME as
input targ_name type is unlikely to be provided within mechanism
definitions specified prior to GSS-V2, Update 1.
The claimant_cred_handle must correspond to the same valid
credentials structure on the initial call to GSS_Init_sec_context()
and on any successor calls resulting from GSS_S_CONTINUE_NEEDED
status returns; different protocol sequences modeled by the
GSS_S_CONTINUE_NEEDED facility will require access to credentials at
different points in the context establishment sequence.
The caller-provided input_context_handle argument is to be 0
(GSS_C_NO_CONTEXT), specifying "not yet assigned", on the first
GSS_Init_sec_context() call relating to a given context. If
successful (i.e., if accompanied by major_status GSS_S_COMPLETE or
GSS_S_CONTINUE_NEEDED), and only if successful, the initial
GSS_Init_sec_context() call returns a non-zero output_context_handle
for use in future references to this context. Once a non-zero
output_context_handle has been returned, GSS-API callers should call
GSS_Delete_sec_context() to release context-related resources if
errors occur in later phases of context establishment, or when an
established context is no longer required. If GSS_Init_sec_context()
is passed the handle of a context which is already fully established,
GSS_S_FAILURE status is returned.
When continuation attempts to GSS_Init_sec_context() are needed to
perform context establishment, the previously-returned non-zero
handle value is entered into the input_context_handle argument and
will be echoed in the returned output_context_handle argument. On
such continuation attempts (and only on continuation attempts) the
input_token value is used, to provide the token returned from the
context's target.
The chan_bindings argument is used by the caller to provide
information binding the security context to security-related
characteristics (e.g., addresses, cryptographic keys) of the
underlying communications channel. See Section 1.1.6 of this document
for more discussion of this argument's usage.
The input_token argument contains a message received from the target,
and is significant only on a call to GSS_Init_sec_context() which
follows a previous return indicating GSS_S_CONTINUE_NEEDED
major_status.
It is the caller's responsibility to establish a communications path
to the target, and to transmit any returned output_token (independent
of the accompanying returned major_status value) to the target over
that path. The output_token can, however, be transmitted along with
the first application-provided input message to be processed by
GSS_GetMIC() or GSS_Wrap() in conjunction with a successfully-
established context. (Note: when the GSS-V2 prot_ready_state
indicator is returned TRUE, it can be possible to transfer a
protected message before context establishment is complete: see also
Section 1.2.7)
The initiator may request various context-level functions through
input flags: the deleg_req_flag requests delegation of access rights,
the mutual_req_flag requests mutual authentication, the
replay_det_req_flag requests that replay detection features be
applied to messages transferred on the established context, and the
sequence_req_flag requests that sequencing be enforced. (See Section
1.2.3 for more information on replay detection and sequencing
features.) The anon_req_flag requests that the initiator's identity
not be transferred within tokens to be sent to the acceptor.
The conf_req_flag and integ_req_flag provide informatory inputs to
the GSS-API implementation as to whether, respectively, per-message
confidentiality and per-message integrity services will be required
on the context. This information is important as an input to
negotiating mechanisms. It is important to recognize, however, that
the inclusion of these flags (which are newly defined for GSS-V2)
introduces a backward incompatibility with callers implemented to
GSS-V1, where the flags were not defined. Since no GSS-V1 callers
would set these flags, even if per-message services are desired,
GSS-V2 mechanism implementations which enable such services
selectively based on the flags' values may fail to provide them to
contexts established for GSS-V1 callers. It may be appropriate under
certain circumstances, therefore, for such mechanism implementations
to infer these service request flags to be set if a caller is known
to be implemented to GSS-V1.
Not all of the optionally-requestable features will be available in
all underlying mech_types. The corresponding return state values
deleg_state, mutual_state, replay_det_state, and sequence_state
indicate, as a function of mech_type processing capabilities and
initiator-provided input flags, the set of features which will be
active on the context. The returned trans_state value indicates
whether the context is transferable to other processes through use of
GSS_Export_sec_context(). These state indicators' values are
undefined unless either the routine's major_status indicates
GSS_S_COMPLETE, or TRUE prot_ready_state is returned along with
GSS_S_CONTINUE_NEEDED major_status; for the latter case, it is
possible that additional features, not confirmed or indicated along
with TRUE prot_ready_state, will be confirmed and indicated when
GSS_S_COMPLETE is subsequently returned.
The returned anon_state and prot_ready_state values are significant
for both GSS_S_COMPLETE and GSS_S_CONTINUE_NEEDED major_status
returns from GSS_Init_sec_context(). When anon_state is returned
TRUE, this indicates that neither the current token nor its
predecessors delivers or has delivered the initiator's identity.
Callers wishing to perform context establishment only if anonymity
support is provided should transfer a returned token from
GSS_Init_sec_context() to the peer only if it is accompanied by a
TRUE anon_state indicator. When prot_ready_state is returned TRUE in
conjunction with GSS_S_CONTINUE_NEEDED major_status, this indicates
that per-message protection operations may be applied on the context:
see Section 1.2.7 for further discussion of this facility.
Failure to provide the precise set of features requested by the
caller does not cause context establishment to fail; it is the
caller's prerogative to delete the context if the feature set
provided is unsuitable for the caller's use.
The returned mech_type value indicates the specific mechanism
employed on the context; it will never indicate the value for
"default". A valid mech_type result must be returned along with a
GSS_S_COMPLETE status return; GSS-API implementations may (but are
not required to) also return mech_type along with predecessor calls
indicating GSS_S_CONTINUE_NEEDED status or (if a mechanism is
determinable) in conjunction with fatal error cases. For the case of
mechanisms which themselves perform negotiation, the returned
mech_type result may indicate selection of a mechanism identified by
an OID different than that passed in the input mech_type argument,
and the returned value may change between successive calls returning
GSS_S_CONTINUE_NEEDED and the final call returning GSS_S_COMPLETE.
The conf_avail return value indicates whether the context supports
per-message confidentiality services, and so informs the caller
whether or not a request for encryption through the conf_req_flag
input to GSS_Wrap() can be honored. In similar fashion, the
integ_avail return value indicates whether per-message integrity
services are available (through either GSS_GetMIC() or GSS_Wrap()) on
the established context. These state indicators' values are undefined
unless either the routine's major_status indicates GSS_S_COMPLETE, or
TRUE prot_ready_state is returned along with GSS_S_CONTINUE_NEEDED
major_status.
The lifetime_req input specifies a desired upper bound for the
lifetime of the context to be established, with a value of 0 used to
request a default lifetime. The lifetime_rec return value indicates
the length of time for which the context will be valid, expressed as
an offset from the present; depending on mechanism capabilities,
credential lifetimes, and local policy, it may not correspond to the
value requested in lifetime_req. If no constraints on context
lifetime are imposed, this may be indicated by returning a reserved
value representing INDEFINITE lifetime_req. The value of lifetime_rec
is undefined unless the routine's major_status indicates
GSS_S_COMPLETE.
If the mutual_state is TRUE, this fact will be reflected within the
output_token. A call to GSS_Accept_sec_context() at the target in
conjunction with such a context will return a token, to be processed
by a continuation call to GSS_Init_sec_context(), in order to achieve
mutual authentication.
2.2.2: GSS_Accept_sec_context call
Inputs:
o acceptor_cred_handle CREDENTIAL HANDLE, -- NULL specifies
-- "use default"
o input_context_handle CONTEXT HANDLE, -- 0
-- (GSS_C_NO_CONTEXT) specifies "not yet assigned"
o chan_bindings OCTET STRING,
o input_token OCTET STRING
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o src_name INTERNAL NAME, -- guaranteed to be MN
-- once returned, caller must release with GSS_Release_name()
o mech_type OBJECT IDENTIFIER, -- caller should treat as
-- read-only; does not need to be released
o output_context_handle CONTEXT HANDLE, -- once returned
-- non-NULL in context establishment sequence, caller
-- must release with GSS_Delete_sec_context()
o deleg_state BOOLEAN,
o mutual_state BOOLEAN,
o replay_det_state BOOLEAN,
o sequence_state BOOLEAN,
o anon_state BOOLEAN,
o trans_state BOOLEAN,
o prot_ready_state BOOLEAN, -- see Section 1.2.7 for discussion
o conf_avail BOOLEAN,
o integ_avail BOOLEAN,
o lifetime_rec INTEGER, -- in seconds, or reserved value for
-- INDEFINITE
o delegated_cred_handle CREDENTIAL HANDLE, -- if returned non-NULL,
-- caller must release with GSS_Release_cred()
o output_token OCTET STRING -- NULL or token to pass to context
-- initiator; if returned non-NULL, caller must release with
-- GSS_Release_buffer()
This call may block pending network interactions for those mech_types
in which a directory service or other network entity must be
consulted on behalf of a context acceptor in order to validate a
received input_token.
Return major_status codes:
o GSS_S_COMPLETE indicates that context-level data structures were
successfully initialized, and that per-message processing can now be
performed in conjunction with this context.
o GSS_S_CONTINUE_NEEDED indicates that control information in the
returned output_token must be sent to the initiator, and that a
response must be received and passed as the input_token argument to a
continuation call to GSS_Accept_sec_context(), before per-message
processing can be performed in conjunction with this context.
o GSS_S_DEFECTIVE_TOKEN indicates that consistency checks performed
on the input_token failed, preventing further processing from being
performed based on that token.
o GSS_S_DEFECTIVE_CREDENTIAL indicates that consistency checks
performed on the credential structure referenced by
acceptor_cred_handle failed, preventing further processing from being
performed using that credential structure.
o GSS_S_BAD_SIG (GSS_S_BAD_MIC) indicates that the received
input_token contains an incorrect integrity check, so context setup
cannot be accomplished.
o GSS_S_DUPLICATE_TOKEN indicates that the integrity check on the
received input_token was correct, but that the input_token was
recognized as a duplicate of an input_token already processed. No new
context is established.
o GSS_S_OLD_TOKEN indicates that the integrity check on the received
input_token was correct, but that the input_token is too old to be
checked for duplication against previously-processed input_tokens. No
new context is established.
o GSS_S_NO_CRED indicates that no context was established, either
because the input cred_handle was invalid, because the referenced
credentials are valid for context initiator use only, because the
caller lacks authorization to access the referenced credentials, or
because the procedure for default credential resolution failed.
o GSS_S_CREDENTIALS_EXPIRED indicates that the credentials provided
through the input acceptor_cred_handle argument are no longer valid,
so context establishment cannot be completed.
o GSS_S_BAD_BINDINGS indicates that a mismatch between the caller-
provided chan_bindings and those extracted from the input_token was
detected, signifying a security-relevant event and preventing context
establishment.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided; this major status will be
returned only for successor calls following GSS_S_CONTINUE_ NEEDED
status returns.
o GSS_S_BAD_MECH indicates receipt of a context establishment token
specifying a mechanism unsupported by the local system or with the
caller's active credentials.
o GSS_S_FAILURE indicates that context setup could not be
accomplished for reasons unspecified at the GSS-API level, and that
no interface-defined recovery action is available.
The GSS_Accept_sec_context() routine is used by a context target.
Using information in the credentials structure referenced by the
input acceptor_cred_handle, it verifies the incoming input_token and
(following the successful completion of a context establishment
sequence) returns the authenticated src_name and the mech_type used.
The returned src_name is guaranteed to be an MN, processed by the
mechanism under which the context was established. The
acceptor_cred_handle must correspond to the same valid credentials
structure on the initial call to GSS_Accept_sec_context() and on any
successor calls resulting from GSS_S_CONTINUE_NEEDED status returns;
different protocol sequences modeled by the GSS_S_CONTINUE_NEEDED
mechanism will require access to credentials at different points in
the context establishment sequence.
The caller-provided input_context_handle argument is to be 0
(GSS_C_NO_CONTEXT), specifying "not yet assigned", on the first
GSS_Accept_sec_context() call relating to a given context. If
successful (i.e., if accompanied by major_status GSS_S_COMPLETE or
GSS_S_CONTINUE_NEEDED), and only if successful, the initial
GSS_Accept_sec_context() call returns a non-zero
output_context_handle for use in future references to this context.
Once a non-zero output_context_handle has been returned, GSS-API
callers should call GSS_Delete_sec_context() to release context-
related resources if errors occur in later phases of context
establishment, or when an established context is no longer required.
If GSS_Accept_sec_context() is passed the handle of a context which
is already fully established, GSS_S_FAILURE status is returned.
The chan_bindings argument is used by the caller to provide
information binding the security context to security-related
characteristics (e.g., addresses, cryptographic keys) of the
underlying communications channel. See Section 1.1.6 of this document
for more discussion of this argument's usage.
The returned state results (deleg_state, mutual_state,
replay_det_state, sequence_state, anon_state, trans_state, and
prot_ready_state) reflect the same information as described for
GSS_Init_sec_context(), and their values are significant under the
same return state conditions.
The conf_avail return value indicates whether the context supports
per-message confidentiality services, and so informs the caller
whether or not a request for encryption through the conf_req_flag
input to GSS_Wrap() can be honored. In similar fashion, the
integ_avail return value indicates whether per-message integrity
services are available (through either GSS_GetMIC() or GSS_Wrap())
on the established context. These values are significant under the
same return state conditions as described under
GSS_Init_sec_context().
The lifetime_rec return value is significant only in conjunction with
GSS_S_COMPLETE major_status, and indicates the length of time for
which the context will be valid, expressed as an offset from the
present.
The returned mech_type value indicates the specific mechanism
employed on the context; it will never indicate the value for
"default". A valid mech_type result must be returned whenever
GSS_S_COMPLETE status is indicated; GSS-API implementations may (but
are not required to) also return mech_type along with predecessor
calls indicating GSS_S_CONTINUE_NEEDED status or (if a mechanism is
determinable) in conjunction with fatal error cases. For the case of
mechanisms which themselves perform negotiation, the returned
mech_type result may indicate selection of a mechanism identified by
an OID different than that passed in the input mech_type argument,
and the returned value may change between successive calls returning
GSS_S_CONTINUE_NEEDED and the final call returning GSS_S_COMPLETE.
The delegated_cred_handle result is significant only when deleg_state
is TRUE, and provides a means for the target to reference the
delegated credentials. The output_token result, when non-NULL,
provides a context-level token to be returned to the context
initiator to continue a multi-step context establishment sequence. As
noted with GSS_Init_sec_context(), any returned token should be
transferred to the context's peer (in this case, the context
initiator), independent of the value of the accompanying returned
major_status.
Note: A target must be able to distinguish a context-level
input_token, which is passed to GSS_Accept_sec_context(), from the
per-message data elements passed to GSS_VerifyMIC() or GSS_Unwrap().
These data elements may arrive in a single application message, and
GSS_Accept_sec_context() must be performed before per-message
processing can be performed successfully.
2.2.3: GSS_Delete_sec_context call
Input:
o context_handle CONTEXT HANDLE
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o output_context_token OCTET STRING
Return major_status codes:
o GSS_S_COMPLETE indicates that the context was recognized, and that
relevant context-specific information was flushed. If the caller
provides a non-null buffer to receive an output_context_token, and
the mechanism returns a non-NULL token into that buffer, the returned
output_context_token is ready for transfer to the context's peer.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided, so no deletion was performed.
o GSS_S_FAILURE indicates that the context is recognized, but that
the GSS_Delete_sec_context() operation could not be performed for
reasons unspecified at the GSS-API level.
This call can be made by either peer in a security context, to flush
context-specific information. Once a non-zero output_context_handle
has been returned by context establishment calls, GSS-API callers
should call GSS_Delete_sec_context() to release context-related
resources if errors occur in later phases of context establishment,
or when an established context is no longer required. This call may
block pending network interactions for mech_types in which active
notification must be made to a central server when a security context
is to be deleted.
If a non-null output_context_token parameter is provided by the
caller, an output_context_token may be returned to the caller. If an
output_context_token is provided to the caller, it can be passed to
the context's peer to inform the peer's GSS-API implementation that
the peer's corresponding context information can also be flushed.
(Once a context is established, the peers involved are expected to
retain cached credential and context-related information until the
information's expiration time is reached or until a
GSS_Delete_sec_context() call is made.)
The facility for context_token usage to signal context deletion is
retained for compatibility with GSS-API Version 1. For current
usage, it is recommended that both peers to a context invoke
GSS_Delete_sec_context() independently, passing a null
output_context_token buffer to indicate that no context_token is
required. Implementations of GSS_Delete_sec_context() should delete
relevant locally-stored context information.
Attempts to perform per-message processing on a deleted context will
result in error returns.
2.2.4: GSS_Process_context_token call
Inputs:
o context_handle CONTEXT HANDLE,
o input_context_token OCTET STRING
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
Return major_status codes:
o GSS_S_COMPLETE indicates that the input_context_token was
successfully processed in conjunction with the context referenced by
context_handle.
o GSS_S_DEFECTIVE_TOKEN indicates that consistency checks performed
on the received context_token failed, preventing further processing
from being performed with that token.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided.
o GSS_S_FAILURE indicates that the context is recognized, but that
the GSS_Process_context_token() operation could not be performed for
reasons unspecified at the GSS-API level.
This call is used to process context_tokens received from a peer once
a context has been established, with corresponding impact on
context-level state information. One use for this facility is
processing of the context_tokens generated by
GSS_Delete_sec_context(); GSS_Process_context_token() will not block
pending network interactions for that purpose. Another use is to
process tokens indicating remote-peer context establishment failures
after the point where the local GSS-API implementation has already
indicated GSS_S_COMPLETE status.
2.2.5: GSS_Context_time call
Input:
o context_handle CONTEXT HANDLE,
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o lifetime_rec INTEGER -- in seconds, or reserved value for
-- INDEFINITE
Return major_status codes:
o GSS_S_COMPLETE indicates that the referenced context is valid, and
will remain valid for the amount of time indicated in lifetime_rec.
o GSS_S_CONTEXT_EXPIRED indicates that data items related to the
referenced context have expired.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided.
o GSS_S_FAILURE indicates that the requested operation failed for
reasons unspecified at the GSS-API level.
This call is used to determine the amount of time for which a
currently established context will remain valid.
2.2.6: GSS_Inquire_context call
Input:
o context_handle CONTEXT HANDLE,
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o src_name INTERNAL NAME, -- name of context initiator,
-- guaranteed to be MN;
-- caller must release with GSS_Release_name() if returned
o targ_name INTERNAL NAME, -- name of context target,
-- guaranteed to be MN;
-- caller must release with GSS_Release_name() if returned
o lifetime_rec INTEGER -- in seconds, or reserved value for
-- INDEFINITE or EXPIRED
o mech_type OBJECT IDENTIFIER, -- the mechanism supporting this
-- security context; caller should treat as read-only and not
-- attempt to release
o deleg_state BOOLEAN,
o mutual_state BOOLEAN,
o replay_det_state BOOLEAN,
o sequence_state BOOLEAN,
o anon_state BOOLEAN,
o trans_state BOOLEAN,
o prot_ready_state BOOLEAN,
o conf_avail BOOLEAN,
o integ_avail BOOLEAN,
o locally_initiated BOOLEAN, -- TRUE if initiator, FALSE if acceptor
o open BOOLEAN, -- TRUE if context fully established, FALSE
-- if partly established (in CONTINUE_NEEDED state)
Return major_status codes:
o GSS_S_COMPLETE indicates that the referenced context is valid and
that deleg_state, mutual_state, replay_det_state, sequence_state,
anon_state, trans_state, prot_ready_state, conf_avail, integ_avail,
locally_initiated, and open return values describe the corresponding
characteristics of the context. If open is TRUE, lifetime_rec is
also returned: if open is TRUE and the context peer's name is known,
src_name and targ_name are valid in addition to the values listed
above. The mech_type value must be returned for contexts where open
is TRUE and may be returned for contexts where open is FALSE.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided. Return values other than
major_status and minor_status are undefined.
o GSS_S_FAILURE indicates that the requested operation failed for
reasons unspecified at the GSS-API level. Return values other than
major_status and minor_status are undefined.
This call is used to extract information describing characteristics
of a security context. Note that GSS-API implementations are
expected to retain inquirable context data on a context until the
context is released by a caller, even after the context has expired,
although underlying cryptographic data elements may be deleted after
expiration in order to limit their exposure.
2.2.7: GSS_Wrap_size_limit call
Inputs:
o context_handle CONTEXT HANDLE,
o conf_req_flag BOOLEAN,
o qop INTEGER,
o output_size INTEGER
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o max_input_size INTEGER
Return major_status codes:
o GSS_S_COMPLETE indicates a successful token size determination:
an input message with a length in octets equal to the returned
max_input_size value will, when passed to GSS_Wrap() for processing
on the context identified by the context_handle parameter with the
confidentiality request state as provided in conf_req_flag and with
the quality of protection specifier provided in the qop parameter,
yield an output token no larger than the value of the provided
output_size parameter.
o GSS_S_CONTEXT_EXPIRED indicates that the provided input
context_handle is recognized, but that the referenced context has
expired. Return values other than major_status and minor_status are
undefined.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided. Return values other than
major_status and minor_status are undefined.
o GSS_S_BAD_QOP indicates that the provided QOP value is not
recognized or supported for the context.
o GSS_S_FAILURE indicates that the requested operation failed for
reasons unspecified at the GSS-API level. Return values other than
major_status and minor_status are undefined.
This call is used to determine the largest input datum which may be
passed to GSS_Wrap() without yielding an output token larger than a
caller-specified value.
2.2.8: GSS_Export_sec_context call
Inputs:
o context_handle CONTEXT HANDLE
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o interprocess_token OCTET STRING -- caller must release
-- with GSS_Release_buffer()
Return major_status codes:
o GSS_S_COMPLETE indicates that the referenced context has been
successfully exported to a representation in the interprocess_token,
and is no longer available for use by the caller.
o GSS_S_UNAVAILABLE indicates that the context export facility is
not available for use on the referenced context. (This status should
occur only for contexts for which the trans_state value is FALSE.)
Return values other than major_status and minor_status are undefined.
o GSS_S_CONTEXT_EXPIRED indicates that the provided input
context_handle is recognized, but that the referenced context has
expired. Return values other than major_status and minor_status are
undefined.
o GSS_S_NO_CONTEXT indicates that no valid context was recognized
for the input context_handle provided. Return values other than
major_status and minor_status are undefined.
o GSS_S_FAILURE indicates that the requested operation failed for
reasons unspecified at the GSS-API level. Return values other than
major_status and minor_status are undefined.
This call generates an interprocess token for transfer to another
process within an end system, in order to transfer control of a
security context to that process. The recipient of the interprocess
token will call GSS_Import_sec_context() to accept the transfer. The
GSS_Export_sec_context() operation is defined for use only with
security contexts which are fully and successfully established (i.e.,
those for which GSS_Init_sec_context() and GSS_Accept_sec_context()
have returned GSS_S_COMPLETE major_status).
A successful GSS_Export_sec_context() operation deactivates the
security context for the calling process; for this case, the GSS-API
implementation shall deallocate all process-wide resources associated
with the security context and shall set the context_handle to
GSS_C_NO_CONTEXT. In the event of an error that makes it impossible
to complete export of the security context, the GSS-API
implementation must not return an interprocess token and should
strive to leave the security context referenced by the context_handle
untouched. If this is impossible, it is permissible for the
implementation to delete the security context, provided that it also
sets the context_handle parameter to GSS_C_NO_CONTEXT.
Portable callers must not assume that a given interprocess token can
be imported by GSS_Import_sec_context() more than once, thereby
creating multiple instantiations of a single context. GSS-API
implementations may detect and reject attempted multiple imports, but
are not required to do so.
The internal representation contained within the interprocess token
is an implementation-defined local matter. Interprocess tokens
cannot be assumed to be transferable across different GSS-API
implementations.
It is recommended that GSS-API implementations adopt policies suited
to their operational environments in order to define the set of
processes eligible to import a context, but specific constraints in
this area are local matters. Candidate examples include transfers
between processes operating on behalf of the same user identity, or
processes comprising a common job. However, it may be impossible to
enforce such policies in some implementations.
In support of the above goals, implementations may protect the
transferred context data by using cryptography to protect data within
the interprocess token, or by using interprocess tokens as a means to
reference local interprocess communication facilities (protected by
other means) rather than storing the context data directly within the
tokens.
Transfer of an open context may, for certain mechanisms and
implementations, reveal data about the credential which was used to
establish the context. Callers should, therefore, be cautious about
the trustworthiness of processes to which they transfer contexts.
Although the GSS-API implementation may provide its own set of
protections over the exported context, the caller is responsible for
protecting the interprocess token from disclosure, and for taking
care that the context is transferred to an appropriate destination
process.
2.2.9: GSS_Import_sec_context call
Inputs:
o interprocess_token OCTET STRING
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o context_handle CONTEXT HANDLE -- if successfully returned,
-- caller must release with GSS_Delete_sec_context()
Return major_status codes:
o GSS_S_COMPLETE indicates that the context represented by the input
interprocess_token has been successfully transferred to the caller,
and is available for future use via the output context_handle.
o GSS_S_NO_CONTEXT indicates that the context represented by the
input interprocess_token was invalid. Return values other than
major_status and minor_status are undefined.
o GSS_S_DEFECTIVE_TOKEN indicates that the input interprocess_token
was defective. Return values other than major_status and
minor_status are undefined.
o GSS_S_UNAVAILABLE indicates that the context import facility is
not available for use on the referenced context. Return values other
than major_status and minor_status are undefined.
o GSS_S_UNAUTHORIZED indicates that the context represented by the
input interprocess_token is unauthorized for transfer to the caller.
Return values other than major_status and minor_status are undefined.
o GSS_S_FAILURE indicates that the requested operation failed for
reasons unspecified at the GSS-API level. Return values other than
major_status and minor_status are undefined.
This call processes an interprocess token generated by
GSS_Export_sec_context(), making the transferred context available
for use by the caller. After a successful GSS_Import_sec_context()
operation, the imported context is available for use by the importing
process. In particular, the imported context is usable for all per-
message operations and may be deleted or exported by its importer.
The inability to receive delegated credentials through
gss_import_sec_context() precludes establishment of new contexts
based on information delegated to the importer's end system within
the context which is being imported, unless those delegated
credentials are obtained through separate routines (e.g., XGSS-API
calls) outside the GSS-V2 definition.
For further discussion of the security and authorization issues
regarding this call, please see the discussion in Section 2.2.8.
2.3: Per-message calls
This group of calls is used to perform per-message protection
processing on an established security context. None of these calls
block pending network interactions. These calls may be invoked by a
context's initiator or by the context's target. The four members of
this group should be considered as two pairs; the output from
GSS_GetMIC() is properly input to GSS_VerifyMIC(), and the output
from GSS_Wrap() is properly input to GSS_Unwrap().
GSS_GetMIC() and GSS_VerifyMIC() support data origin authentication
and data integrity services. When GSS_GetMIC() is invoked on an input
message, it yields a per-message token containing data items which
allow underlying mechanisms to provide the specified security
services. The original message, along with the generated per-message
token, is passed to the remote peer; these two data elements are
processed by GSS_VerifyMIC(), which validates the message in
conjunction with the separate token.
GSS_Wrap() and GSS_Unwrap() support caller-requested confidentiality
in addition to the data origin authentication and data integrity
services offered by GSS_GetMIC() and GSS_VerifyMIC(). GSS_Wrap()
outputs a single data element, encapsulating optionally enciphered
user data as well as associated token data items. The data element
output from GSS_Wrap() is passed to the remote peer and processed by
GSS_Unwrap() at that system. GSS_Unwrap() combines decipherment (as
required) with validation of data items related to authentication and
integrity.
Although zero-length tokens are never returned by GSS calls for
transfer to a context's peer, a zero-length object may be passed by a
caller into GSS_Wrap(), in which case the corresponding peer calling
GSS_Unwrap() on the transferred token will receive a zero-length
object as output from GSS_Unwrap(). Similarly, GSS_GetMIC() can be
called on an empty object, yielding a MIC which GSS_VerifyMIC() will
successfully verify against the active security context in
conjunction with a zero-length object.
2.3.1: GSS_GetMIC call
Note: This call is functionally equivalent to the GSS_Sign call as
defined in previous versions of this specification. In the interests
of backward compatibility, it is recommended that implementations
support this function under both names for the present; future
references to this function as GSS_Sign are deprecated.
Inputs:
o context_handle CONTEXT HANDLE,
o qop_req INTEGER, -- 0 specifies default QOP
o message OCTET STRING
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o per_msg_token OCTET STRING -- caller must release
-- with GSS_Release_buffer()
Return major_status codes:
o GSS_S_COMPLETE indicates that an integrity check, suitable for an
established security context, was successfully applied and that the
message and corresponding per_msg_token are ready for transmission.
o GSS_S_CONTEXT_EXPIRED indicates that context-related data items
have expired, so that the requested operation cannot be performed.
o GSS_S_NO_CONTEXT indicates that no context was recognized for the
input context_handle provided.
o GSS_S_BAD_QOP indicates that the provided QOP value is not
recognized or supported for the context.
o GSS_S_FAILURE indicates that the context is recognized, but that
the requested operation could not be performed for reasons
unspecified at the GSS-API level.
Using the security context referenced by context_handle, apply an
integrity check to the input message (along with timestamps and/or
other data included in support of mech_type-specific mechanisms) and
(if GSS_S_COMPLETE status is indicated) return the result in
per_msg_token. The qop_req parameter, interpretation of which is
discussed in Section 1.2.4, allows quality-of-protection control. The
caller passes the message and the per_msg_token to the target.
The GSS_GetMIC() function completes before the message and
per_msg_token is sent to the peer; successful application of
GSS_GetMIC() does not guarantee that a corresponding GSS_VerifyMIC()
has been (or can necessarily be) performed successfully when the
message arrives at the destination.
Mechanisms which do not support per-message protection services
should return GSS_S_FAILURE if this routine is called.
2.3.2: GSS_VerifyMIC call
Note: This call is functionally equivalent to the GSS_Verify call as
defined in previous versions of this specification. In the interests
of backward compatibility, it is recommended that implementations
support this function under both names for the present; future
references to this function as GSS_Verify are deprecated.
Inputs:
o context_handle CONTEXT HANDLE,
o message OCTET STRING,
o per_msg_token OCTET STRING
Outputs:
o qop_state INTEGER,
o major_status INTEGER,
o minor_status INTEGER,
Return major_status codes:
o GSS_S_COMPLETE indicates that the message was successfully
verified.
o GSS_S_DEFECTIVE_TOKEN indicates that consistency checks performed
on the received per_msg_token failed, preventing further processing
from being performed with that token.
o GSS_S_BAD_SIG (GSS_S_BAD_MIC) indicates that the received
per_msg_token contains an incorrect integrity check for the message.
o GSS_S_DUPLICATE_TOKEN, GSS_S_OLD_TOKEN, GSS_S_UNSEQ_TOKEN, and
GSS_S_GAP_TOKEN values appear in conjunction with the optional per-
message replay detection features described in Section 1.2.3; their
semantics are described in that section.
o GSS_S_CONTEXT_EXPIRED indicates that context-related data items
have expired, so that the requested operation cannot be performed.
o GSS_S_NO_CONTEXT indicates that no context was recognized for the
input context_handle provided.
o GSS_S_FAILURE indicates that the context is recognized, but that
the GSS_VerifyMIC() operation could not be performed for reasons
unspecified at the GSS-API level.
Using the security context referenced by context_handle, verify that
the input per_msg_token contains an appropriate integrity check for
the input message, and apply any active replay detection or
sequencing features. Returns an indication of the quality-of-
protection applied to the processed message in the qop_state result.
Mechanisms which do not support per-message protection services
should return GSS_S_FAILURE if this routine is called.
2.3.3: GSS_Wrap call
Note: This call is functionally equivalent to the GSS_Seal call as
defined in previous versions of this specification. In the interests
of backward compatibility, it is recommended that implementations
support this function under both names for the present; future
references to this function as GSS_Seal are deprecated.
Inputs:
o context_handle CONTEXT HANDLE,
o conf_req_flag BOOLEAN,
o qop_req INTEGER, -- 0 specifies default QOP
o input_message OCTET STRING
Outputs:
o major_status INTEGER,
o minor_status INTEGER,
o conf_state BOOLEAN,
o output_message OCTET STRING -- caller must release with
-- GSS_Release_buffer()
Return major_status codes:
o GSS_S_COMPLETE indicates that the input_message was successfully
processed and that the output_message is ready for transmission.
o GSS_S_CONTEXT_EXPIRED indicates that context-related data items
have expired, so that the requested operation cannot be performed.
o GSS_S_NO_CONTEXT indicates that no context was recognized for the
input context_handle provided.
o GSS_S_BAD_QOP indicates that the provided QOP value is not
recognized or supported for the context.
o GSS_S_FAILURE indicates that the context is recognized, but that
the GSS_Wrap() operation could not be performed for reasons
unspecified at the GSS-API level.
Performs the data origin authentication and data integrity functions
of GSS_GetMIC(). If the input conf_req_flag is TRUE, requests that
confidentiality be applied to the input_message. Confidentiality may
not be supported in all mech_types or by all implementations; the
returned conf_state flag indicates whether confidentiality was
provided for the input_message. The qop_req parameter, interpretation
of which is discussed in Section 1.2.4, allows quality-of-protection
control.
When GSS_S_COMPLETE status is returned, the GSS_Wrap() call yields a
single output_message data element containing (optionally enciphered)
user data as well as control information.
Mechanisms which do not support per-message protection services
should return GSS_S_FAILURE if this routine is called.
2.3.4: GSS_Unwrap call
Note: This call is functionally equivalent to the GSS_Unseal call as
defined in previous versions of this specification. In the interests
of backward compatibility, it is recommended that implementations
support this function under both names for the present; future
references to this function as GSS_Unseal are deprecated.
Inputs:
o context_handle CONTEXT HANDLE,
o input_message OCTET STRING
Outputs:
o conf_state BOOLEAN,
o qop_state INTEGER,
o major_status INTEGER,
o minor_status INTEGER,
o output_message OCTET STRING -- caller must release with
-- GSS_Release_buffer()
Return major_status codes:
o GSS_S_COMPLETE indicates that the input_message was successfully
processed and that the resulting output_message is available.
o GSS_S_DEFECTIVE_TOKEN indicates that consistency checks performed
on the per_msg_token extracted from the input_message failed,
preventing further processing from being performed.
o GSS_S_BAD_SIG (GSS_S_BAD_MIC) indicates that an incorrect
integrity check was detected for the message.
o GSS_S_DUPLICATE_TOKEN, GSS_S_OLD_TOKEN, GSS_S_UNSEQ_TOKEN, and
GSS_S_GAP_TOKEN values appear in conjunction with the optional per-
message replay detection features described in Section 1.2.3; their
semantics are described in that section.
o GSS_S_CONTEXT_EXPIRED indicates that context-related data items
have expired, so that the requested operation cannot be performed.
o GSS_S_NO_CONTEXT indicates that no context was recognized for the
input context_handle provided.
o GSS_S_FAILURE indicates that the context is recognized, but that
the GSS_Unwrap() operation could not be performed for reasons
unspecified at the GSS-API level.
Processes a data element generated (and optionally enciphered) by
GSS_Wrap(), provided as input_message. The returned conf_state value
indicates whether confidentiality was applied to the input_message.
If conf_state is TRUE, GSS_Unwrap() has deciphered the input_message.
Returns an indication of the quality-of-protection applied to the
processed message in the qop_state result. GSS_Unwrap() performs the
data integrity and data origin authentication checking functions of
GSS_VerifyMIC() on the plaintext data. Plaintext data is returned in
output_message.
Mechanisms which do not support per-message protection services
should return GSS_S_FAILURE if this routine is called.
2.4: Support calls
This group of calls provides support functions useful to GSS-API
callers, independent of the state of established contexts. Their
characterization with regard to blocking or non-blocking status in