Network Working Group                                         E. Baize
Request for Comments: 2478                                   D. Pinkas
Category: Standards Track                                         Bull
                                                        December 1998


        The Simple and Protected GSS-API Negotiation Mechanism

Status of this Memo

  This document specifies an Internet standards track protocol for the
  Internet community, and requests discussion and suggestions for
  improvements.  Please refer to the current edition of the "Internet
  Official Protocol Standards" (STD 1) for the standardization state
  and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

  Copyright (C) The Internet Society (1998).  All Rights Reserved.

1.  ABSTRACT

  This document specifies a Security Negotiation Mechanism for the
  Generic Security Service Application Program Interface (GSS-API)
  which is described in [1].

  The GSS-API provides a generic interface which can be layered atop
  different security mechanisms such that if communicating peers
  acquire GSS-API credentials for the same security mechanism, then a
  security context may be established between them (subject to policy).
  However, GSS-API doesn't prescribe the method by which GSS-API peers
  can establish whether they have a common security mechanism.

  The Simple and Protected GSS-API Negotiation Mechanism defined here
  is a pseudo-security mechanism, represented by the object identifier
  iso.org.dod.internet.security.mechanism.snego (1.3.6.1.5.5.2) which
  enables GSS-API peers to determine in-band whether their credentials
  share common GSS-API security mechanism(s), and if so, to invoke
  normal security context establishment for a selected common security
  mechanism. This is most useful for applications that are based on
  GSS-API implementations which support multiple security mechanisms.

  This allows to negotiate different security mechanisms, different
  options within a given security mechanism or different options from
  several security mechanisms.






Baize & Pinkas              Standards Track                     [Page 1]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


  Once the common security mechanism is identified, the security
  mechanism may also negotiate mechanism-specific options during its
  context establishment. This will be inside the mechanism tokens, and
  invisible to the SPNEGO protocol.

  The simple and protected GSS-API mechanism negotiation is based on
  the following negotiation model : the initiator proposes one security
  mechanism or an ordered list of security mechanisms, the target
  either accepts the proposed security mechanism, or chooses one from
  an offered set, or rejects the proposed value(s). The target then
  informs the initiator of its choice.

  In its basic form this protocol requires an extra-round trip. Network
  connection setup is a critical performance characteristic of any
  network infrastructure and extra round trips over WAN links, packet
  radio networks, etc. really make a difference. In order to avoid such
  an extra round trip the initial security token of the preferred
  mechanism for the initiator may be embedded in the initial token. If
  the target preferred mechanism matches the initiator's preferred
  mechanism, no additional round trips are incurred by using the
  negotiation protocol.

  The simple and protected GSS-API mechanism negotiation provides a
  technique to protect the negotiation that must be used when the
  underlying mechanism selected by the target is capable of integrity
  protection.

  When all the mechanisms proposed by the initiator support integrity
  protection or when the selected mechanism supports integrity
  protection, then the negotiation mechanism becomes protected since
  this guarantees that the appropriate mechanism supported by both
  peers has been selected.

  The Simple and Protected GSS-API Negotiation Mechanism uses the
  concepts developed in the GSS-API specification [1]. The negotiation
  data is encapsulated in context-level tokens. Therefore, callers of
  the GSS-API do not need to be aware of the existence of the
  negotiation tokens but only of the new pseudo-security mechanism. A
  failure in the negotiation phase causes a major status code to be
  returned: GSS_S_BAD_MECH.











Baize & Pinkas              Standards Track                     [Page 2]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


2.  NEGOTIATION MODEL

2.1.  Negotiation description

  The model for security mechanism negotiation reuses a subset of the
  concepts specified in [2].

  Each OID represents one GSS-API mechanism or one variant of it.

   -  When one security mechanism is proposed by the initiator, it
      represents the only security mechanism supported or selected
      (when the additional APIs defined in the Annex A are used) by the
      initiator.

   -  When several security mechanisms are proposed by the initiator,
      they represent a set of security mechanisms supported or selected
      (when the additional APIs defined in the Annex A are used) by the
      initiator.

  The first negotiation token sent by the initiator contains an ordered
  list of mechanisms, a set of options (e.g. deleg, replay, conf flags)
  that should be supported by the selected mechanism and optionally the
  initial security token for the desired mechanism of the initiator
  (i.e. the first of the list).

  The first negotiation token sent by the target contains the result of
  the negotiation (accept_completed, accept_incomplete or reject) and,
  in case of accept, the agreed security mechanism. It may also include
  the response to the initial security token from the initiator, when
  the first proposed mechanism of the initiator has been selected. When
  the first mechanism is acceptable to the target,it should respond to
  the initial security token for the desired mechanism of the initiator
  when it is present. However, if this is not possible, the target can
  simply ignore it and omit the responseToken from the first reply.

  Implementations that can piggyback the initial token will be rewarded
  by faster connection setup.

  In case of a successful negotiation, the security mechanism
  represents the value suitable for the target, and picked up from the
  list offered by the initiator.  The policy by which the target
  chooses a mechanism is an implementation-specific local matter.  In
  the absence of other policy, the target should chose the first
  mechanism in the list for which valid credentials are available.

  Once a mechanism has been selected, the tokens specific to the
  selected mechanism are carried within the negotiation tokens (in the
  mechToken for the initiator and in the responseToken for the target).



Baize & Pinkas              Standards Track                     [Page 3]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


2.2.  Negotiation procedure

  The negotiation procedure is summarised as follows:

  (a) the GSS-API initiator invokes GSS_Init_sec_context as normal, but
      requests (either explicitly, with the negotiation mechanism, or
      through accepting a default, when the default is the negotiation
      mechanism) that the Simple and Protected GSS-API Negotiation
      Mechanism be used;

  (b) the initiator GSS-API implementation emits a negotiation token
      containing a list of supported security mechanisms for the
      credentials used for this context establishment, and optionally
      an initial security token for the first mechanism from that list
      (i.e. the preferred mechanism), and indicates
      GSS_S_CONTINUE_NEEDED status;

  (c) The GSS-API initiator sends the token to the target application;

  (d) The GSS-API target deposits the token through invoking
      GSS_Accept_sec_context. The target GSS-API implementation emits a
      negotiation token containing which if any of the proposed
      mechanisms it supports (or has selected).

  If the mechanism selected by the target matches the preferred
  mechanism identified by the initiator and the initiator provides a
  mechToken, the negotiation token response may contain also an initial
  security token from that mechanism.

  If the preferred mechanism is accepted, GSS_Accept_sec_context()
  indicates GSS_S_COMPLETE when unilateral or mutual authentication has
  been performed and involves a single token in either direction.

  If a proposed mechanism is accepted, and it was not the preferred
  mechanism, or if the first negotiation token sent by the initiator
  did not included a mechToken, then the negotiation token response
  sent by the target may contain also a response token from that
  mechanism which transmits mechanism-specific information (e.g. to
  transmit a certificate). The initiator may ignore such an initial
  token if it is not prepared to process it.

  If a proposed mechanism other than the preferred mechanism is
  accepted, or the preferred mechanism is accepted but involves
  multiple exchanges (e.g. challenge-response authentication), then
  GSS_Accept_sec_context() indicates GSS_S_CONTINUE_NEEDED status.






Baize & Pinkas              Standards Track                     [Page 4]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


  If the proposed mechanism(s) are rejected, GSS_Accept_sec_context()
  indicates GSS_S_BAD_MECH status. The security context initialisation
  has failed.

  (e) The GSS-API target returns the token to the initiator
      application;

  (f) The GSS-API initiator deposits the token through invoking
      GSS_Init_sec_context.

  GSS_Init_sec_context() may then indicate GSS_S_CONTINUE_NEEDED,
  GSS_S_COMPLETE or GSS_S_BAD_MECH status.

     The GSS_S_BAD_MECH status is returned when the negotiation token
     carries a reject result or when the negotiation token carries an
     accept result and the mechanism selected by the target is not
     included in the initial list sent by the initiator.

     The GSS_S_BAD_MIC status is returned when the selected mechanism
     supports a MIC token but the MIC computed over the list of
     mechanisms sent by the initiator is missing or incorrect.

     If the negotiation token carries a reject result, the context
     establishment is impossible. For example, a rejection will occur
     if the target doesn't support the initiator's proposed mechanism
     type(s). Upon failure of the mechanism negotiation procedure, the
     mech_type output parameter value is the negotiation mechanism
     type.

     The GSS_S_CONTINUE_NEEDED status is returned when the negotiation
     token carries an accept result and further tokens must be
     transferred in order to complete context establishment for the
     selected mechanism. In that case GSS_Init_sec_context() returns an
     initial context token as output_token (with the selected
     mechanism's context token encapsulated within that output_token).

     The initiator then sends the output_token to the target. The
     security context initialisation is then continued according to the
     standard GSS-API conventions for the selected mechanism, where the
     tokens of the selected mechanism are encapsulated until the
     GSS_S_COMPLETE is returned for both the initiator and the target.
     When GSS_S_CONTINUE_NEEDED is returned, the mech_type output
     parameter is not yet valid.

     When GSS_S_COMPLETE is returned, the mech_type output parameter
     indicates the selected mechanism. When the final negotiation token
     does not contain a MIC, the initiator GSS-API implementation must
     check the returned/selected mechanism is on the originally



Baize & Pinkas              Standards Track                     [Page 5]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


     submitted list of mechanisms and also verify that the selected
     mechanism is not able to support a MIC. When the final negotiation
     token contains a MIC over the initial mechanisms list sent by the
     initiator, the MIC must be verified.

  Note that the *_req_flag input parameters for context establishment
  are relative to the selected mechanism, as are the *_state output
  parameters. i.e., these parameters are not applicable to the
  negotiation process per se.

  The initiator GSS-API calling application may need to know when the
  negotiation exchanges were protected or not. For this, when
  GSS_S_COMPLETE is returned, it can simply test the integ_avail flag.
  When this flag is set it indicates that the negotiation was
  protected.

  On receipt of a negotiation token on the target side, a GSS-API
  implementation that does not support negotiation would indicate the
  GSS_S_BAD_MECH status as if a particular basic security mechanism had
  been requested but was not supported.

  When GSS_Acquire_cred is invoked with the negotiation mechanism as
  desired_mechs, an implementation-specific default credential is used
  to carry on the negotiation. A set of mechanisms as specified locally
  by the system administrator is then available for negotiation. If
  there is a desire for the caller to make its own choice, then an
  additional API has to be used (see Appendix A).

3.  DATA ELEMENTS

3.1.  Mechanism Type

  MechType::= OBJECT IDENTIFIER

  mechType
       Each security mechanism is as defined in [1].

3.2.  Negotiation Tokens

  The syntax of the negotiation tokens follows the InitialContextToken
  syntax defined in [1]. The security mechanism of the initial
  negotiation token is identified by the Object Identifier
  iso.org.dod.internet.security.mechanism.snego (1.3.6.1.5.5.2).








Baize & Pinkas              Standards Track                     [Page 6]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


3.2.1. Syntax

  This section specifies the syntax of the corresponding
  "innerContextToken" field for the first token and subsequent
  negotiation tokens. During the mechanism negociation, the
  "innerContextToken" field contains the ASN.1 structure
  "NegociationToken" given below, encoded using the DER encoding
  conventions.

NegotiationToken ::= CHOICE {
                             negTokenInit  [0]  NegTokenInit,
                             negTokenTarg  [1]  NegTokenTarg }

MechTypeList ::= SEQUENCE OF MechType

NegTokenInit ::= SEQUENCE {
                           mechTypes       [0] MechTypeList  OPTIONAL,
                           reqFlags        [1] ContextFlags  OPTIONAL,
                           mechToken       [2] OCTET STRING  OPTIONAL,
                           mechListMIC     [3] OCTET STRING  OPTIONAL
                        }

ContextFlags ::= BIT STRING {
       delegFlag       (0),
       mutualFlag      (1),
       replayFlag      (2),
       sequenceFlag    (3),
       anonFlag        (4),
       confFlag        (5),
       integFlag       (6)
}

negTokenInit
    Negotiation token sent by the initiator to the target, which
    contains, for the first token sent, one or more security mechanisms
    supported by the initiator (as indicated in the field mechTypes)
    and the service options (reqFlags) that are requested to establish
    the context. The context flags should be filled in from the
    req_flags parameter of init_sec_context().

    The mechToken field is optional for the first token sent that all
    target implementations would not have to support. However for those
    targets that do support piggybacking the initial mechToken, an
    optimistic negotiation response is possible. Otherwise the
    mechToken is used to carry the tokens specific to the mechanism
    selected.





Baize & Pinkas              Standards Track                     [Page 7]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


    The mechListMIC is an optional field. In the case that the chosen
    mechanism supports integrity, the initiator may optionally include
    a mechListMIC which is the result of a GetMIC of the MechTypes in
    the initial NegTokenInit and return GSS_S_COMPLETE.

    When the chosen mechanism uses an odd number of messages, the final
    mechanism token will be sent from the initiator to the acceptor. In
    this case, there is a tradeoff between using the optimal number of
    messages, or using an additional message from the acceptor to the
    initiator in order to give the initiator assurance that no
    modification of the initiator's mechanism list occurred. The
    implementation can choose which tradeoff to make (see section 4.2.2
    for further details for the processing of that field).

NegTokenTarg ::= SEQUENCE {
   negResult      [0] ENUMERATED {
                           accept_completed    (0),
                           accept_incomplete   (1),
                           reject              (2) }          OPTIONAL,
   supportedMech  [1] MechType                                OPTIONAL,
   responseToken  [2] OCTET STRING                            OPTIONAL,
   mechListMIC    [3] OCTET STRING                            OPTIONAL
}

negTokenTarg
    Negotiation token returned by the target to the initiator which
    contains, for the first token returned, a global negotiation result
    and the security mechanism selected (if any).

negResult
    The result accept_completed indicates that a context has been
    successfully established, while the result accept_incomplete
    indicates that additional token exchanges are needed.

         Note: For the case where (a) a single-token context setup is
         used and (b) the preferred mechanism does not support the
         integrity facility which would cause a mechListMIC to be
         generated and enclosed, this feature allows to make a
         difference between a mechToken sent by the initiator but not
         processed by the target (accept_incomplete) and a mechToken
         sent by the initiator and processed by the target
         (accept_completed).

    For those targets that support piggybacking the initial mechToken,
    an optimistic negotiation response is possible and includes in that
    case a responseToken which may continue the authentication exchange
    (e.g. when mutual authentication has been requested or when
    unilateral authentication requires several round trips). Otherwise



Baize & Pinkas              Standards Track                     [Page 8]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


    the responseToken is used to carry the tokens specific to the
    mechanism selected. For subsequent tokens (if any) returned by the
    target, negResult, and supportedMech are not present.

    For the last token returned by the target, the mechListMIC, when
    present, is a MIC computed over the MechTypes using the selected
    mechanism.

negResult
    Result of the negotiation exchange, specified by the target.

    This can be either :

         accept_completed
              The target accepts the preferred security mechanism,
               and the context is established for the target or,

         accept_incomplete
              The target accepts one of the proposed security
              mechanisms and further exchanges are necessary, or,

         reject
              The target rejects all the proposed security
              mechanisms.

supportedMech
    This field has to be present when negResult is "accept_completed"
    or "accept_incomplete". It is a choice from the mechanisms offered
    by the initiator.

responseToken
    This field may be used either to transmit the response to the
    mechToken when sent by the initiator and when the first mechanism
    from the list has been selected by the target or to carry the
    tokens specific to the selected security mechanism.

mechListMIC
    If the selected mechanism is capable of integrity protection, this
    field must be present in the last message of the negotiation,
    (i.e., when the underlying mechanism returns a non-empty token and
    a major status of GSS_S_COMPLETE); it contains the result of a
    GetMIC of the MechTypes field in the initial NegTokenInit.  It
    allows to verify that the list initially sent by the initiator has
    been received unmodified by the target.







Baize & Pinkas              Standards Track                     [Page 9]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


3.2.2. Processing of mechListMIC.

  If the mechanism selected by the negotiation does not support
  integrity, then no mechListMIC is included, otherwise a mechListMIC
  must be used and validated as indicated below.

  If the mechanism supports integrity and uses an even number of
  messages, then the target must compute a MIC as described above, and
  send this in the final NegTokenTarg along with the final mechToken.
  The initiator when receiving the last token must require that the
  mechListMIC field be present and valid. In the absence of a valid
  mechListMIC, the negotiation must fail as if the last context
  establishment token was invalid.

  In the case that the chosen mechanism supports integrity and uses an
  odd number of messages, the final mechanism token will be sent from
  the initiator to the target. In this case, there is a tradeoff
  between using the optimal number of messages, or using an additional
  message from the target to the initiator in order to give the
  initiator assurance that no modification of the initiator's mechanism
  list occurred. The implementation can choose which tradeoff to make.

  When generating the final NegTokenInit message, the NegTokenInit may
  optionally include a mechListMIC which is the result of a GetMIC of
  the MechTypes in the initial NegTokenInit and return GSS_S_COMPLETE.
  The target must check the presence of the MIC computed over the
  mechList sent in the initial NegTokenInit. Three cases may then be
  considered:

     1) If the mechListMIC is present and correct, then
        GSS_S_COMPLETE is returned to the target with no token; the
        context is established by the target.

     2) If the mechListMIC is present but invalid, then the context
        establishment must fail.  An error major status code is
        returned to the target.

     3) If the mechListMIC is not included in the final NegTokenInit,
        then GSS_S_COMPLETE must be returned to the target with a
        token. This token must be a NegTokenTarg, with a MIC included
        as described above, and no responseToken.  The application will
        then send this token back to the initiator, which must verify
        that the mechListMIC field is present and valid.








Baize & Pinkas              Standards Track                    [Page 10]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


        Note: If the MIC was originally sent by the initiator, but
               thenafter deleted by an attacker, the target will send
               back a token according to the description above, but the
               initiator will be unable to process that returned token
               and the context establishment must then fail.

4.  EXAMPLES : SECURITY MECHANISM NEGOTIATION

  Here are some examples of security mechanism negotiation between an
  initiator (I) and a target (T).

4.1.  Initial steps

  (I) supports two security mechanism types (GSS-MECH1 and GSS-MECH2).

  (I) invokes GSS_Init_sec_context() with :

  Input
    mech_type = OID for negotiation mechanism or NULL, if the
    negotiation mechanism is the default mechanism.

  Output
    major_status = GSS_S_CONTINUE_NEEDED
    output_token = negTokenInit

  The negotiation token (negTokenInit) contains two security mechanisms
  with :
    mechType = GSS-MECH1 or
    mechType = GSS-MECH2

  (I) sends to (T) the negotiation token.

4.2  Successful negotiation steps

  (T) supports GSS-MECH2
  (T) receives the negotiation token (negTokenInit) from (I)
  (T) invokes GSS_Accept_sec_context() with :

  Input
       input_token = negTokenInit

  Output
       major_status = GSS_S_CONTINUE_NEEDED
       output_token = negTokenTarg

  The negotiation token (negTokenTarg) contains :
       negResult = accept (the negotiation result)
       supportedMech : mechType = GSS-MECH2



Baize & Pinkas              Standards Track                    [Page 11]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


  (T) returns the negotiation token (negTokenTarg) to (I)
  (I) invokes GSS_Init_sec_context() with :

  Input
       input_token = negTokenTarg

  Output
       major_status = GSS_S_COMPLETE
       output_token = initialContextToken (initial context token
                                           for GSS-MECH2)
       mech_type = GSS-MECH2

  The subsequent steps are security mechanism specific, and work as
  specified in [1].  The output tokens from the security mechanism are
  encapsulated in a NegTokenTarg message (with the supportedMech field
  omitted, and the mechListMIC included with the last token).

4.3.  Failed negotiation steps

  (T) supports GSS-MECH3.
  (T) receives the negotiation token (negTokenInit) from (I)
  (T) invokes GSS_Accept_sec_context() with :

  Input
       input_token = negTokenInit

  Output
       major_status = GSS_S_BAD_MECH
       output_token = negTokenTarg

  The negotiation token (negTokenTarg) contains :

       negResult = reject (the negotiation result)

  (T) returns the negotiation token (negTokenTarg) to (I)
  (I) invokes GSS_Init_sec_context() with :

  Input
       input_token = negTokenTarg

  Output
       major_status = GSS_S_BAD_MECH

  The security context establishment has failed.







Baize & Pinkas              Standards Track                    [Page 12]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


4.4 Successful Negotiation with preferred mechanism info

  (I) supports two security mechanism types (GSS-MECH1 and GSS-MECH2).

  (I) invokes GSS_Init_sec_context() with :

  Input
       mech_type = OID for negotiation mechanism or NULL, if the
       negotiation mechanism is the default mechanism.

  Output
       major_status = GSS_S_CONTINUE_NEEDED
       output_token = negTokenInit

  The negotiation token (negTokenInit) contains two security mechanisms
  with :
       mechType = GSS-MECH1 or
       mechType = GSS-MECH2

       mechToken = output_token from GSS_Init_sec_context
      ( first mechType) as described in [1]

  (I) sends to (T) the negotiation token.

  (T) supports GSS-MECH1.
  (T) receives the negotiation token (negTokenInit) from (I)
  (T) invokes GSS_Accept_sec_context() with :

  Input
       input_token = negTokenInit

  Output
       major_status = GSS_S_CONTINUE_NEEDED
       output_token = negTokenTarg

  The negotiation token (negTokenTarg) contains :
       negResult = accept (the negotiation result)
       supportedMech : mechType = GSS-MECH1

       mechToken = output_token from
                        GSS_Accept_sec_context(mechToken )

  (T) returns the negotiation token (negTokenTarg) to (I)
  (I) invokes GSS_Init_sec_context() with :

  Input
       input_token = negTokenTarg




Baize & Pinkas              Standards Track                    [Page 13]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


  Output
       major_status = GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED as needed
       output_token = ContextToken (initial or subsequent context token
                      for GSS-MECH1)
       mech_type = GSS-MECH1

  Specific implementations of the protocol can support the optimistic
  negotiation by completing the security context establishment using the
  agreed upon mechanism as described in [1].  As described above in
  section 5.2, the output tokens from the security mechanisms are
  encapsulated in a NegTokenTarg message (with the negResult and
  supportedMech fields omitted, and the mechListMIC included with the
  last token).

5.  SECURITY CONSIDERATIONS

  When the mechanism selected by the target from the list supplied by
  the initiator supports integrity protection, then the negotiation is
  protected.

  When one of the mechanisms proposed by the initiator does not support
  integrity protection, then the negotiation is exposed to all threats
  a non secured service is exposed. In particular, an active attacker
  can force to use a security mechanism which is not the common
  preferred one (when multiple security mechanisms are shared between
  peers) but which is acceptable anyway to the target.

  In any case, the communicating peers may be exposed to the denial of
  service threat.

6.  ACKNOWLEDGMENTS

  Acknowledgments are due to Stephen Farrell of SSE, Marc Horowitz of
  Stonecast, John Linn of RSA Laboratories, Piers McMahon of Platinum
  Technology, Tom Parker of ICL and Doug Rosenthal of EINet, for
  reviewing earlier versions of this document and for providing useful
  inputs. Acknowledgments are also due to Peter Brundrett of Microsoft
  for his proposal for an optimistic negotiation, and for Bill
  Sommerfeld of Epilogue Technology for his proposal for protecting the
  negotiation.











Baize & Pinkas              Standards Track                    [Page 14]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


APPENDIX A


  GSS-API NEGOTIATION SUPPORT API

  In order to provide to a GSS-API caller (either the initiator or the
  target or both) the ability to choose among the set of supported
  mechanisms a reduced set of mechanisms for negotiation, two
  additional APIs are defined:

  GSS_Get_neg_mechs() indicates the set of security mechanisms
  available on the local system to the caller for negotiation.

  GSS_Set_neg_mechs() specifies the set of security mechanisms to be
  used on the local system by the caller for negotiation.

A.1.  GSS_Set_neg_mechs call

  Input:
       cred_handle          CREDENTIAL HANDLE
                            - NULL specifies default credentials
       mech_set             SET OF OBJECT IDENTIFIER

  Outputs:
       major_status INTEGER,
       minor_status INTEGER,

  Return major_status codes :
    GSS_S_COMPLETE indicates that the set of security mechanisms
    available for negotiation has been set to mech_set. GSS_S_FAILURE
    indicates that the requested operation could not be performed for
    reasons unspecified at the GSS-API level.

  Allows callers to specify the set of security mechanisms that may be
  negotiated with the credential identified by cred_handle. This call
  is intended for support of specialised callers who need to restrict
  the set of negotiable security mechanisms from the set of all
  security mechanisms available to the caller (based on available
  credentials). Note that if more than one mechanism is specified in
  mech_set, the order in which those mechanisms are specified implies a
  relative mechanism preference for the target.










Baize & Pinkas              Standards Track                    [Page 15]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


A.2.  GSS_Get_neg_mechs call

  Input:
       cred_handle    CREDENTIAL HANDLE
                      - NULL specifies default credentials

  Outputs:
       major_status INTEGER,
       minor_status INTEGER,
       mech_set     SET OF OBJECT IDENTIFIER

  Return major_status codes :
       GSS_S_COMPLETE indicates that the set of security mechanisms
       available for negotiation has been returned in
       mech_option_set.
       GSS_S_FAILURE indicates that the requested operation could not
       be performed for reasons unspecified at the GSS-API level.

  Allows callers to determine the set of security mechanisms available
  for negotiation with the credential identified by cred_handle. This
  call is intended for support of specialised callers who need to
  reduce the set of negotiable security mechanisms from the set of
  supported security mechanisms available to the caller (based on
  available credentials).

  Note: The GSS_Indicate_mechs() function indicates the full set of
  mechanism types available on the local system. Since this call has no
  input parameter, the returned set is not necessarily available for
  all credentials.

REFERENCES

  [1] Linn, J., "Generic Security Service Application Program
      Interface", RFC 2078, January 1997.

  [2] Standard ECMA-206, "Association Context Management including
      Security Context Management", December 1993.  Available on
      http://www.ecma.ch













Baize & Pinkas              Standards Track                    [Page 16]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


AUTHORS' ADDRESSES

  Eric Baize
  Bull - 300 Concord Road
  Billerica, MA 01821 - USA

  Phone: +1 978 294 61 37
  Fax: +1 978 294 61 09
  EMail: [email protected]


  Denis Pinkas
  Bull
  Rue Jean-Jaures
  BP 68
  78340 Les Clayes-sous-Bois - FRANCE

  Phone: +33 1 30 80 34 87
  Fax: +33 1 30 80 33 21
  EMail: [email protected]































Baize & Pinkas              Standards Track                    [Page 17]

RFC 2478             GSS-API Negotiation Mechanism         December 1998


Full Copyright Statement

  Copyright (C) The Internet Society (1998).  All Rights Reserved.

  This document and translations of it may be copied and furnished to
  others, and derivative works that comment on or otherwise explain it
  or assist in its implementation may be prepared, copied, published
  and distributed, in whole or in part, without restriction of any
  kind, provided that the above copyright notice and this paragraph are
  included on all such copies and derivative works.  However, this
  document itself may not be modified in any way, such as by removing
  the copyright notice or references to the Internet Society or other
  Internet organizations, except as needed for the purpose of
  developing Internet standards in which case the procedures for
  copyrights defined in the Internet Standards process must be
  followed, or as required to translate it into languages other than
  English.

  The limited permissions granted above are perpetual and will not be
  revoked by the Internet Society or its successors or assigns.

  This document and the information contained herein is provided on an
  "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
























Baize & Pinkas              Standards Track                    [Page 18]