diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc2479.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2479.txt')
-rw-r--r-- | doc/rfc/rfc2479.txt | 3923 |
1 files changed, 3923 insertions, 0 deletions
diff --git a/doc/rfc/rfc2479.txt b/doc/rfc/rfc2479.txt new file mode 100644 index 0000000..8413bca --- /dev/null +++ b/doc/rfc/rfc2479.txt @@ -0,0 +1,3923 @@ + + + + + + +Network Working Group C. Adams +Request for Comments: 2479 Entrust Technologies +Category: Informational December 1998 + + + Independent Data Unit Protection Generic Security Service + Application Program Interface (IDUP-GSS-API) + +Status of this Memo + + This memo provides information for the Internet community. It does + not specify an Internet standard of any kind. Distribution of this + memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (1998). All Rights Reserved. + +ABSTRACT + + The IDUP-GSS-API extends the GSS-API [RFC-2078] for applications + requiring protection of a generic data unit (such as a file or + message) in a way which is independent of the protection of any other + data unit and independent of any concurrent contact with designated + "receivers" of the data unit. Thus, it is suitable for applications + such as secure electronic mail where data needs to be protected + without any on-line connection with the intended recipient(s) of that + data. The protection offered by IDUP includes services such as data + origin authentication with data integrity, data confidentiality with + data integrity, and support for non-repudiation services. Subsequent + to being protected, the data unit can be transferred to the + recipient(s) - or to an archive - perhaps to be processed + ("unprotected") only days or years later. + + Throughout the remainder of this document, the "unit" of data + described in the above paragraph will be referred to as an IDU + (Independent Data Unit). The IDU can be of any size (the application + may, if it wishes, split the IDU into pieces and have the protection + computed a piece at a time, but the resulting protection token + applies to the entire IDU). However, the primary characteristic of + an IDU is that it represents a stand-alone unit of data whose + protection is entirely independent of any other unit of data. If an + application protects several IDUs and sends them all to a single + receiver, the IDUs may be unprotected by that receiver in any order + over any time span; no logical connection of any kind is implied by + the protection process itself. + + + + + +Adams Informational [Page 1] + +RFC 2479 IDUP-GSS-API December 1998 + + + As with RFC-2078, this IDUP-GSS-API definition provides security + services to callers in a generic fashion, supportable with a range of + underlying mechanisms and technologies and hence allowing source- + level portability of applications to different environments. This + specification defines IDUP-GSS-API services and primitives at a level + independent of underlying mechanism and programming language + environment, and is to be complemented by other, related + specifications: + + - documents defining specific parameter bindings for particular + language environments; + - documents defining token formats, protocols, and procedures to + be implemented in order to realize IDUP-GSS-API services atop + particular security mechanisms. + +TABLE OF CONTENTS + + 1. IDUP-GSS-API Characteristics and Concepts .................. 3 + 1.1. IDUP-GSS-API Constructs .................................. 5 + 1.1.1. Credentials ............................................ 5 + 1.1.2. Tokens ................................................. 5 + 1.1.3. Security Environment ................................... 6 + 1.1.4. Mechanism Types ........................................ 6 + 1.1.5. Naming ................................................. 6 + 1.1.6. Channel Bindings ....................................... 6 + 1.2. IDUP-GSS-API Features and Issues ......................... 6 + 1.2.1. Status Reporting ....................................... 6 + 1.2.2. Per-IDU Security Service Availability .................. 9 + 1.2.3. Per-IDU Replay Detection and Sequencing ................ 9 + 1.2.4. Quality of Protection .................................. 9 + 1.2.5. The Provision of Time .................................. 12 + 2. Interface Descriptions ..................................... 13 + 2.1. Credential management calls .............................. 14 + 2.1.1. Relationship to GSS-API ................................ 14 + 2.2. Environment-level calls .................................. 15 + 2.2.1. Relationship to GSS-API ................................ 15 + 2.2.2. IDUP_Establish_Env call ................................ 15 + 2.2.3. IDUP_Abolish_Env call .................................. 19 + 2.2.4. IDUP_Inquire_Env call .................................. 19 + 2.3. Per-IDU protection/unprotection calls .................... 20 + 2.3.1. Relationship to GSS-API ................................ 20 + 2.3.2. The "SE" Calls ......................................... 21 + 2.3.3. The "EV" Calls ......................................... 27 + 2.3.4. The "GP" Calls ......................................... 36 + 2.4. Special-Purpose calls .................................... 47 + 2.4.1. Relationship to GSS-API ................................ 47 + 2.4.2. IDUP_Form_Complete_PIDU ................................ 48 + 2.5. Support calls ............................................ 49 + + + +Adams Informational [Page 2] + +RFC 2479 IDUP-GSS-API December 1998 + + + 2.5.1. Relationship to GSS-API ................................ 49 + 2.5.2. IDUP_Acquire_Cred_With_Auth ............................ 49 + 2.5.3. IDUP_Get_Token_Details ................................. 50 + 2.5.4. IDUP_Get_Policy_Info ................................... 53 + 2.5.5. IDUP_Cancel_Multibuffer_Op ............................. 55 + 3. Related Activities ......................................... 55 + 4. Acknowledgments ............................................ 56 + 5. Security Considerations .................................... 56 + 6. References ........................................... 56 + 7. Author's Address ........................................... 56 + Appendix A Mechanism-Independent Token Format ................. 57 + Appendix B Examples of IDUP Use ............................... 58 + Full Copyright Statement ....................................... 70 + +1. IDUP-GSS-API Characteristics and Concepts + + The paradigm within which IDUP-GSS-API operates is as follows. An + IDUP-GSS-API caller is any application that works with IDUs, calling + on IDUP-GSS-API in order to protect its IDUs with services such as + data origin authentication with integrity (DOA), confidentiality with + integrity (CONF), and/or support for non-repudiation (e.g., evidence + generation, where "evidence" is information that either by itself, or + when used in conjunction with other information, is used to establish + proof about an event or action (note: the evidence itself does not + necessarily prove truth or existence of something, but contributes to + establish proof) -- see [ISO/IEC] for fuller discussion regarding + evidence and its role in various types of non-repudiation). An + IDUP-GSS-API caller passes an IDU to, and accepts a token from, its + local IDUP-GSS-API implementation, transferring the resulting + protected IDU (P-IDU) to a peer or to any storage medium. When a P- + IDU is to be "unprotected", it is passed to an IDUP-GSS-API + implementation for processing. The security services available + through IDUP-GSS-API in this fashion are implementable over a range + of underlying mechanisms based on secret-key and/or public-key + cryptographic technologies. + + During the protection operation, the input IDU buffers may be + modified (for example, the data may be encrypted or encoded in some + way) or may remain unchanged. In any case, the result is termed a + "M-IDU" (Modified IDU) in order to distinguish it from the original + IDU. Depending on the desire of the calling application and the + capabilities of the underlying IDUP mechanism, the output produced by + the protection processing may or may not encapsulate the M-IDU. Thus, + the P-IDU may be the contents of a single output parameter (if + encapsulation is done) or may be the logical concatenation of an + unencapsulated token parameter and a M-IDU parameter (if + encapsulation is not done). In the latter case, the protecting + application may choose whatever method it wishes to concatenate or + + + +Adams Informational [Page 3] + +RFC 2479 IDUP-GSS-API December 1998 + + + combine the unencapsulated token and the M-IDU into a P-IDU, provided + the unprotecting application knows how to de-couple the P-IDU back + into its component parts prior to calling the IDUP unprotection set + of functions. + + It is expected that any output buffer returned by IDUP (i.e., P-IDU + or portion thereof) is ready for immediate transmission to the + intended receiver(s) by the calling application, if this is desired. + In other words, an application wishing to transmit data buffers as + they appear from IDUP should not be unduly restricted from doing so + by the underlying mechanism. + + The IDUP-GSS-API separates the operation of initializing a security + environment (the IDUP_Establish_Env() call) from the operations of + providing per-IDU protection, for IDUs subsequently protected in + conjunction with that environment. Per-IDU protection and + unprotection calls provide DOA, CONF, evidence, and other services, + as requested by the calling application and as supported by the + underlying mechanism. + + The following paragraphs provide an example illustrating the + dataflows involved in the use of the IDUP-GSS-API by the sender and + receiver of a P-IDU in a mechanism-independent fashion. The example + assumes that credential acquisition has already been completed by + both sides. Furthermore, the example does not cover all possible + options available in the protection/unprotection calls. + + The sender first calls IDUP_Establish_Env() to establish a + security environment. Then, for the IDU to be protected the + sender calls the appropriate protection calls (SE, EV, or GP) to + perform the IDU protection. The resulting P-IDU, which may + (depending on whether or not encapsulation was chosen/available) + be either the token itself or the logical concatenation of the + token and the M-IDU, is now ready to be sent to the target. The + sender then calls IDUP_Abolish_Env() to flush all environment- + specific information. + + The receiver first calls IDUP_Establish_Env() to establish a + security environment in order to unprotect the P-IDU. Then, for + the received P-IDU the receiver calls the appropriate unprotection + calls (SE, EV, or GP (known a priori, or possibly determined + through the use of the IDUP_Get_token_details call)) to perform + the P-IDU unprotection. The receiver then calls + IDUP_Abolish_Env() to flush all environment-specific information. + + It is important to note that absolutely no synchronization is implied + or expected between the data buffer size used by the sender as input + to the protection calls, the data buffer size used by the receiver as + + + +Adams Informational [Page 4] + +RFC 2479 IDUP-GSS-API December 1998 + + + input to the unprotection calls, and the block sizes required by the + underlying protection algorithms (integrity and confidentiality). All + these sizes are meant to be independent; furthermore, the data buffer + sizes used for the protection and unprotection calls are purely a + function of the local environment where the calls are made. + + The IDUP-GSS-API design assumes and addresses several basic goals, + including the following. + + Mechanism independence: The IDUP-GSS-API defines an interface to + cryptographically implemented security services at a generic level + which is independent of particular underlying mechanisms. For + example, IDUP-GSS-API-provided services can be implemented by + secret-key technologies or public-key approaches. + + Protocol environment independence: The IDUP-GSS-API is independent + of the communications protocol suites which may be used to + transfer P-IDUs, permitting use in a broad range of protocol + environments. + + Protocol association independence: The IDUP-GSS-API's security + environment construct has nothing whatever to do with + communications protocol association constructs, so that IDUP-GSS- + API services can be invoked by applications, wholly independent of + protocol associations. + + Suitability for a range of implementation placements: IDUP-GSS-API + clients are not constrained to reside within any Trusted Computing + Base (TCB) perimeter defined on a system where the IDUP-GSS-API is + implemented; security services are specified in a manner suitable + for both intra-TCB and extra-TCB callers. + +1.1. IDUP-GSS-API Constructs + + This section describes the basic elements comprising the IDUP-GSS- + API. + +1.1.1. Credentials + + Credentials in IDUP-GSS-API are to be understood and used as + described in GSS-API [RFC-2078]. + +1.1.2. Tokens + + Tokens in IDUP-GSS-API are to be understood and used as described in + GSS-API [RFC-2078] with the exception that there are no context-level + tokens generated by IDUP-GSS-API. The IDUP-GSS-API token may + (depending on the underlying mechanism) encapsulate the M-IDU or may + + + +Adams Informational [Page 5] + +RFC 2479 IDUP-GSS-API December 1998 + + + be logically concatenated with the M-IDU prior to transfer to a + target; furthermore, for some evidence services the token may be sent + independently of any other data transfer. + +1.1.3. Security Environment + + The "security environment" in IDUP-GSS-API is entirely different from + the concept of security contexts used in GSS-API [RFC-2078]. Here, a + security environment exists within a calling application (that is, it + is purely local to the caller) for the purpose of protecting or + unprotecting one or more IDUs using a particular caller credential or + set of credentials. In GSS-API, on the other hand, a security + context exists between peers (the initiator and the target) for the + purpose of protecting, in real time, the data that is exchanged + between them. Although they are different concepts, the env_handle + in IDUP-GSS-API is similar to the context_handle in GSS-API in that + it is a convenient way of tying together the entire process of + protecting or unprotecting one or more IDUs using a particular + underlying mechanism. As with the GSS-API security contexts, a + caller can initiate and maintain multiple environments using the same + or different credentials. + +1.1.4. Mechanism Types + + Mechanism types in IDUP-GSS-API are to be understood and used as + described in GSS-API [RFC-2078]. + +1.1.5. Naming + + Naming in IDUP-GSS-API is to be understood and used as described in + GSS-API [RFC-2078]. + +1.1.6. Channel Bindings + + The concept of channel bindings discussed in GSS-API [RFC-2078] is + not relevant to the IDUP-GSS-API. + +1.2. IDUP-GSS-API Features and Issues + + This section describes aspects of IDUP-GSS-API operations and of the + security services which the IDUP-GSS-API provides. It also provides + commentary on design issues. + +1.2.1. Status Reporting + + Status reporting in IDUP-GSS-API is to be understood and used as + described in GSS-API [RFC-2078], with the addition of a number of + IDUP-specific status codes. Descriptions of the major_status codes + + + +Adams Informational [Page 6] + +RFC 2479 IDUP-GSS-API December 1998 + + + used in IDUP are provided in Table 1. Codes that are informatory + (i.e., that do not cause the requested operation to fail) are + indicated with the symbol "(I)". + + As with GSS-API, minor_status codes, which provide more detailed + status information than major_status codes, and which may include + status codes specific to the underlying security mechanism, are not + specified in this document. + + Table 1: IDUP-GSS-API Major Status Codes + + GSS_S_BAD_MECH indicates that a mech_type unsupported by the + IDUP_GSS-API implementation was requested, causing the environment + establishment operation to fail. + + GSS_S_BAD_QOP indicates that the provided qop_alg value is not + recognized or supported for the environment. + + GSS_S_BAD_MIC indicates that the received P-IDU contains an + incorrect integrity field (e.g., signature or MAC) for the data. + + GSS_S_COMPLETE indicates that the requested operation was + successful. + + GSS_S_CREDENTIALS_EXPIRED indicates that the credentials + associated with this operation have expired, so that the requested + operation cannot be performed. + + GSS_S_DEFECTIVE_CREDENTIAL indicates that consistency checks + performed on the credential structure referenced by + claimant_cred_handle failed, preventing further processing from + being performed using that credential structure. + + GSS_S_DEFECTIVE_TOKEN indicates that consistency checks performed + on the received P-IDU failed, preventing further processing from + being performed. + + GSS_S_FAILURE indicates that the requested operation could not be + accomplished for reasons unspecified at the IDUP-GSS-API level, + and that no interface-defined recovery action is available. + + GSS_S_NO_CRED indicates that no environment was established, + either because the input cred_handle was invalid or because the + caller lacks authorization to access the referenced credentials. + + IDUP_S_BAD_DOA_KEY indicates that the key used to provide IDU data + origin auth. / integ. has either expired or been revoked. + + + + +Adams Informational [Page 7] + +RFC 2479 IDUP-GSS-API December 1998 + + + IDUP_S_BAD_ENC_IDU indicates that decryption of the received IDU + cannot be completed because the encrypted IDU was + invalid/defective (e.g., the final block was short or had + incorrect padding). + + IDUP_S_BAD_KE_KEY indicates that the key used to establish a key + for confidentiality purposes between originator and target has + either expired or been revoked. + + IDUP_S_BAD_TARG_INFO indicates that the full set of supplied + information regarding the target(s) is invalid or is insufficient + for the protection of an IDU, so P-IDU cannot be created. + + IDUP_S_DEFECTIVE_VERIF indicates that consistency checks performed + on Service_Verification_Info failed, preventing further processing + from being performed with that parameter. + + IDUP_S_ENCAPSULATION_UNAVAIL (I) indicates that the underlying + mechanism does not support encapsulation of the M-IDU into the + token. + + IDUP_S_INAPPROPRIATE_CRED indicates that the credentials supplied + do not contain the information necessary for P-IDU unprotection. + + IDUP_S_INCOMPLETE (I) indicates that the unprotection of the P-IDU + is not yet complete (i.e., a determination cannot yet be made on + the validity of the P-IDU). The application should call + IDUP_Form_Complete_PIDU and then should call this function again + with the complete P-IDU. + + IDUP_S_INCONSISTENT_PARAMS indicates that the supplied parameters + are inconsistent (e.g., only one or the other of two parameters + may be supplied, but both have been input). + + IDUP_S_MORE_OUTBUFFER_NEEDED (I) indicates that the output buffer + supplied is too small to hold the generated data. The application + should continue calling this routine (until GSS_S_COMPLETE is + returned) in order to get all remaining output data. + + IDUP_S_MORE_PIDU_NEEDED (I) indicates that not enough of the P-IDU + has been input yet for the completion of StartUnprotect. The + application should call this routine again with another buffer of + P-IDU in partial(initial)_pidu_buffer. + + IDUP_S_NO_ENV indicates that no valid environment was recognized + for the env_handle provided. + + + + + +Adams Informational [Page 8] + +RFC 2479 IDUP-GSS-API December 1998 + + + IDUP_S_NO_MATCH indicates that Service_Verification_Info (or + evidence_check) and the P-IDU to be verified do not match. + + IDUP_S_REQ_TIME_SERVICE_UNAVAIL indicates that the time service + requested (TTIME or UTIME) is not available in the environment. + + IDUP_S_SERVICE_UNAVAIL indicates that the underlying mechanism + does not support the service requested. + + IDUP_S_SERV_VERIF_INFO_NEEDED (I) indicates that the + Service_Verification_Info parameter bundle must be input in order + for service verification to proceed. The output parameter + service_verification_info_id contains an identifier which may be + used by the calling application to locate the necessary + information. + + IDUP_S_UNKNOWN_OPER_ID indicates that the input prot_oper_id value + is not recognized or supported in the underlying mechanism. + +1.2.2. Per-IDU Security Service Availability + + Per-IDU security service availability in IDUP-GSS-API is to be + understood and used as described in GSS-API [RFC-2078], with the + exception that combinations of services requested by the calling + application and supported by the underlying mechanism may be applied + simultaneously to any IDU (true for both the SE and the EV calls, but + true in the fullest sense for the GP calls). + + GSS-API callers desiring per-message security services should check + the relevant service OBJECT IDs at environment establishment time to + ensure that what is available in the established environment is + suitable for their security needs. + +1.2.3. Per-IDU Replay Detection and Sequencing + + The concept of per-IDU replay detection and sequencing discussed in + GSS-API [RFC-2078] is not relevant to the IDUP-GSS-API. + +1.2.4. Quality of Protection + + The concept of QOP control in IDUP-GSS-API is to be understood + essentially as described in GSS-API [RFC-2078]. However, the actual + description and use of the QOP parameter is given as follows. + + The qop_algs parameter for IDUP is defined to be a 32-bit unsigned + integer with the following bit-field assignments: + + + + + +Adams Informational [Page 9] + +RFC 2479 IDUP-GSS-API December 1998 + + + 31 (MSB) (LSB) 0 + ---------------------------------------------- + | U(19) | TS(5) | IA(4) | MA(4) | + ---------------------------------------------- + + where + + U is a 19-bit Unspecified field (available for future + use/expansion) -- must be set to zero; + + TS is a 5-bit Type Specifier (a semantic qualifier whose value + specifies the type of algorithm which may be used to protect the + corresponding IDU -- see below for details); + + IA is a 4-bit field enumerating Implementation-specific + Algorithms; and + + MA is a 4-bit field enumerating Mechanism-defined Algorithms. + + The interpretation of the qop_algs parameter is as follows. The MA + field is examined first. If it is non-zero then the algorithm used + to protect the IDU is the mechanism-specified algorithm corresponding + to that integer value. + + If MA is zero then IA is examined. If this field value is non-zero + then the algorithm used to protect the IDU is the implementation- + specified algorithm corresponding to that integer value. Note that + use of this field may hinder portability since a particular value may + specify one algorithm in one implementation of the mechanism and may + not be supported or may specify a completely different algorithm in + another implementation of the mechanism. + + Finally, if both MA and IA are zero then TS is examined. A value of + zero for TS specifies the default algorithm for the established + mechanism. A non-zero value for TS corresponds to a particular + algorithm qualifier and selects any algorithm from the mechanism + specification which satisfies that qualifier (which actual algorithm + is selected is an implementation choice; the calling application need + not be aware of the choice made). + + The following TS values (i.e., algorithm qualifiers) are specified; + other values may be added in the future. + + + + + + + + + +Adams Informational [Page 10] + +RFC 2479 IDUP-GSS-API December 1998 + + + When qop_algs is used to select a confidentiality algorithm: + + 00000 (0) = default confidentiality algorithm + 00001 (1) = IDUP_SYM_ALG_STRENGTH_STRONG + 00010 (2) = IDUP_SYM_ALG_STRENGTH_MEDIUM + 00011 (3) = IDUP_SYM_ALG_STRENGTH_WEAK + 11111 (31) = IDUP_NO_CONFIDENTIALITY + + When qop_algs is used to select a DOA/integrity algorithm: + + 00000 (0) = default integrity algorithm + 00001 (1) = IDUP_INT_ALG_DIG_SIGNATURE + (integrity provided through a digital signature) + 00010 (2) = IDUP_INT_ALG_NON_DIG_SIGNATURE + (integrity without a dig. sig. (e.g., with a MAC)) + 11111 (31) = IDUP_NO_INTEGRITY + + Clearly, qualifiers such as strong, medium, and weak are debatable + and likely to change with time, but for the purposes of this version + of the specification we define these terms as follows. A + confidentiality algorithm is "weak" if the effective key length of + the cipher is 40 bits or less; it is "medium-strength" if the + effective key length is strictly between 40 and 80 bits; and it is + "strong" if the effective key length is 80 bits or greater. + ("Effective key length" describes the computational effort required + to break a cipher using the best-known cryptanalytic attack against + that cipher.) + + A five-bit TS field allows up to 30 qualifiers for each of + confidentiality and integrity (since "0" is reserved for "default" + and "31" is reserved for "none", as shown above). This document + specifies three for confidentiality and two for integrity, leaving a + lot of room for future specification. Suggestions of qualifiers such + as "fast", "medium-speed", and "slow" have been made, but such terms + are difficult to quantify (and in any case are platform- and + processor-dependent), and so have been left out of this initial + specification. The intention is that the TS terms be quantitative, + environment-independent qualifiers of algorithms, as much as this is + possible. + + Use of the qop_algs parameter as defined above is ultimately meant to + be as follows. + + - TS values are specified at the IDUP-GSS-API level and are + therefore portable across mechanisms. Applications which know + nothing about algorithms are still able to choose "quality" of + protection for their message tokens. + + + + +Adams Informational [Page 11] + +RFC 2479 IDUP-GSS-API December 1998 + + + - MA values are specified at the mechanism level and are therefore + portable across implementations of a mechanism. + + - IA values are specified at the implementation level (in user + documentation, for example) and are therefore typically non- + portable. An application which is aware of its own mechanism + implementation and the mechanism implementation of its intended + P-IDU recipient, however, is free to use these values since they + will be perfectly valid and meaningful for protecting IDUs between + those entities. + + The receiver of a P-IDU must pass back to its calling application (in + IDUP_Start_Unprotect()) a qop_algs parameter with all relevant fields + set. For example, if triple-DES has been specified by a mechanism as + algorithm 8, then a receiver of a triple-DES-protected P-IDU must + pass to its application (TS=1, IA=0, MA=8). In this way, the + application is free to read whatever part of the qop_algs parameter + it understands (TS or IA/MA). + +1.2.5. The Provision of Time + + IDUP mechanisms should make provision in their protocols for the + carrying of time information from originator to target(s). That is, + a target (a legitimate recipient) should get some indication during + unprotection regarding the time at which the protection operation + took place. This is particularly important if the mechanism offers + non-repudiation services because in some cases evidence verification + may only be achievable if the time at which the evidence was + generated is known. + + Depending upon the platform and resources available to the + implementation, an IDUP environment may have access to a source of + trusted (secure) time, untrusted (local) time, both kinds of time, or + no time. OBJECT IDs indicating such availability are returned by the + IDUP_Establish_Env() call. When starting a protection operation, an + application may specify which time services it wishes to have applied + to the IDU. Similarly, for unprotection, an application may specify + which kind of time (if any) to consult when the validity of the P-IDU + is to be established. Specifying both kinds of time is interpreted + to mean that the calling application does not care which kind of time + is used. + + The IDUP calls which use a time parameter specify the type of that + parameter to be INTEGER. This INTEGER is defined in all cases to be + the number of seconds which have elapsed since midnight, January 1, + 1970, coordinated universal time. + + + + + +Adams Informational [Page 12] + +RFC 2479 IDUP-GSS-API December 1998 + + +2. Interface Descriptions + + This section describes the IDUP-GSS-API's operational interface, + dividing the set of calls offered into five groups. Credential + management calls are related to the acquisition and release of + credentials by API callers. Environment-level calls are related to + the management of the security environment by an API caller. Per-IDU + calls are related to the protection or unprotection of individual + IDUs in established security environments. Special-purpose calls + deal with unusual or auxiliary evidence generation/verification + requirements. Support calls provide extra functions useful to IDUP- + GSS-API callers. Table 2 groups and summarizes the calls in tabular + fashion. + + Table 2: IDUP-GSS-API Calls + + CREDENTIAL MANAGEMENT + (see the calls given in Section 2.1 of GSS-API [RFC-2078]) + + ENVIRONMENT-LEVEL CALLS + IDUP_Establish_Env + IDUP_Abolish_Env + IDUP_Inquire_Env + + PER-IDU CALLS + SE (SIGN,ENCRYPT) CALLS + IDUP_SE_SingleBuffer_Protect + IDUP_SE_SingleBuffer_Unprotect + IDUP_SE_MultiBuffer_StartProtect + IDUP_SE_MultiBuffer_EndProtect + IDUP_SE_MultiBuffer_StartUnprotect + IDUP_SE_MultiBuffer_EndUnprotect + IDUP_SE_Process_Buffer + EV (EVIDENCE) CALLS + IDUP_EV_SingleBuffer_Generate + IDUP_EV_SingleBuffer_Verify + IDUP_EV_MultiBuffer_StartGenerate + IDUP_EV_MultiBuffer_EndGenerate + IDUP_EV_MultiBuffer_StartVerify + IDUP_EV_MultiBuffer_EndVerify + IDUP_EV_Process_Buffer + GP (GENERAL PROTECTION) CALLS + IDUP_Start_Protect + IDUP_Protect + IDUP_End_Protect + IDUP_Start_Unprotect + IDUP_Unprotect + IDUP_End_Unprotect + + + +Adams Informational [Page 13] + +RFC 2479 IDUP-GSS-API December 1998 + + + SPECIAL-PURPOSE CALLS (might not be supported by all mechanisms) + IDUP_Form_Complete_PIDU + + SUPPORT CALLS + IDUP_Acquire_cred_with_auth + IDUP_Get_Token_Details + IDUP_Get_Policy_Info + IDUP_Cancel_Multibuffer_Op + (see also the calls given in Section 2.4 of GSS-API [RFC-2078]) + + In terms of conformance to this specification, IDUP-GSS-API + implementations must support the credential management calls, the + environment-level calls, some subset of the per-IDU calls, and the + support calls (except where explicitly stated otherwise in Section + 2.5). The subset of per-IDU calls supported will depend upon the + underlying mechanisms supported and will typically be the SE calls, + or the EV calls, or both. As stated in Section 2.3.2.1, + implementations are encouraged to support the more powerful GP calls + to anticipate the future needs of applications developers, but this + is not required for conformance. + +2.1. Credential management calls + +2.1.1. Relationship to GSS-API + + Credential management in IDUP-GSS-API is to be understood and used as + described in GSS-API [RFC-2078]. The calls given in Section 2.1 of + GSS-API (including all associated parameters) are unchanged, although + the interpretation of the cred_usage parameter in the GSS-API calls + for IDUP purposes is as follows. + + ENCRYPT_ONLY 8 + DECRYPT_ONLY 16 + SIGN_ONLY 32 + VERIFY_ONLY 64 + + The values above may be logically OR'ed together in any desired + combination to restrict credential usage (where OR'ing all values + results in NO_RESTRICTION). Future possible values for this + parameter are for further study. + + The call IDUP_Acquire_cred_with_auth has been added as a support call + in this specification to permit authenticated credential acquirement; + see Section 2.5.2 for details. + + + + + + + +Adams Informational [Page 14] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.2. Environment-level calls + + This group of calls is devoted to the establishment and management of + an environment for the purpose of IDU protection and unprotection. + Before protecting or unprotecting any IDU, an application must call + IDUP_Establish_Env() to initialize environment information and select + the underlying IDUP-GSS mechanism to be used. A series of protection + or unprotection calls is made to process each IDU, the protection + calls resulting in a P-IDU for each. Finally, IDUP_Abolish_Env() is + called to flush all environment information. + + Semantically, acquiring credentials and establishing an environment + is (in many cases) analogous to logging in to a system -- it + authenticates a local user to the system and gives that user access + to a set of operations which can be performed. + +2.2.1. Relationship to GSS-API + + The set of calls described in this section is used in place of the + calls described in Section 2.2 of GSS-API [RFC-2078], since those + calls are specific to a session-oriented environment. + +2.2.2. IDUP_Establish_Env call + + Inputs: o claimant_cred_handle CREDENTIAL HANDLE, + -- NULL parameter specifies "use default" + + o req_mech_type OBJECT IDENTIFIER, + -- NULL parameter specifies "use default" + o req_environmentPolicies EnvironmentPolicies, + -- NULL parameter specifies "use default" + o req_services SET OF OBJECT IDENTIFIER, + -- GSS_C_NO_OID_SET requests full set of services available + -- for req_mech_type + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o env_handle ENVIRONMENT HANDLE, + o actual_mech_type OBJECT IDENTIFIER, + -- actual mechanism always indicated, never NULL + o actual_environmentPolicies EnvironmentPolicies, + -- actual values always indicated, never NULL + o ret_services SET OF OBJECT IDENTIFIER, + + Return major_status codes: + o GSS_S_COMPLETE + -- environment-level information was successfully initialized, + + + +Adams Informational [Page 15] + +RFC 2479 IDUP-GSS-API December 1998 + + + -- and IDU / P-IDU processing can begin. + o GSS_S_DEFECTIVE_CREDENTIAL + o GSS_S_NO_CRED + o GSS_S_CREDENTIALS_EXPIRED + -- the credentials provided through claimant_cred_handle are + -- no longer valid, so environment cannot be established. + o GSS_S_BAD_MECH + o GSS_S_FAILURE + + The following structures are defined to facilitate environment policy + input and output: + + EnvironmentPolicies ::= SEQUENCE { + confPolicy [0] PolicyAndTime OPTIONAL, + -- NULL parameter (on input) specifies "use default" + integPolicy [1] PolicyAndTime OPTIONAL, + -- NULL parameter (on input) specifies "use default" + evidencePolicy [2] PolicyAndTime OPTIONAL } + -- NULL parameter (on input) specifies "use default" + + PolicyAndTime ::= SEQUENCE { + policy OBJECT IDENTIFIER, + -- this environment-level policy identifier is separate from + -- the policy provisions connected with credentials, if they exist + time INTEGER + -- on input: the policy rules available at the specified time + -- on output: the time at which the policy rules came into effect + -- (defined to be the number of seconds elapsed since midnight, + -- January 1, 1970, coordinated universal time) + endTime INTEGER OPTIONAL } + -- on input: unused + -- on output: the expiration time of the given policy rules + + This routine is used by an application which protects or unprotects + IDUs. Using information in the credentials structure referenced by + claimant_cred_handle, IDUP_Establish_Env() initializes the data + structures required to protect or unprotect IDUs. The + claimant_cred_handle, if non-NULL, must correspond to a valid + credentials structure. + + This routine returns an env_handle for all future references to this + environment; when protection, unprotection, or IDUP_Abolish_Env() + calls are made, this handle value will be used as the input + env_handle argument. It is the caller's responsibility to establish + a communications path to the intended recipients of the P-IDU, and to + transmit the P-IDU to those recipients over that path. This may + occur subsequent to the IDUP_Abolish_Env() call. + + + + +Adams Informational [Page 16] + +RFC 2479 IDUP-GSS-API December 1998 + + + The req_services parameter may be used by the calling application to + request that data origin authentication with integrity, + confidentiality with integrity, evidence generation, and/or evidence + verification services be available in the established environment. + Requests can also be made for "trusted" or "untrusted" time services. + Requesting evidence generation or verification indicates that the + calling application may wish to generate or verify evidence + information for non-repudiation purposes (note: an IDU protector may + request that a flag be inserted into a P-IDU asking a recipient to + provide an evidence of the type "non-repudiation of delivery"; + however, the IDUP-GSS-API cannot by itself guarantee that the + evidence will be sent because there is no way to force a target to + send an evidence_token back to the IDU protector). + + Not all features will be available in all underlying mech_types; the + returned value of ret_services indicates, as a function of mech_type + processing capabilities and the initiator-provided input OBJECT IDs, + the set of features which will be available in the environment. The + value of this parameter is undefined unless the routine's + major_status indicates COMPLETE. Failure to provide the precise set + of services desired by the caller does not cause environment + establishment to fail; it is the caller's choice to abolish the + environment if the service set provided is unsuitable for the + caller's use. The returned mech_type value indicates the specific + mechanism employed in the environment and will never indicate the + value for "default". + + The following OBJECT IDs are defined for protection and unprotection + services (the OBJECT ID iso.org.dod.internet.security.services, + 1.3.6.1.5.7, has been assigned by IANA, and some of the security + services under that node are assigned as shown below). It is + recognized that this list may grow over time. + + PER_CONF = { 1.3.6.1.5.7.1.1 } + -- perform data confidentiality (i.e., encrypt data) + PER_CONF_FULL = { 1.3.6.1.5.7.1.3 } + -- perform full confidentiality (i.e., encrypt data and sig) + -- (may be used only when PER_DOA is requested simultaneously) + PER_DOA = { 1.3.6.1.5.7.3.1 } + -- perform data origin authentication with data integrity + PER_DOA_CIPH = { 1.3.6.1.5.7.3.3 } + -- perform DOA with DI over ciphertext (rather than plaintext) + -- (may be used only when PER_CONF is requested simultaneously) + PER_POO = { 1.3.6.1.5.7.4.1 } + -- perform (i.e., create) non-repudiable "proof of origin" + PER_POD = { 1.3.6.1.5.7.4.3 } + -- perform (i.e., create) non-repudiable "proof of delivery" + + + + +Adams Informational [Page 17] + +RFC 2479 IDUP-GSS-API December 1998 + + + REC_CONF = { 1.3.6.1.5.7.1.2 } + -- receive data confidentiality (i.e., decrypt data) + REC_CONF_FULL = { 1.3.6.1.5.7.1.4 } + -- receive full confidentiality (i.e., decrypt data and sig) + -- (may be used only when REC_DOA is received simultaneously) + REC_DOA = { 1.3.6.1.5.7.3.2 } + -- receive / verify DOA with data integrity + REC_DOA_CIPH = { 1.3.6.1.5.7.3.4 } + -- verify DOA with DI over ciphertext (rather than plaintext) + -- (may be used only when PER_CONF is received simultaneously) + REC_POO = { 1.3.6.1.5.7.4.2 } + -- receive / verify "proof of origin" + REC_POD = { 1.3.6.1.5.7.4.4 } + -- receive / verify "proof of delivery" + TTIME = { 1.3.6.1.5.7.7.1 } + -- trusted time availability + UTIME = { 1.3.6.1.5.7.7.2 } + -- untrusted time availability + + The PER_CONF return value (in the ret_services paramater) indicates + whether the environment supports confidentiality services, and so + informs the caller whether or not a request for encryption can be + honored. In similar fashion, the PER_DOA return value indicates + whether DOA services are available in the established environment, + and the PER_POO and PER_POD return values indicate whether evidence + generation services are available. The TTIME and UTIME values + indicate whether trusted time and untrusted time are available for + protection / unprotection services. + + Note that, unlike a GSS "context", an IDUP environment does not have + an explicit lifetime associated with it. Instead, it relies on the + lifetime of the calling entity's credential (set by the caller in the + GSS_Acquire_cred() call). When the credential expires (or is + explicitly deleted in any other way), no new operations are allowed + in the IDUP environment (although operations which have begun, such + as the Protection set of calls, can be taken to completion). + + + + + + + + + + + + + + + +Adams Informational [Page 18] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.2.3. IDUP_Abolish_Env call + + Input: + o env_handle ENVIRONMENT HANDLE + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + + Return major_status codes: + o GSS_S_COMPLETE + -- the relevant environment-specific information was flushed. + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + This call is made to flush environment-specific information. (Once an + environment is established, cached credential and environment-related + info. is expected to be retained until an IDUP_Abolish_Env() call is + made or until the cred. lifetime expires.) Attempts to perform IDU + processing on a deleted environment will result in error returns. + +2.2.4. IDUP_Inquire_Env call + + Input: + o env_handle ENVIRONMENT HANDLE, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o mech_type OBJECT IDENTIFIER, + -- the mechanism supporting this environment + o environmentPolicies EnvironmentPolicies, + -- the environment policies in effect + o ret_services SET OF OBJECT IDENTIFIER, + + Return major_status codes: + o GSS_S_COMPLETE + -- referenced environment is valid and mech_type and other return + -- values describe the characteristics of the environment. + o GSS_S_CREDENTIALS_EXPIRED + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + This routine provides environment-related information to the caller. + + + + + + + +Adams Informational [Page 19] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.3. Per-IDU calls + + This group of calls is used to perform IDU protection and + unprotection processing on an established IDUP environment. Some of + these calls may block pending network interactions (depending on the + underlying mechanism in use). These calls may be invoked by an IDU's + protector or by the P-IDU's recipient. Members of this group form + pairs; the output from the protection types of calls is typically + meant to be input to the unprotection types of calls. + + The per-IDU calls can support caller-requested data origin + authentication with data integrity, confidentiality with data + integrity, evidence, and evidence-requested-from-target services. + + The protection operations output a token which encapsulates all the + information required to unprotect the IDU. The token is passed to + the target (possibly separate from the M-IDU) and is processed by the + unprotection calls at that system. Unprotection performs + decipherment, DOA verification, evidence verification, or + notification of evidence requested, as required. + + Each of the two main operations (protection and unprotection) may be + separated into three parts: "Start_Operation"; "Operation" (which + may be called once for each buffer of input data); and + "End_Operation". This separation is available for the case where the + IDU or P-IDU is to be processed one buffer at a time. + "Start_Operation" allows the caller to specify or retrieve the + appropriate "Quality" used during the processing. "Operation" is + concerned with the processing itself, receiving a buffer of input + data and potentially returning a buffer of output data. + "End_Operation" performs any required clean-up and creates the + appropriate token or states whether the input token was verified. + + If the IDU or P-IDU is wholly contained in a single buffer, the + three-part protection/unprotection processing need not be done. + Instead, protection or unprotection can be accomplished using only a + single call, simplifying application code. + +2.3.1. Relationship to GSS-API + + The set of calls described in this section is used in place of the + calls GSS_GetMIC(), GSS_VerifyMIC, GSS_Wrap(), and GSS_Unwrap() which + are specified in [RFC-2078], since those calls are specific to a + session-oriented environment. + + + + + + + +Adams Informational [Page 20] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.3.2. The "SE" Calls + +2.3.2.1. IDUP_SE Purpose + + The "SE" group of calls provides a very simple, high-level interface + to underlying IDUP mechanisms when application developers need access + only to signature and encryption protection/unprotection services. + It includes both the single-buffer and multiple-buffer IDU cases and + can be used for signing only, encrypting only, signing and encrypting + (in either order, and with or without visibility of the resulting + signature), and "clear signing" (where the data is not modified in + any way and the signature itself is returned as a separate item). + [Note that encapsulation occurs in all cases except for clear + signing, so that these calls provide functionality similar to the + GSS_Wrap call.] + + Note that the term "signing" is used in its most generic sense, not + necessarily implying the use of public-key techniques. This concept + has also been called "sealing" in other contexts (e.g., in other + standardization efforts). + + The SE calls may be viewed by mechanism implementors as an "API" to + the more powerful GP calls defined later and so may be implemented as + simple mapping functions to those calls (when those optional calls + are supported). Application callers, on the other hand, may find + that the SE calls are all they currently need for many environments. + At some time in the future when they have need of non-repudiation or + "directed receipts" types of services, they may consider using the EV + calls (or the GP calls -- when these are supported -- if complex and + sophisticated combinations of services are required). To assist in + this migration path, mechanism implementors are encouraged to support + the full set of IDUP calls (i.e., the SE, EV, and GP calls) even + though some calling applications will only use the SE calls in the + short term. + +2.3.2.2. IDUP_SE Parameter Bundles + + The concept of "parameter bundles" is used in the calls presented in + the following subsections in order to simplify their presentation and + clarify their intended purpose and use. See Section 2.3.4.1 for a + more complete description of parameter bundles. + + The following parameter bundles are used in the "SE" protection and + unprotection sets of calls. + + + + + + + +Adams Informational [Page 21] + +RFC 2479 IDUP-GSS-API December 1998 + + + o Protect_Options PARAMETER BUNDLE + o protect_operation INTEGER { + sign_only (0), + encrypt_only (1), + sign_and_encrypt (2), + -- let mechanism choose order (and readability of signature) + sign_then_encrypt_data (3), + -- sign, then encrypt plaintext (leaving signature in clear) + sign_then_encrypt_full (4), + -- sign, then encrypt everything (including signature) + encrypt_then_sign (5), + -- encrypt, then sign the ciphertext + clear_sign_only (6) + } OPTIONAL, + o protect_oper_oid OBJECT IDENTIFIER OPTIONAL, + -- may be used in place of above parameter if OID is known + o sign_qop_alg UNSIGNED INTEGER, + o sign_qop_algID AlgorithmIdentifier, --overrides sign_qop_alg + o enc_qop_alg UNSIGNED INTEGER, + o enc_qop_algID AlgorithmIdentifier, --overrides enc_qop_alg + o idu_type_string OCTET STRING, + -- type of the IDU ("data", "e-mail doc", MIME type, etc.) + o pidu_type_string OCTET STRING, + o mech_indep_encap_req BOOLEAN -- (see Appendix A) + + o PIDU_Information PARAMETER BUNDLE + o protect_options Protect_Options, + o originator_name INTERNAL NAME, + o originator_role Originator_Role, -- (see Section 2.3.4.1) + o protection_time INTEGER, + o Bad_Target_Name PARAMETER BUNDLE, -- same as in Section 2.3.3.2 + o bad_targ_name INTERNAL NAME, + o bad_targ_status INTEGER, + -- a status flag giving the reason for rejection of the name + -- in bad_targ_name. Specified reasons include: + -- SYNTAX_INVALID (0) the syntax of the name is invalid; + -- NAME_UNRECOGNIZED (1) the name is not recognized; + -- NAME_AMBIGUOUS (2) the name cannot be resolved; + -- ACCESS_DENIED (3) access to this target is denied; + -- CERTIFICATE_NOT_FOUND (4) the encryption certificate of the + target could not be found. + + o Target_Info PARAMETER BUNDLE, -- same as in Section 2.3.3.2 + o targ_names SET OF INTERNAL NAME, + o bad_targ_count INTEGER, + o bad_target_names SET OF Bad_Target_Name, + + + + + +Adams Informational [Page 22] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.3.2.3. IDUP_SE major_status codes + + The following major_status return codes are defined for the "SE" + calls in this section: + + o GSS_S_COMPLETE + o IDUP_S_MORE_OUTBUFFER_NEEDED + -- returned (by any SE call) to indicate that there is more output + -- data than can fit into the supplied buffers. The application + -- should save the returned data and call again to retrieve the + -- remaining output. + o IDUP_S_MORE_PIDU_NEEDED + -- indicates that more PIDU data is needed for the StartUnprotect + -- operation (e.g., so that PIDU_Information or initial_idu_buffer + -- may be returned). + o IDUP_S_INCONSISTENT_PARAMS + o GSS_S_CREDENTIALS_EXPIRED + o IDUP_S_NO_ENV + o GSS_S_BAD_QOP + o GSS_S_FAILURE + + If Target_Info is used as an input parameter (e.g., if an encryption + operation is being performed), the following major_status return code + is also defined: + + o IDUP_S_BAD_TARG_INFO + + Note for this return code that if one or more of the targets in + targ_names cannot be used as a valid recipient of the P-IDU, these + names will be returned in bad_targ_names (with associated status + codes in bad_targ_status). As long as at least one of the targets + can be used, however, this does not cause this call to fail (i.e., + the failure code IDUP_S_BAD_TARG_INFO is not returned); it is the + caller's choice to discontinue IDU protection if the target set which + can be used is unsuitable for the caller's purposes. + +2.3.2.4. IDUP_SE_SingleBuffer_Protect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o Protect_Options PARAMETER BUNDLE, + o Target_Info PARAMETER BUNDLE, + o idu_buffer OCTET STRING + o additional_protection BOOLEAN + -- TRUE if idu_buffer is the output of a previous protection + -- operation (i.e., if this is the second (or higher) in a + -- series of SE/EV protection calls) + + + + +Adams Informational [Page 23] + +RFC 2479 IDUP-GSS-API December 1998 + + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o pidu_buffer OCTET STRING, + o sig_token OCTET STRING + -- used if Protect_Options is clear_sign_only + + Using the security environment referenced by env_handle, encrypt + and/or sign the supplied IDU. If "clear signing" is performed, the + signature will be returned in sig_token and pidu_buffer may be empty + (depends on underlying mechanism). + +2.3.2.5. IDUP_SE_SingleBuffer_Unprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o pidu_buffer OCTET STRING, + -- may contain an IDU if sig_token is non-NULL (i.e., if + -- clear_sign_only protection was applied) + o sig_token OCTET STRING + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o idu_buffer OCTET STRING, + -- may be empty if clear_sign_only protection was applied (depends + -- on underlying mechanism) + o PIDU_Information PARAMETER BUNDLE + o additional_unprotection BOOLEAN + -- TRUE if idu_buffer should be input to another unprotection + -- operation (i.e., if this should not be the last in a series + -- of SE/EV unprotection calls) + + Using the security environment referenced by env_handle, decrypt + and/or verify the supplied PIDU and return the contained IDU along + with all available PIDU_Information. + +2.3.2.6. IDUP_SE_MultiBuffer_StartProtect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o Protect_Options PARAMETER BUNDLE, + o Target_Info PARAMETER BUNDLE, + o additional_protection BOOLEAN, -- (see Section 2.3.2.4) + o idu_size INTEGER -- (see Section 2.3.4.2) + + + + + + +Adams Informational [Page 24] + +RFC 2479 IDUP-GSS-API December 1998 + + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o initial_pidu_buffer OCTET STRING + -- may be empty (depends on underlying mechanism) + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the process of signing and/or + encrypting the IDU (which will be supplied in multiple buffers to the + Process_Buffer call). + +2.3.2.7. IDUP_SE_MultiBuffer_EndProtect call + + Inputs: + o env_handle ENVIRONMENT HANDLE + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o final_pidu_buffer OCTET STRING, + o sig_token OCTET STRING + -- used if Protect_Options was clear_sign_only + + Using the security environment referenced by env_handle, complete the + protection processing on the data and place the computed output in + final_pidu_buffer and/or sig_token. Successful application of + IDUP_SE_MultiBuffer_EndProtect() does not guarantee that unprotection + can necessarily be performed successfully when the P-IDU arrives at + the target (for example, it may be damaged in transit). + +2.3.2.8. IDUP_SE_MultiBuffer_StartUnprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o initial_pidu_buffer OCTET STRING, + o sign_qop_alg_in UNSIGNED INTEGER, + -- used if Protect_Options was clear_sign_only (and calling + -- application has prior knowledge of signing alg. applied); + -- if NULL, then sig_token must be supplied + o sig_token OCTET STRING + -- used if Protect_Options was clear_sign_only; + -- if NULL, then sign_qop_alg_in must be supplied + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o PIDU_Information PARAMETER BUNDLE, + -- returns all available information + + + +Adams Informational [Page 25] + +RFC 2479 IDUP-GSS-API December 1998 + + + o initial_idu_buffer OCTET STRING + -- may be empty + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the process of decrypting + and/or verifying the PIDU (which will be supplied in multiple buffers + to the Process_Buffer call). + + The parameters sign_qop_alg_in and sig_token should not both be + supplied (i.e., they should not both be non-NULL). If they are both + non-NULL, however, sig_token is taken to be authoritative since this + is the token created at protection time and therefore is guaranteed + to carry the information needed to unprotect. + +2.3.2.9. IDUP_SE_MultiBuffer_EndUnprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o sig_token OCTET STRING OPTIONAL + -- used if Protect_Options was clear_sign_only and sig_token was + -- not available when StartUnprotect was called + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o PIDU_Information PARAMETER BUNDLE, + -- returns all available information + o final_idu_buffer OCTET STRING -- may be empty + o additional_unprotection BOOLEAN -- (see Section 2.3.2.5) + + Using the security environment referenced by env_handle, complete the + decryption and/or verification processing on the data and place any + residual output in final_idu_buffer. + +2.3.2.10. IDUP_SE_Process_Buffer call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o input_buffer OCTET STRING, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o output_buffer OCTET STRING + -- may be zero length (depends on underlying mechanism and + -- corresponding Start() call and Protect_Options value) + + + + + +Adams Informational [Page 26] + +RFC 2479 IDUP-GSS-API December 1998 + + + Using the security environment referenced by env_handle, continue the + processing on the data in input_buffer and, if it is available, put + any resulting output data in output_buffer. The application calls + this routine over and over again with new buffers of data until it + has processed all the data buffers of the IDU/PIDU. It then calls the + appropriate End() call to complete the processing. + +2.3.3. The "EV" Calls + +2.3.3.1. IDUP_EV Purpose + + The "EV" group of calls provides a simple, high-level interface to + underlying IDUP mechanisms when application developers need to deal + only with evidence but not with encryption or integrity services. It + includes both the single-buffer and multiple-buffer IDU cases and can + be used for the generation and verification of evidence tokens + embodying several different types of evidences. + + The following list of evidence types is supported. This list is by no + means exhaustive and it is anticipated that it may be extended in + future versions of this specification. + + "Non-repudiation of Origin" prevents a message creator's false + denial of creating and sending a message. + + "Non-repudiation of Creation" prevents a message creator's false + denial of creating a message. + + "Non-repudiation of Sender" prevents a message creator's false + denial of sending a message (that was not necessarily created by + the sender). + + "Non-repudiation of Delivery" prevents a message recipient's false + denial of having received and looked at the content of a message. + + "Non-repudiation of Receipt" prevents a message recipient's false + denial of having received a message (whose content was not + necessarily looked at by the recipient). + + "Non-repudiation of Approval" prevents a message recipient's false + denial of having approved the content of a received message. + + An evidence is provided in the form of a evidence token. Two forms of + evidence tokens are supported: + + o Tokens including the associated data, + + + + + +Adams Informational [Page 27] + +RFC 2479 IDUP-GSS-API December 1998 + + + o Tokens without included data (but with a unique reference to + the associated data). + + Evidence tokens may be freely distributed. Any possessor of an + evidence token (and of the associated data, if not included in the + token) can verify the evidence if it has the appropriate credentials + which include the definition of security policies (i.e., keys alone + do not permit the verification of evidence tokens). Any holder of an + evidence token may store it (along with the associated data, if not + included in the token) for later verification. + + Calls that are specific to the support of evidence include: + + * Generate_token, which generates a non-repudiation token using the + current environment. The generated token may consist of: + + 1 - an evidence token + 2 - a token containing a request for an evidence, which carries + information describing which evidence type should be generated + by the recipient(s) and sent back to some entities (that may + or may not include the sender). + 3 - a token containing an evidence token which is an answer to an + evidence that has been previously requested. + 4 - a token including both an evidence and a request for another + evidence to be provided. + + * Verify_evidence, which verifies the evidence token using the + current environment. This operation returns a major_status code + which can be used to determine whether the evidence contained in a + token is complete (i.e., can be successfully verified (perhaps + years) later). If a token's evidence is not complete, the token can + be passed to form_complete_pidu to complete it. + + Additional useful calls for evidence services include: + * IDUP_Get_token_details (see Section 2.5.3); + * IDUP_Form_Complete_PIDU (see Section 2.4.2). + +2.3.3.2. IDUP_EV Parameters + + The following parameter bundles are used in the "EV" protection and + unprotection sets of calls. + + o Nr_Options PARAMETER BUNDLE + o evidence_type INTEGER { + no_evidence (0) + -- used when request-only token desired + proof_of_receipt (1), + proof_of_delivery (2), + + + +Adams Informational [Page 28] + +RFC 2479 IDUP-GSS-API December 1998 + + + proof_of_approval (3), + proof_of_creation (4), + proof_of_sender (5), + proof_of_origin (6) + } OPTIONAL, + o evidence_type_oid OBJECT IDENTIFIER OPTIONAL, + -- may be used in place of above parameter if OID is known + o evidence_validity_duration INTEGER, + -- duration_in_minutes + -- DURATION_HOUR = 60; + -- DURATION_DAY = 1440; + -- DURATION_WEEK = 10080; + -- DURATION_MONTH = 43200;// 30 days + -- DURATION_YEAR = 525600;//365 days + o mech_indep_encap_req BOOLEAN -- (see Appendix A) + + o Originator_Information PARAMETER BUNDLE + o token_generator_name INTERNAL NAME, + -- obtained from the credentials of the originator + -- (e.g., from its public key certificate) + o token_generator_role Originator_Role OPTIONAL, + -- (see Section 2.3.4.1) + o protection_time INTEGER OPTIONAL + + o Bad_Target_Name PARAMETER BUNDLE -- (see Section 2.3.2.2) + o bad_targ_name INTERNAL NAME, + o bad_targ_status INTEGER + -- a status flag giving the reason for rejection of the + -- name in bad_targ_name + + o Target_Info PARAMETER BUNDLE -- same as in Section 2.3.2.2 + o targ_names SET OF INTERNAL NAME, + o bad_targ_count INTEGER, + o bad_target_names SET OF Bad_Target_Name + + o Request_Features PARAMETER BUNDLE + o requested_evidence_type INTEGER { + no_evidence (0), - used when no token desired + proof_of_receipt (1), + proof_of_delivery (2), + proof_of_approval (3), }, + o nr_req_policy OBJECT IDENTIFIER, + o evidence_from Target_Info, + o evidence_to Target_Info, + o include_received_token_in_evidence BOOLEAN + + The following data_type is used in the "EV" protection calls. + + + + +Adams Informational [Page 29] + +RFC 2479 IDUP-GSS-API December 1998 + + + o Nr_Operation INTEGER { + evidence_and_or_evidence_request (1), + returned_evidence (2) } + +2.3.3.3. IDUP_EV major_status codes + + The following major_status return codes are defined for the "EV" + calls in this section: + + o GSS_S_COMPLETE + -- indicates that the evidence is complete + o IDUP_S_INCOMPLETE + o IDUP_S_MORE_OUTBUFFER_NEEDED + -- returned (by any EV call) to indicate that there is more output + -- data than can fit into the supplied buffers. The application + -- should save the returned data and call again to retrieve the + -- remaining output. + o IDUP_S_INCONSISTENT_PARAMS + o GSS_S_CREDENTIALS_EXPIRED + o IDUP_S_NO_MATCH + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + If Target_Info is used as an input parameter (i.e., if an evidence is + being requested ), the following major_status return code is also + defined: + + o IDUP_S_BAD_TARG_INFO + + Note for this return code that if one or more of the targets in + targ_names cannot be used as a valid recipient of the P-IDU, these + names will be returned in bad_targ_names (with associated status + codes in bad_targ_status). As long as at least one of the targets + can be used, however, this does not cause this call to fail (i.e., + the failure code IDUP_S_BAD_TARG_INFO is not returned); it is the + caller's choice to discontinue IDU protection if the target set which + can be used is unsuitable for the caller's purposes. + +2.3.3.4. IDUP_EV_SingleBuffer_Generate call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o nr_operation Nr_Operation, + o Nr_Options PARAMETER BUNDLE, + o idu_buffer OCTET STRING, + o form_complete_pidu BOOLEAN, + -- if TRUE the implementation will attempt to form a complete PIDU + o include_data_in_token BOOLEAN, + + + +Adams Informational [Page 30] + +RFC 2479 IDUP-GSS-API December 1998 + + + -- if TRUE, data provided in idu_buffer will be included in the + -- generated token; if FALSE, the data will not be included + o Request_Features PARAMETER BUNDLE + -- the type of the evidence that is requested; + -- policy under which the returned evidence should be generated; + -- the recipients that are supposed to send back an evidence; + -- the recipients that should receive the requested evidence; + -- an indicator include_received_token_in_evidence: + -- if TRUE, the evidence token incorporating the request will be + -- included in the data for which recipients will generate + -- evidence; if FALSE, evidence will be generated using only + -- the data (and not the token incorporating the request). + o additional_protection BOOLEAN -- (see Section 2.3.2.4) + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o token OCTET STRING, + o evidence_check OCTET STRING, + -- present only if an evidence is requested. Consists of data to + -- be used to verify the requested token(s) (if any) when they are + -- received. + + Description: + + This operation generates a non-repudiation token associated with the + data passed in an input buffer. Two kinds of operations can be + performed (using the Nr_Operation parameter): + + a) generating a token that includes either an evidence only, or + an evidence request only, or both an evidence and an evidence + request; + + b) generating a response token for some recipients that includes an + evidence generated as a response to a request (in this case the + idu_buffer is used to enter the request token that was received). + + It is possible to request the generation of complete evidence. This + may succeed or fail; if it fails, a subsequent call to + Form_Complete_PIDU can be made. + +2.3.3.5. IDUP_EV_SingleBuffer_Verify call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o token OCTET STRING, + o external_idu_buffer OCTET STRING, + -- if not present within the token + + + +Adams Informational [Page 31] + +RFC 2479 IDUP-GSS-API December 1998 + + + o evidence_check OCTET STRING, + -- present only if the input token is a response to a previous + -- request for evidence (this parameter is used to validate that + -- evidence). + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o Nr_Options PARAMETER BUNDLE, + o Originator_Information PARAMETER BUNDLE, + o Request_Features PARAMETER BUNDLE, + o trusted_time_stamping_time INTEGER OPTIONAL, + -- present for informational purposes only + o complete_evidence_before INTEGER OPTIONAL, + -- if the major status code that is returned is + -- IDUP_S_INCOMPLETE, IDUP_Form_Complete_PIDU should be called + -- with the same token before this time. + -- This may be required, for example, in order to insure that + -- the time skew between the evidence generation time and + -- the trusted time service's countersignature on the evidence + -- falls within the interval allowed by the current NR policy. + o complete_evidence_after INTEGER OPTIONAL, + -- if the major status code that is returned is + -- IDUP_S_INCOMPLETE, IDUP_Form_Complete_PIDU should be called + -- with the same token after this time. + -- This may be required, for example, to insure that all + -- authorities involved in generating the evidence have passed + -- the last time at which the current NR policy allows them to + -- repudiate their keys. + o encapsulated_idu_buffer OCTET STRING + -- if the IDU was present within the token + o additional_unprotection BOOLEAN -- (see Section 2.3.2.5) + + Description: + + Verifies the validity and discloses the content of a nr_token. + + If the token containing the evidence to be verified was provided to + the calling application by a partner responding to the calling + application's request, then the calling application must pass the + evidence check it received when it generated the request as a + parameter along with the token it received from the partner. + + Output indicators are provided which give guidance about the time or + times at which form_complete_pidu should be called; see the parameter + descriptions for explanations of these indicators and their use. Note + that the time specified by complete_evidence_before may be earlier + than that specified by complete_evidence_after; in this case it will + + + +Adams Informational [Page 32] + +RFC 2479 IDUP-GSS-API December 1998 + + + be necessary to call form_complete_pidu twice. + + Because keys can be revoked or declared compromised, the return from + verify_evidence cannot in all cases be a definitive "valid" or + "invalid"; sometimes "conditionally valid" may be returned, depending + upon the policy in use. IDUP_S_INCOMPLETE will be returned, for + example, if: + + - the interval during which the generator of the evidence may + permissibly declare his key invalid has not yet expired (and + therefore it is possible that the evidence may be declared invalid + in the future), or + + - trusted time is required for verification, and the time obtained + from the token is not trusted. + +2.3.3.6. IDUP_EV_MultiBuffer_StartGenerate call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o nr_operation Nr_Operation, + o Nr_Options PARAMETER BUNDLE, + o form_complete_pidu BOOLEAN, + o include_data_in_token BOOLEAN, + o idu_size INTEGER, -- (see Section 2.3.4.2) + o Request_Features PARAMETER BUNDLE + o additional_protection BOOLEAN -- (see Section 2.3.2.4) + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o initial_pidu_buffer OCTET STRING + -- may be empty (depends on underlying mechanism) + + Description: + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the generation of a token. The + IDU will be supplied in multiple buffers to the + IDUP_EV_Process_Buffer call). Two kinds of operations can be + performed (using the Nr_Operation parameter) : + + a) generating a token that includes either an evidence only, or + an evidence request only, or both an evidence and an evidence + request. + + + + + + +Adams Informational [Page 33] + +RFC 2479 IDUP-GSS-API December 1998 + + + b) generating a return token for some recipients that includes an + evidence generated as a response to a request. In that case the + received token will be passed into the subsequent + IDUP_EV_Process_Buffer calls. The boolean include_data_in_token + is ignored as the output will always be contained in a single + token. The Request_Features are ignored in that case at this + time in order to keep things simple and to avoid the piggy- + backing that is theoretically possible. + + It is possible to request the generation of complete evidence. This + may succeed or fail; if it fails, a subsequent call to + Form_Complete_PIDU can be made. + +2.3.3.7. IDUP_EV_MultiBuffer_EndGenerate call + + Inputs: + o env_handle ENVIRONMENT HANDLE + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o final_pidu OCTET STRING, + o token OCTET STRING, + o evidence_check OCTET STRING + -- present only if an evidence is requested. + + Description: + + Using the security environment referenced by env_handle, provide the + requested token or the final P-IDU. A token will be generated if + encapsulation was not requested; otherwise, the final P-IDU is + provided. + +2.3.3.8. IDUP_EV_MultiBuffer_StartVerify call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o token OCTET STRING, + o evidence_check OCTET STRING, + -- present only if an evidence has been previously requested. + + Outputs: + o major_status INTEGER, + o minor_status INTEGER + + + + + + + +Adams Informational [Page 34] + +RFC 2479 IDUP-GSS-API December 1998 + + + Description: + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the process of verifying the + token. The P-IDU will be supplied in multiple buffers to the + IDUP_EV_Process_Buffer call. + +2.3.3.9. IDUP_EV_MultiBuffer_EndVerify call + + Input: + o env_handle ENVIRONMENT HANDLE + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o Nr_Options PARAMETER BUNDLE, + o Originator_Information PARAMETER BUNDLE, + o Request_Features PARAMETER BUNDLE, + o trusted_time_stamping_time INTEGER OPTIONAL, + o complete_evidence_before INTEGER OPTIONAL, + o complete_evidence_after INTEGER OPTIONAL, + o idu_buffer OCTET STRING + -- if the IDU was present within the token + o additional_unprotection BOOLEAN -- (see Section 2.3.2.5) + + Description: + + Using the security environment referenced by env_handle, complete the + verification processing on the data and provide verified output + parameters to the caller when the major status code is either: + + o GSS_S_COMPLETE or + o IDUP_S_INCOMPLETE + +2.3.3.10. IDUP_EV_Process_Buffer call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o input_buffer OCTET STRING + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o output_buffer OCTET STRING + -- may be zero length (depends on underlying mechanism and + -- corresponding Generate () call and options + -- (e.g., data_included_in_token) + + + + +Adams Informational [Page 35] + +RFC 2479 IDUP-GSS-API December 1998 + + + Description: + + Using the security environment referenced by env_handle, continue the + processing on the data in input_buffer and, if it is available, put + any resulting output data in output_buffer. The application calls + this routine over and over again with new buffers of data until it + has processed all the data buffers of the IDU/PIDU. It then calls the + appropriate End() call to complete the processing. + +2.3.4. The "GP" Calls + + The "GP" group of calls provides a powerful interface to flexible and + sophisticated combinations of protection and unprotection services. + This power and flexibility, however, necessitates a more complex + interface than either the SE or the EV calls. Furthermore, such + combinations of services are not needed in many of the security + mechanisms in common use today (although this is likely to change as + time goes on). The GP calls are therefore specified to be OPTIONAL + and need not be supported by IDUP-conformant implementations. Note, + however, that the structure of IDUP tokens should be such that the + SE/EV and GP calls may be used interchangably by the receiver. + +2.3.4.1. Parameter Bundles + + The concept of "parameter bundles" is used in the calls presented in + the following subsections in order to simplify their presentation and + clarify their intended purpose and use (note that specific language + bindings may or may not use parameter bundles for its actual calling + conventions). A parameter bundle is simply a set of closely-related + parameters of a call which are either all used by / available to the + calling application or all not used by / unavailable to the calling + application. These parameters may be all input parameters, all + output parameters, or any combination of the two. + + An example use envisioned for parameter bundles in a language such as + C would be as a structure, where individual parameters in the bundle + are structure members. The calling application wishing to use a + particular bundle would then allocate the appropriate structure + variable, assign the desired input values to the appropriate members, + and pass the address of the structure as the bundle "parameter". On + output, the values of the appropriate output members may be read. An + application not wishing to use a particular bundle (or one which is + satisfied with default values for all input parameters of the bundle + and which doesn't care about output values), can pass NULL as the + bundle "parameter". From the mechanism implementor's perspective, if + a parameter bundle is not supported (for example, if it represents a + security service which is not supported by the implementation), then + any non-NULL value passed as the bundle parameter will generate an + + + +Adams Informational [Page 36] + +RFC 2479 IDUP-GSS-API December 1998 + + + error status return code. + + [Note that the parameter bundles given below, except where explicitly + referenced by the SE and EV calls, are specific to the (optional) GP + calls. Thus, these bundles need not be supported by IDUP-conformant + implementations if the GP calls are not supported.] + + The following parameter bundles are used in the subsequent protection + and unprotection sets of calls. A parameter preceded by "(I)" is an + input parameter; one preceded by "(O)" is an output parameter; one + preceded by neither is an input if the bundle itself is an input and + is an output if the bundle itself is an output; one preceded by "(X)" + is the opposite: an output if the bundle itself is an input and an + input if the bundle itself is an output. + + o Mech_Specific_Info PARAMETER BUNDLE + -- actual parameters included in this bundle are defined by (and + -- specific to) the underlying mechanism + + o Sensitivity PARAMETER BUNDLE, + -- actual parameters included in this bundle are defined by (and + -- specific to) the underlying mechanism, but may include + -- codified values for "Unclassified", "Secret", "Top Secret", + -- and so on + + o Service_Creation_Info PARAMETER BUNDLE + -- actual parameters included in this bundle are defined by (and + -- specific to) the underlying mechanism, but it is mandatory + -- that they include at least service_id and Quality + + o Service_Verification_Info PARAMETER BUNDLE + -- actual parameters included in this bundle are defined by (and + -- specific to) the underlying mechanism, but it is mandatory + -- that they include at least service_id and Quality + + o Quality PARAMETER BUNDLE + o qop_algs UNSIGNED INTEGER, + o qop_algID AlgorithmIdentifier, --overrides qop_algs + o validity UNSIGNED INTEGER, + -- protection guaranteed to be valid until time specified + o policy_id OBJECT IDENTIFIER, + -- security policy under which protection is/was carried out + o allow_policy_mapping BOOLEAN, + -- determines whether mapping between policy IDs is allowed + o actual_policy_time INTEGER + -- time at which the above policy rules came into effect + + + + + +Adams Informational [Page 37] + +RFC 2479 IDUP-GSS-API December 1998 + + + o Idu_Information PARAMETER BUNDLE, + o idu_type_oid OBJECT IDENTIFIER, + o idu_type_string OCTET STRING, + o idu_title OCTET STRING, + o idu_sensitivity Sensitivity, + o pidu_type_oid OBJECT IDENTIFIER, + o pidu_type_string OCTET STRING, + o pidu_title OCTET STRING, + o pidu_sensitivity Sensitivity, + + o Prot_Information PARAMETER BUNDLE, + o originator_name INTERNAL NAME, + o originator_role Originator_Role, + o idu_information Idu_Information, + o protection_time INTEGER, + + o Originator_Role PARAMETER BUNDLE, -- role in organization + o domain_name INTERNAL NAME OPTIONAL, + o role PRINTABLE STRING, + o role_info_is_authenticated BOOLEAN + -- TRUE if info. is authenticated (e.g., inside a cert.) + + o Special_Conditions PARAMETER BUNDLE, + o prot_oper_id INTEGER, + o form_complete_pidu BOOLEAN, + -- input to protection operations for evidence generation + o pidu_in_solic_service BOOLEAN, + -- in protection operations, used as input for service + -- solicitation to request that receiver include the + -- received PIDU when generating the response. In unprot. + -- operations, used as output to inform receiver that PIDU + -- should be included when generating the response. + o use_trusted_time BOOLEAN, + o use_untrusted_time BOOLEAN, + o mech_indep_encap_req BOOLEAN -- (see Appendix A) + + o Bad_Target_Name PARAMETER BUNDLE, + o (O) bad_targ_name INTERNAL NAME, + o (O) bad_targ_status INTEGER, + -- a status flag giving the reason for rejection of + -- the name in bad_targ_name. Specified reasons include: + -- SYNTAX_INVALID (0) + -- the syntax of the name is invalid; + -- NAME_UNRECOGNIZED (1) + -- the name is not recognized; + -- NAME_AMBIGUOUS (2) + -- the name cannot be resolved; + -- ACCESS_DENIED (3) + + + +Adams Informational [Page 38] + +RFC 2479 IDUP-GSS-API December 1998 + + + -- access to this target is denied; + -- CERTIFICATE_NOT_FOUND (4) + -- the encryption certificate of the target could + -- not be found. + + o Target_Info PARAMETER BUNDLE, + o targ_names SET OF INTERNAL NAME, + o (O) bad_targ_count INTEGER, + o (O) bad_target_names SET OF Bad_Target_Name, + + o General_Service_Data PARAMETER BUNDLE, + o target_info Target_Info, + o (X) unencapsulated_token OCTET STRING, + -- zero length if encapsulation_request is TRUE + o (O) minor_status INTEGER, + + Three types of protection services are defined in IDUP. These are: + + 1. perform unsolicited service (i.e., act on a locally-generated + service request), + 2. perform solicited service (i.e., act on a remotely-generated + service request), and + 3. perform service solicitation (i.e., send a service request to + the remote end). + + As an originator, applying data confidentiality with data integrity, + or data origin authentication with data integrity, or proof of origin + evidence is an example of service type 1. As a target, creating a + proof of delivery (i.e., receipt) evidence token as the result of a + request received from the originator is an example of service type 2. + Finally, as an originator, submitting a request that one or more + targets return a receipt for the data sent is an example of service + type 3. + + The first four parameters in the Prot_Service parameter bundle + pertain to all service types; the fifth parameter is used if and only + if service type 2 is desired; parameters 6-8 are used if and only if + service type 3 is desired. + + o Prot_Service PARAMETER BUNDLE + o (I) prot_service_type INTEGER, + o (I) service_id OBJECT IDENTIFIER, + o (I) quality Quality, -- NULL specifies default Quality + o (I) general_service_data General_Service_Data, + o (I) service_creation_info Service_Creation_Info, + o (I) service_to SET OF INTERNAL NAME, + o (O) service_verification_info Service_Verification_Info, + o (O) service_verification_info_id INTEGER, + + + +Adams Informational [Page 39] + +RFC 2479 IDUP-GSS-API December 1998 + + + Also, three types of unprotection services are defined. These are: + + 1. receive unsolicited service (i.e., process unrequested + remotely-generated service), + 2. receive solicited service (i.e., process remotely-generated + response to locally-generated request), and + 3. receive service solicitation (i.e., process req. from rem. end) + + As a target, unprotecting an encrypted message, or verifying the + originator's proof of origin is an example of service type 1. As an + originator, verifying a proof of delivery which you requested from a + target is an example of service type 2. Finally, as a target, + receiving a request from an originator for a proof of delivery is an + example of service type 3. + + The first four parameters in the Unprot_Service parameter bundle + pertain to all service types; parameters 5-6 are used if and only if + service type 2 is required; parameters 7-8 are used only if service + type 3 is required. + + o Unprot_Service PARAMETER BUNDLE + o (O) unprot_service_type INTEGER, + o (O) service_id OBJECT IDENTIFIER, + o (O) quality Quality, + -- actual Quality specified (never NULL) + o (O) general_service_data General_Service_Data, + o (O) service_verification_info_id INTEGER, + o (I) service_verification_info Service_Verification_Info, + o (O) service_to SET OF INTERNAL NAME, + o (O) service_creation_info Service_Creation_Info, + +2.3.4.2. IDUP_Start_Protect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o Mech_Specific_Info PARAMETER BUNDLE, + -- NULL selects the mechanism-defined default values + o Idu_Information PARAMETER BUNDLE, + o Special_Conditions PARAMETER BUNDLE, + o encapsulation_request BOOLEAN, + o single_idu_buffer OCTET STRING, + -- non-zero length for this buffer means that Protect/End_Protect + -- won't be called (i.e., entire IDU is contained in this buffer) + o idu_size INTEGER, + -- size (in bytes) of the IDU to be protected; + -- may be "-1" signifying "UNKNOWN" (note that some mechanisms + -- may not support encapsulation in such a case) + o Target_Info PARAMETER BUNDLE, + + + +Adams Informational [Page 40] + +RFC 2479 IDUP-GSS-API December 1998 + + + o Services_to_Perform SET OF Prot_Service, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o midu_buffer OCTET STRING, + -- zero length if encapsulation_request is TRUE; + -- may be zero length otherwise (depends on underlying mechanism) + o pidu_buffer OCTET STRING, + -- zero length if encapsulation_request is FALSE; + -- may be zero length otherwise (depends on underlying mechanism) + + Return major_status codes: + o GSS_S_COMPLETE + -- the protection process can begin (or has completed, if + -- single_idu_buffer has non-zero length). + o IDUP_S_MORE_OUTBUFFER_NEEDED + o GSS_S_CREDENTIALS_EXPIRED + o IDUP_S_NO_ENV + o IDUP_S_ENCAPSULATION_UNAVAIL + o IDUP_S_SERVICE_UNAVAIL + o IDUP_S_REQ_TIME_SERVICE_UNAVAIL + o IDUP_S_UNKNOWN_OPER_ID + o GSS_S_BAD_QOP + o IDUP_S_BAD_TARG_INFO + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the process of protecting the + IDU buffers. The caller requests specific protection services by + supplying the appropriate Prot_Service parameter bundles in + Services_to_Perform. Each service is able to return a minor status + code to the calling application, if necessary. + + The calling application, knowing the size of the IDU it wishes to + protect and the buffer size which it has available to it, can choose + to input the entire IDU in a single buffer and omit the subsequent + IDUP_Protect() and IDUP_End_Protect() calls. Furthermore, the + application can request that the resulting M-IDU be encapsulated in + the token -- so that the token contains the entire P-IDU -- rather + than having it be returned separately in midu_buffer. Encapsulation, + however, may not be supported by all underlying mechanisms or + implementations; if this is the case, the + IDUP_S_ENCAPSULATION_UNAVAIL major status code will be returned and + M-IDU will be returned in midu_buffer. + + + + + + +Adams Informational [Page 41] + +RFC 2479 IDUP-GSS-API December 1998 + + + For those mechanisms which allow or require multiple stages of + processing, each producing a different aspect of protection for the + IDU, the operation identifier prot_oper_id is used to specify which + stage is currently being requested by the application. An example + where this would be useful is a mechanism which implements the signed + Message Security Protocol [MSP]. As another example, a mechanism may + choose to do a digital signature in two stages: one for the hashing + of the message and another for the signature on the hash. The + calling application would therefore use the protection set of calls + on the IDU in stage 1 and then use the protection set of calls on the + token (from stage 1) in stage 2. + + Note that prot_oper_id is simply an integer (1, 2, 3, ..., n, where + "n" is the number of stages as defined by the mechanism (typically 1 + or 2)). The calling application uses this parameter to indicate to + the underlying mechanism whether it wishes to do stage 1 of + protection / unprotection processing, or stage 2, and so on. Portable + applications may pass "0" to let the mechanism choose the stage (note + that mechanism implementers may still iterate when prot_oper_id = 0 + (e.g., use output as next input, et cetera). + + If one or more of the targets in targ_names cannot be used as a valid + recipient of the P-IDU, these names will be returned in + bad_targ_names (with associated status codes in bad_targ_status). As + long as at least one of the targets can be used, this does not cause + this call to fail; it is the caller's choice to discontinue IDU + protection if the target set which can be used is unsuitable for the + caller's purposes. Note that each Prot_Service parameter bundle can + also input a list of targ_names; this is used if a separate list is + to be used for that service only (the general list of targets is to + be used for all services unless overridden in this way). + +2.3.4.3. IDUP_Protect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o input_buffer OCTET STRING, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o output_buffer OCTET STRING + -- may be zero length if encapsulation_request was set to TRUE in + -- IDUP_Start_Protect() (depends on underlying mechanism) + + Return major_status codes: + o GSS_S_COMPLETE + o IDUP_S_NO_ENV + + + +Adams Informational [Page 42] + +RFC 2479 IDUP-GSS-API December 1998 + + + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, continue the + protection processing on the data in input_buffer and, if the + underlying mechanism defines this, put any resulting P-IDU/M-IDU data + in output_buffer. The application calls this routine over and over + again with new buffers of data until it has protected all the data + buffers of the IDU. It then calls IDUP_End_Protect() to complete the + protection processing. + +2.3.4.4. IDUP_End_Protect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o Services_to_Perform SET OF Prot_Service, + o final_midu_buffer OCTET STRING, + -- zero length if encapsulation_request was set to TRUE in + -- IDUP_Start_Protect(), in which case pidu is used + o final_pidu_buffer OCTET STRING, + -- zero length if encapsulation_request was set to FALSE in + -- IDUP_Start_Protect(), in which case token and midu are used + + Return major_status codes: + o GSS_S_COMPLETE + -- protection has successfully completed and the resulting P-IDU + -- is ready for transfer. If defined by the underlying mechanism, + -- final_midu_buffer will contain any residual M-IDU data. + o IDUP_S_MORE_OUTBUFFER_NEEDED + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, complete the + protection processing on the data and place the computed output in + final_pidu_buffer (or final_midu_buffer and the unencapsulated_token + parameter for each Prot_Service). If a service was requested from + one or more targets in Start_Protect() - and if this is supported by + the underlying mechanism - Service_Verification_Info will hold + whatever data is necessary for the mechanism to verify a service + returned by a target (unprotector) of the P-IDU. Successful + application of IDUP_End_Protect() does not guarantee that the + corresponding unprotection set of calls can necessarily be performed + successfully when the P-IDU arrives at the target (for example, it + may be damaged in transit). + + + + +Adams Informational [Page 43] + +RFC 2479 IDUP-GSS-API December 1998 + + +2.3.4.5. IDUP_Start_Unprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o Mech_Specific_Info PARAMETER BUNDLE, + -- NULL selects the mechanism-defined default values + o single_pidu_buffer OCTET STRING, + -- non-zero length for this buffer means that IDUP_Unprotect() and + -- IDUP_End_Unprotect() will not be called (i.e., the entire P-IDU + -- (if encapsulation is used) or M-IDU (if encap. is not used) + -- is contained in this buffer) + o partial_pidu_buffer OCTET STRING, + -- may be an arbitrary-sized piece of the full pidu (if the + -- application's buffer isn't large enough to hold entire pidu). + -- Used if pidu_buffer will be input a buffer at a time (except + -- that the final buffer must be passed in final_pidu_buffer + -- rather than partial_pidu_buffer). Only one of + -- single_pidu_buffer and partial(final)_pidu_buffer can have + -- nonzero length. + o final_pidu_buffer OCTET STRING, + o Special_Conditions PARAMETER BUNDLE, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o Services_to_Receive SET OF Unprot_Service, + o Prot_Information PARAMETER BUNDLE, + o single_idu_buffer OCTET STRING, + -- if this buffer has non-zero length, then service processing has + -- been completed on the data in single_pidu_buffer + o initial_idu_buffer OCTET STRING, + -- holds any data from partial(final)_pidu_buffer which has been + -- unprotected; remaining data will be returned by Unprotect and + -- End_Unprotect as they are called with successive buffers of + -- pidu + o Service_Verification_Info PARAMETER BUNDLE, + -- used only if target is on "service_to" list in Unprot_Service + o service_verification_info_id INTEGER, + -- used only if target is on "service_to" list in Unprot_Service + + + + + + + + + + + + +Adams Informational [Page 44] + +RFC 2479 IDUP-GSS-API December 1998 + + + Return major_status codes: + o GSS_S_COMPLETE + -- unprotection processing can begin (or has completed, if + -- single_idu_buffer has non-zero length). + o IDUP_S_INCOMPLETE + -- used only if single_idu_buffer has non-zero length. + o IDUP_S_MORE_OUTBUFFER_NEEDED + o IDUP_S_MORE_PIDU_NEEDED + o GSS_S_DEFECTIVE_TOKEN + o IDUP_S_INAPPROPRIATE_CRED + o IDUP_S_INCONSISTENT_PARAMS + o IDUP_S_DEFECTIVE_VERIF + o IDUP_S_NO_MATCH + o IDUP_S_SERVICE_UNAVAIL + o IDUP_S_REQ_TIME_SERVICE_UNAVAIL + o IDUP_S_SERV_VERIF_INFO_NEEDED + o GSS_S_CREDENTIALS_EXPIRED + o IDUP_S_NO_ENV + o IDUP_S_UNKNOWN_OPER_ID + o GSS_S_BAD_QOP + -- the qop_algs value specified in P-IDU for at least one of the + -- services is unavailable in the local mechanism, so processing + -- cannot continue. + o GSS_S_BAD_MIC + o IDUP_S_BAD_DOA_KEY + o IDUP_S_BAD_KE_KEY + o IDUP_S_BAD_ENC_IDU + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, initialize + the data structures required to begin the process of unprotecting a + P-IDU. The caller will be alerted as to which services were applied + to the P-IDU in the returned Services_to_Receive set of parameters. + + If encapsulation was not used by the originator, it is the receiving + application's responsibility to separate the received P-IDU into a + M-IDU and one or more unencapsulated_token buffers (the latter being + input in separate Unprot_Service bundles in the Services_to_Receive + parameter). These unencapsulated_token buffers should be input + before the M-IDU (i.e., in IDUP_Start_Unprotect) or after the M-IDU + (i.e., in IDUP_End_Unprotect) as appropriate; this order may be + dictated, for example, by their placement in the in-coming message. + + If unprotection will be applied more than once to a given P-IDU, it + is the responsibility of the calling application to remember if a + service solicitation has been responded to previously (i.e., if the + requested service has already been generated / sent for that P-IDU) + and thus ignore subsequent solicitations on unprotect. + + + +Adams Informational [Page 45] + +RFC 2479 IDUP-GSS-API December 1998 + + + The time flags indicate whether to consult trusted, untrusted, or no + time (if both flags are FALSE) during the unprotection operation. If + the current time is not to be checked, then unprotection may be + successful even if the protector's key has expired since the P-IDU + was generated (that is, if the Validity period -- as specified in the + Quality parameter bundle -- has expired). + + If the underlying mechanism supports it and if this information is + contained in the P-IDU, information regarding the originator (that + is, the entity which used the protection set of calls to generate + this P-IDU) is returned in the Prot_Information parameter bundle. + +2.3.4.6. IDUP_Unprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o input_buffer OCTET STRING + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o output_buffer OCTET STRING + + Return major_status codes: + o GSS_S_COMPLETE + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, continue the + unprotection processing on the data in input_buffer, putting any + resulting IDU data in output_buffer (if required). + +2.3.4.7. IDUP_End_Unprotect call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o Prot_Information PARAMETER BUNDLE, + o Services_to_Receive SET OF Unprot_Service, + o final_idu_buffer OCTET STRING, + o Service_Verification_Info PARAMETER BUNDLE, + -- used only if target is on "service_to" list in Unprot_Service + o service_verification_info_id INTEGER, + -- used only if target is on "service_to" list in Unprot_Service + + + + +Adams Informational [Page 46] + +RFC 2479 IDUP-GSS-API December 1998 + + + Return major_status codes: + o GSS_S_COMPLETE + -- residual IDU data will be returned in final_idu_buffer. + o IDUP_S_INCOMPLETE + o IDUP_S_MORE_OUTBUFFER_NEEDED + o GSS_S_BAD_MIC + o IDUP_S_BAD_DOA_KEY + o IDUP_S_BAD_KE_KEY + o IDUP_S_BAD_ENC_IDU + o IDUP_S_NO_ENV + o GSS_S_FAILURE + + Using the security environment referenced by env_handle, complete the + unprotection processing on the data and return the appropriate status + code. If there is any residual IDU data it will be returned in + final_idu_buffer. + + If the IDUP_S_INCOMPLETE major status value is returned, all output + parameters are conditionally valid; the unprotection set of functions + will have to be called again (perhaps with a complete P-IDU, as + produced by IDUP_Form_Complete_PIDU) in order to get valid values for + all parameters. "Conditional validity" may arise, for example, if + all relevant certificates verify correctly, but it is not yet past + the time up to which the current policy allows the authorities + involved to repudiate their keys. + + If the underlying mechanism supports it and if this information is + contained in the token, information regarding the originator (that + is, the entity which used the protection set of calls to generate + this token) is returned in the Prot_Information parameter bundle. + This information may or may not be omitted if it was returned by the + IDUP_Start_Unprotect() call. + + Note that, unlike GSS-API, IDUP-GSS-API does not incorporate the + concept of error tokens transferred between sender and recipient + since the protection and unprotection of an IDU may be separated by + an indefinite amount of time and may or may not be performed by the + same entity. + +2.4. Special-Purpose Calls + +2.4.1. Relationship to GSS-API + + The special-purpose call described in this section has no analog in + GSS-API [RFC-2078]. This call is used to complete a P-IDU (that is, + to generate a P-IDU which can be unprotected successfully with no + additional data at any time during its validity period). This call + may not be supported by all underlying IDUP mechanisms or + + + +Adams Informational [Page 47] + +RFC 2479 IDUP-GSS-API December 1998 + + + implementations. + +2.4.2. IDUP_Form_Complete_PIDU call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + o single_pidu_buffer OCTET STRING, + o partial_pidu_buffer OCTET STRING, + -- an arbitrary-sized piece of the full pidu token. Used if pidu + -- will be input a buffer at a time (except that the final buffer + -- must be passed in final_pidu_buffer rather than + -- partial_pidu_buffer). Only one of single_pidu_buffer and + -- partial(final)_pidu_buffer can have nonzero length. + o final_pidu_buffer OCTET STRING, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o pidu_token_out OCTET STRING -- the augmented PIDU; may be complete + o call_again_before INTEGER, + o call_again_after INTEGER, + o trusted_time_stamping_time INTEGER -- for information only + + Return major_status codes: + o GSS_S_COMPLETE + o IDUP_S_MORE_OUTBUFFER_NEEDED + o IDUP_S_INCOMPLETE + -- generation of the P-IDU is not yet complete. The application + -- should call this function again before the time given in + -- call_again_before (if not NULL), or after the time given in + -- call_again_after (if not NULL), or both (if neither are NULL). + o IDUP_S_INCONSISTENT_PARAMS + o IDUP_S_SERVICE_UNAVAIL + o GSS_S_DEFECTIVE_TOKEN + o GSS_S_FAILURE + + Form_Complete_PIDU is used primarily by the evidence services; in + particular, when the evidence token itself does not contain all the + data required for its verification and it is anticipated that some of + the data not stored in the token may become unavailable during the + interval between generation of the evidence token and verification + unless it is stored in the token. The Form_Complete_PIDU operation + gathers the missing information and includes it in the token so that + verification can be guaranteed to be possible at any future time. + + This call generates a PIDU which can be unprotected successfully with + no additional data at any time during its validity period. [For + background information on the notion of "complete" evidence, see + + + +Adams Informational [Page 48] + +RFC 2479 IDUP-GSS-API December 1998 + + + "CORBA Security Service v1.2 Draft D02", 18 June 1997.] + + Using the security environment referenced by env_handle, complete the + generation of a P-IDU token and return the appropriate status value + along with the completed token (if available). Such a call may be + used, for example, for the purpose of batch evidence generation on an + "evidence server". A local machine may be able to use the protection + set of calls to fill out most of an evidence token and then send a + number of these to a batch processor which forms the complete + evidence tokens (perhaps by adding a certification path, or a + timestamp and signature from a timestamping authority). As another + example, on the receiving end an application may make such a call in + order to collect all the information necessary to unprotect a P-IDU + (such as all relevant certificates and Certificate Revocation Lists); + this will ensure that the calls to the unprotection set of operations + will be entirely local (i.e., can be performed off-line) and fast. + + Note that the complete P-IDU generated will be formed using trusted + time if this is available in the environment referenced by env_handle + and will use untrusted time or no time otherwise (depending on what + is available). + +2.5. Support calls + +2.5.1. Relationship to GSS-API + + Support calls in IDUP-GSS-API are to be understood and used as + described in GSS-API [RFC-2078]. The calls described in Section 2.4 + of GSS-API (including all associated parameters) are unchanged. The + following additional calls are specified for IDUP-GSS-API. + +2.5.2: IDUP_Acquire_cred_with_auth call + + Inputs: + o desired_name INTERNAL NAME, + -- NULL requests locally-determined default + o authenticator OCTET STRING + -- string which authenticates the caller claiming to be + -- desired_name + o lifetime_req INTEGER, + -- in seconds; 0 requests default + o desired_mechs SET OF OBJECT IDENTIFIER, + -- empty set requests system-selected default + o cred_usage BIT STRING + -- actual values which can be used currently correspond to those + -- given in Section 2.1.1 (i.e., + -- ENCRYPT_ONLY 8 + -- DECRYPT_ONLY 16 + + + +Adams Informational [Page 49] + +RFC 2479 IDUP-GSS-API December 1998 + + + -- SIGN_ONLY 32 + -- VERIFY_ONLY 64 + -- with the values logically OR'ed together in any desired + -- combination to restrict credential usage; OR'ing all values + -- results in NO_RESTRICTION). + -- Future possible values for this parameter are for further + -- study (note that the type of this parameter is BIT STRING + -- (rather than INTEGER as in GSS_Acquire_cred) to facilitate + -- such future expansion). + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o output_cred_handle CREDENTIAL HANDLE, + o actual_mechs SET OF OBJECT IDENTIFIER, + o actual_cred_usage BIT STRING, + o lifetime_rec INTEGER + -- in seconds, or reserved value for INDEFINITE + + This call (which need not be supported by all underlying mechanisms + or implementations) is identical to the GSS_Acquire_cred call, with + the exception of the added input parameter "authenticator" and the + added output parameter "actual_cred_usage". The authenticator + (typically a password, pass-phrase, or PIN) is used to authenticate + the caller claiming to be desired_name to the underlying GSS (or + mechanism) code. The actual_cred_usage specifies the actual uses + available for these credentials; it is up to the caller to determine + if this is sufficient for its purposes. + + Implementations that are able to authenticate the caller in some + other way are encouraged to use the GSS_Acquire_cred call; those + having no other means available to them, or wishing to explicitly + authenticate the caller at the time of credential acquisition, should + use the IDUP_Acquire_cred_with_auth call (if supported). + + Note that the return major status codes for this call are identical + to those given for the GSS_Acquire_cred call. If the authentication + fails (e.g., the wrong authenticator is supplied for the given + desired_name), the major status GSS_S_FAILURE is returned (along with + an appropriate minor status code). + +2.5.3. IDUP_Get_token_details call + + Inputs: + o token OCTET STRING, + -- all the data to be returned shall be within the first 4 KB of + -- the token; hence, a single call is needed. It is not necessary + -- to provide the entire token when the token includes the IDU. + + + +Adams Informational [Page 50] + +RFC 2479 IDUP-GSS-API December 1998 + + + o mech_type SET OF OBJECT IDENTIFIER + -- input if known (typically SET will contain a single member) + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o actual_mech_type OBJECT IDENTIFIER, + o data_included_in_token BOOLEAN, + -- true if the data is encapsulated + o idu_size INTEGER, + o has_SE_protection BOOLEAN, + o has_EV_protection BOOLEAN, + o PIDU_Information PARAMETER BUNDLE, + o nr_policy OBJECT IDENTIFIER, + -- this and subsequent parameters pertain only to evidence tokens + o Nr_Options PARAMETER BUNDLE, + o Originator_Information PARAMETER BUNDLE, + o time_stamping_time INTEGER OPTIONAL + o Request_Features PARAMETER BUNDLE, + -- describes the included request, if any. + o requested_evidence_back BOOLEAN, + -- true if this is an evidence generated in response to a + -- previously-sent request + o evidence_check OCTET STRING, + -- meaningful if the boolean above is true + + Return major_status codes: + o GSS_S_COMPLETE + -- input_token could be parsed for all relevant fields. + o GSS_S_CREDENTIALS_EXPIRED + o GSS_S_DEFECTIVE_TOKEN + -- the mechanism type could be parsed, but either the other fields + -- could not be determined from the input_token, or their values + -- did not correspond to valid values for that mechanism. + o GSS_S_FAILURE + -- the mechanism type was missing or corrupted. + + IDUP_Get_token_details() is used to return to an application the + attributes that correspond to a given input token. Since IDUP-GSS- + API tokens are meant to be opaque to the calling application, this + function allows the application to determine information about the + token without having to violate the opaqueness intention of IDUP. Of + primary importance is the mechanism type, which the application can + then use as input to the IDUP_Establish_Env() call in order to + establish the correct environment in which to have the token + processed. + + + + + +Adams Informational [Page 51] + +RFC 2479 IDUP-GSS-API December 1998 + + + If all tokens are framed as suggested in Section 3.1 of [RFC-2078] + (mandated in the Kerberos V5 GSS mechanism [RFC 1964] and in the SPKM + GSS Mechanism [RFC 2025]), then any mechanism implementation should + be able to return the mech_type parameter for any uncorrupted input + token. If the mechanism implementation whose IDUP_Get_token_details() + function is being called does recognize the token, it can return any + further relevant information in the other token attributes, as + specified. In particular, this function can set has_SE_protection if + the SE calls may be used to unprotect it, or has_EV_protection if the + EV calls may be used to unprotect it, or both if both kinds of + protection have been applied (so that SE or EV calls may be used in + any order for unprotection) [note that GP calls, when supported, + should be usable for unprotection of any IDUP token]. + + IDUP_Get_token_details (which need not be supported by all underlying + mechanisms or implementations) gives only a hint about the content of + the token, there is no integrity check of any kind performed. + Regardless of the token type, it is possible to check that this + information is correct only by doing a proper unprotection of the + token. It is recommended that IDUP callers supply a token buffer at + least 4 KB in length in order to ensure that the desired data can + easily flow across this interface. + + The OID of the mechanism and whether the token contains the + associated data is returned. In addition the size of the associated + data, whether inside or outside the token, is included if known. + [Note: data size will typically be unknown if the data was protected + using multibuffer calls. A value of "-1" may be used to indicate + "UNKNOWN".] + + When the input token contains only an evidence generated + spontaneously, the following is returned: + - the evidence type; + - the Non-Repudiation policy under which the evidence was generated; + - the name of the generator of the evidence; + - the date and time when the evidence was generated (if available); + - the date and time when it was time stamped (if available). + + When the input token contains only an evidence generated in response + to a request from another entity, the following additional + information is returned: + - an indicator to state that this evidence relates to a request; + - a string significant for the requester that will allow him to + check whether the answer corresponds to the requested evidence. + + When the input token only contains a request, the following is + returned: + - the name of the requestor of the evidence, + + + +Adams Informational [Page 52] + +RFC 2479 IDUP-GSS-API December 1998 + + + - the date and time when the request was made, + - the evidence type to send back, + - the non-repudiation policy under which the evidence to send back + should be generated, + - the names of the recipients which should generate and distribute + the requested evidence, + - the names of the recipients to whom the requested evidence should + be sent after it has been generated. + + When the input token contains both evidence and a request, an + indicator is returned describing whether the new evidence should be + generated using only the data in the input token, or using both the + data and the evidence in the input token. + + When the input token contains only CONF and DOA services, the + PIDU_Information bundle is returned. Other relevant parameters (such + as idu_size and time_stamping_time) may also be returned if this data + is available. + +2.5.4. IDUP_Get_policy_info call + + Inputs: + o policy_id OBJECT IDENTIFIER + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + o policy_version INTEGER, + o policy_effective_time INTEGER, + o policy_expiry_time INTEGER, + o supported_services SET OF Service_Descriptor, + -- services supported by this particular policy_id (equal to the + -- intersection of the services supported by the mechanisms + -- listed in supported_mechanisms) + o supported_mechanisms SET OF Mechanism_Descriptor + -- mechanisms supported by this particular policy_id + + Return major_status codes: + o GSS_S_COMPLETE + -- policy_id recognized; all relevant fields have been returned. + o GSS_S_FAILURE + -- the policy_id was not recognized. + + This call (which need not be supported by all underlying mechanisms + or implementations) allows the application to retrieve information + pertaining to a given policy_id. Policies define the following: + - rules for the protection of IDUs, such as trusted third + parties which may be involved in P-IDU generation, the roles in + + + +Adams Informational [Page 53] + +RFC 2479 IDUP-GSS-API December 1998 + + + which they may be involved, and the duration for which the + generated P-IDU is valid; + + - rules for the unprotection of P-IDUs, such as the interval + during which a trusted third party may legitimately declare its + key to have been compromised or revoked; and + + - rules for adjudication, such as which authorities may be used + to adjudicate disputes. + + The policy itself may be used by an adjudicator when resolving a + dispute. For example, the adjudicator might refer to the policy to + determine whether the rules for generation of the P-IDU have been + followed. + + The following parameter bundles are associated with this call. + + o Service_Descriptor PARAMETER BUNDLE, + o service_type OBJECT IDENTIFIER, + o service_validity_duration INTEGER, + o must_use_trusted_time BOOLEAN + + o Mechanism_Descriptor PARAMETER BUNDLE, + o mechanism_type OBJECT IDENTIFIER, + o Authority_List PARAMETER BUNDLE, + o maximum_time_skew INTEGER + -- maximum permissible difference between P-IDU generation + -- time and the time of countersignature from a time + -- service (if required). This parameter is unused if + -- trusted time is not required. + + o Authority_List PARAMETER BUNDLE, + o authority_name INTERNAL NAME, + o authority_role OCTET STRING, + o last_revocation_check_offset INTEGER + -- may be 0, greater than 0, or less than 0. The value of + -- this parameter is added to P-IDU generation time to + -- get latest time at which the mechanism will check to + -- see if this authority's key has been revoked. + + An example of the use of the last parameter in Authority_List is as + follows. If an authority has a defined last_revocation_check_offset + of negative one hour, then all revocations taking effect earlier than + one hour before the generation of a P-IDU will render that P-IDU + invalid; no revocation taking place later than one hour before the + generation of the P-IDU will affect the P-IDU's validity. + + + + + +Adams Informational [Page 54] + +RFC 2479 IDUP-GSS-API December 1998 + + + Note that both the maximum_time_skew and the + last_revocation_check_offset values are given in minutes. + +2.5.5. IDUP_Cancel_multibuffer_op call + + Inputs: + o env_handle ENVIRONMENT HANDLE, + + Outputs: + o major_status INTEGER, + o minor_status INTEGER, + + Return major_status codes: + o GSS_S_COMPLETE + -- operation cancelled; state purged. + o GSS_S_FAILURE + -- unable to cancel operation; state retained. + + This call (which need not be supported by all underlying mechanisms + or implementations) allows the application to cancel a multibuffer + operation prior to normal completion (e.g., subsequent to calling + Start_operation and zero or more Process_operation, but prior to + calling End_operation). When successful, this call purges any + internal state information which would have been used to continue + processing for the full set of multibuffer calls. + +3. Related Activities + + In order to implement the IDUP-GSS-API atop existing, emerging, and + future security mechanisms, the following is necessary: + + - object identifiers must be assigned to candidate IDUP-GSS-API + mechanisms and the name types which they support; and + + - concrete data element (i.e., token and parameter bundle) formats + must be defined for candidate mechanisms. + + Calling applications must implement formatting conventions which will + enable them to distinguish IDUP-GSS-API P-IDUs from other IDUs in + their environment. + + Concrete language bindings are required for the programming + environments in which the IDUP-GSS-API is to be employed. + + + + + + + + +Adams Informational [Page 55] + +RFC 2479 IDUP-GSS-API December 1998 + + +4. Acknowledgments + + Many thanks are due to Tim Moses and Dhanya Thakkar of Entrust + Technologies, Denis Pinkas of Bull, and David Kurn of Tandem + Computers for a number of helpful comments and contributions. + +5. Security Considerations + + Security issues are discussed throughout this memo. + +6. REFERENCES + + [MSP] U.S. National Security Agency, "Message Security + Protocol", Secure Data Network System SDN.701, March + 1994. + + [RFC-1421] Linn, J., "Privacy Enhancement for Internet Electronic + Mail: Part I: Message Encryption and Authentication + Procedures", RFC 1421, February 1993. + + [RFC-2078] Linn, J., "Generic Security Service Application Program + Interface, Version 2", RFC 2078, January 1997.. + + [RFC 1964] Linn, J, "The Kerberos Version 5 GSS-API Mechanism", RFC + 1964, June 1996. + + [RFC 2025] Adams, C., "The Simple Public-Key GSS-API Mechanism + (SPKM)", RFC 2025, October 1996. + + [ISO/IEC] 2nd ISO/IEC CD 13888-1, "Information technology - + Security techniques - Non-repudiation - Part 1: General + Model", ISO/IEC JTC 1/SC 27, May 30, 1995 + +7. Author's Address + + Carlisle Adams + Entrust Technologies + 750 Heron Road, Suite E08, + Ottawa, Ontario, CANADA K1V 1A7 + + Phone: +1 613.247.3180 + EMail: cadams@entrust.com + + + + + + + + + +Adams Informational [Page 56] + +RFC 2479 IDUP-GSS-API December 1998 + + +APPENDIX A: MECHANISM-INDEPENDENT TOKEN FORMAT + + This appendix specifies the use, for IDUP-GSS-API tokens, of the + mechanism-independent level of encapsulating representation for + tokens given in Section 3.1 of GSS-API [RFC-2078]. The + representation given there incorporates an identifier of the + mechanism type to be used when processing the associated tokens. Use + of that octet format is recommended to the designers of IDUP-GSS-API + implementations based on various mechanisms so that tokens can be + interpreted unambiguously at IDUP-GSS-API peers. It is recognized, + however, that for interoperability purposes with peers not using IDUP + for specific IDU protection/unprotection protocols, the encapsulating + representation may need to be omitted. (In such a case it is + necessary that the underlying mechanism provides some sort of + internal or external identification that allows it to recognize its + own tokens.) When the mechanism-independent level of encapsulating + representation is not desired, callers SHOULD set + mech_indep_encap_req to FALSE (note that some underlying mechanisms + may default this parameter to FALSE). + + For purely descriptive purposes, the following simple ASN.1 structure + is used to illustrate the structural relationships among token and + tag objects. For interoperability purposes, token and tag encoding + shall be performed using the concrete encoding procedures described + in Section 3.1 of GSS-API [RFC-2078]. + + -- top-level token definition to frame different mechanisms + + IDUP-GSS-API DEFINITIONS ::= + BEGIN + MechType ::= OBJECT IDENTIFIER + + Token ::= [APPLICATION 0] IMPLICIT SEQUENCE { + thisMech MechType, + token ANY DEFINED BY thisMech + -- contents mechanism-specific + } + END + + + + + + + + + + + + + +Adams Informational [Page 57] + +RFC 2479 IDUP-GSS-API December 1998 + + +APPENDIX B: EXAMPLES OF IDUP USE + + This appendix provides examples of the use of IDUP to do IDU + protection and unprotection. It should not be regarded as + constrictive to implementations or as defining the only means through + which IDUP-GSS-API functions can be realized with particular + underlying technology, and does not demonstrate all IDUP-GSS-API + features. + + Most of the examples below only illustrate the use of CONF/DOA + protection services. Note that when both CONF/DOA and Evidence + services are required, calling applications may use a series of SE + and EV calls, or may use the GP calls (when these are supported). + Using the former approach implies multiple calls (e.g., the SE calls + are used to protect some data and the resulting token is then input + to the EV calls to add evidence information), but some callers may + find this to be more attractive than coding to the GP calls because + of the simpler SE/EV interface. Depending upon the underlying + mechanism, the series of SE/EV calls may result in a single token + that can be unprotected using the SE and EV calls in any order (for + example, because it is a single ASN.1 SEQUENCE that incorporates all + the specified protection services at one level), or the series may + result in a token that can only be unprotected in the reverse order + of protection (for example, because each SE/EV output token was + effectively embedded in the token of the subsequent call). The + IDUP_Get_token_details call can assist callers in determining how to + unprotect any received token. + +B.1. Simple Mechanism, Single Buffer + + To illustrate the simplest possible case, consider an underlying IDUP + mechanism which does straightforward encryption/decryption and + signing/verification only using public-key techniques; none of the + other possible services, such as creation of proof-of-origin + evidence, requests for proof-of-delivery evidence, or use of trusted + time, are supported. PEM[RFC-1421] is one example of a mechanism + which fits this description. Furthermore (again for simplicity), + assume that encapsulation is chosen by the calling application during + IDU protection. + + Such a mechanism would likely use the "SE" set of IDUP-GSS-API calls. + The following parameter bundle uses and defaults would therefore be + specified in the relevant IDUP mechanism document. + + + + + + + + +Adams Informational [Page 58] + +RFC 2479 IDUP-GSS-API December 1998 + + + SENDER: + + Set + env_handle = environment handle in use; + idu_buffer = data buffer; + Target_Info.targ_names = receiver names; + Protect_Options = as necessary; + + Call + IDUP_SE_SingleBuffer_Protect() with above input parameters + + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + Target_Info.Bad_Targ_Name, + (as required) for more detailed information. + + Send + Output parameter pidu_buffer to receiver. + + RECEIVER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + pidu_buffer = received data buffer; + + Call + IDUP_SE_SingleBuffer_Unprotect() with above input parameters + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + (as required) for more detailed information + + Utilize + PIDU_Information.Protect_Options.Protect_Operation, + (to determine which services were applied by the originator) + PIDU_Information.Protect_Options.sign_qop_alg / enc_qop_alg, + (to determine the corresponding qualities of the services) + Prot_Information.originator_name, + (to determine the name of the originator) + Prot_Information.protection_time, + (to determine when the IDU was protected) + idu_buffer + (to retrieve the unprotected data). + + + + + + + +Adams Informational [Page 59] + +RFC 2479 IDUP-GSS-API December 1998 + + +B.2. Simple Mechanism, Single Buffer (Again) + + To illustrate a slight variation on the simplest possible case, + assume that everything is as in the previous scenario except that the + "GP" calls are used. + + The following parameter bundle uses and defaults would therefore be + specified in the relevant IDUP mechanism document. + + Mech_Specific_Info + - NOT USED (the only acceptable input, therefore, is NULL) + + Idu_Sensitivity + - NOT USED (the only acceptable input, therefore, is NULL) + + Service_Creation_Info + - NOT USED (the only acceptable input, therefore, is NULL) + + Service_Verification_Info + - NOT USED (the only acceptable input, therefore, is NULL) + + Quality + - the qop_algs parameter must be supported, with a suitable + DEFAULT value specified; + - suitable DEFAULT values for validity, policy_id, and + allow_policy_mapping must be specified (it may be an + implementation option as to whether these parameters are + explicitly modifiable by the calling application, or whether + NULLs are the only acceptable input) + + Idu_Information + - the idu_type parameter must have a value representing a suitable + IDU type (for example, in PEM a value representing the string + "RFC822" or some other valid "Content-Domain" would be used), + with a suitable DEFAULT value specified; + - the idu_title parameter is NOT USED (the only acceptable input, + therefore, is NULL) + + Prot_Information + - the originator_name and idu_type (in Idu_Information) parameters + are read from the encapsulating information and output by + IDUP_Start_Unprotect; + - all other parameters are NOT USED (and therefore NULL) + + Special_Conditions + - NOT USED (the only acceptable input, therefore, is NULL) + + + + + +Adams Informational [Page 60] + +RFC 2479 IDUP-GSS-API December 1998 + + + Target_Info + - this bundle is used as described in IDUP; no DEFAULT values are + specified + + General_Service_Data + - the unencapsulated_token parameter is used if + encapsulation_request is FALSE; + - the minor_status parameter is used to return minor status values + as specified by the mechanism document + + Prot_Service + - the prot_service_type parameter may have a value of "1" + ("perform unsolicited service") or NULL (which specifies the + DEFAULT value of "1"); + - the service_id parameter must have a value representing + "PER_CONF" or "PER_DOA"; + - the parameters Service_Creation_Info, service_to, + Service_Verification_Info, and service_verification_info_id are + NOT USED (and therefore NULL) + + Unprot_Service + - the unprot_service_type parameter will always have a value of + "1" ("receive unsolicited service"); + - the service_id parameter will have a value representing + "REC_CONF" or "REC_DOA"; + - the parameters service_verification_info_id, + Service_Verification_Info, service_to, and + Service_Creation_Info, are NOT USED (and therefore NULL) + + Assuming that the calling application has only a single buffer of + data to protect/unprotect, the following sequence of operations must + be performed by the sender and receivers (subsequent to environment + establishment). + + SENDER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + encapsulation_request = TRUE; + single_idu_buffer = data buffer; + Target_Info.targ_names = receiver names; + P_Services.Prot_Service_1.service_id = PER_CONF; + P_Services.Prot_Service_2.service_id = PER_DOA; + + Call + IDUP_Start_Protect() with above input parameters + + + + + +Adams Informational [Page 61] + +RFC 2479 IDUP-GSS-API December 1998 + + + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + Target_Info.bad_targ_names / Target_Info.bad_targ_status, + P_Services.Prot_Service_1.General_Service_Data.minor_status, + P_Services.Prot_Service_2.General_Service_Data.minor_status + (as required) for more detailed information. + + Send + Output parameter pidu_buffer to receiver. + + + RECEIVER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + single_pidu_buffer = received data buffer; + + Call + IDUP_Start_Unprotect() with above input parameters + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status, + R_Services.Unprot_Service_2.General_Service_Data.minor_status + (as required) for more detailed information + + Utilize + R_Services.Unprot_Service_1/2.service_id, + (to determine which services were applied by the originator) + R_Services.Unprot_Service_1/2.Quality, + (to determine the corresponding qualities of the services) + Prot_Information.originator_name, + (to determine the name of the originator) + single_idu_buffer + (to retrieve the unprotected data). + +B.3. Simple Mechanism, Multiple Buffers + + To illustrate the next step up in complexity, consider the use of the + simple IDUP mechanism described in B.2 above with multiple data + buffers. In particular, consider the case in which a large data file + is to be signed. For this example, assume that the calling + application does not wish to use encapsulation. + + Note that the parameter bundle uses and defaults are as specified in + B.2. above. + + + + +Adams Informational [Page 62] + +RFC 2479 IDUP-GSS-API December 1998 + + + SENDER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + encapsulation_request = FALSE; + P_Services.Prot_Service.service_id = PER_DOA; + + Call + IDUP_Start_Protect() with above input parameters + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + P_Services.Prot_Service.General_Service_Data.minor_status + (as required) for more detailed information. + + For each buffer of input data: + Set + input_buffer = buffer + Call + IDUP_Protect() with above input parameter + Check + major_status. If not GSS_S_COMPLETE, check + minor_status + + Call + IDUP_End_Protect() + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + P_Services.Prot_Service.General_Service_Data.minor_status + (as required) for more detailed information. + + Send + P_Services.Prot_Service.General_Service_Data.unencapsulated_token, + and the file for which the signature was calculated (if required), + to receiver. + + RECEIVER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + R_Services.Unprot_Service_1.General_Service_Data. + unencapsulated_token = received unencapsulated token; + + Call + IDUP_Start_Unprotect() with above input parameters + Check + major_status. If not GSS_S_COMPLETE, check + + + +Adams Informational [Page 63] + +RFC 2479 IDUP-GSS-API December 1998 + + + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status, + (as required) for more detailed information + + For each buffer of input data: + Set + input_buffer = buffer + Call + IDUP_Unprotect() with above input parameter + Check + major_status. If not GSS_S_COMPLETE, check + minor_status + + Call + IDUP_End_Unprotect() + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status, + (as required) for more detailed information. + + Utilize + R_Services.Unprot_Service_1.service_id, + (to determine which service was applied by the originator; note + that Unprot_Service_2 will have NULL in unprot_service_type + to indicate that it is not used) + R_Services.Unprot_Service_1.Quality, + (to determine the corresponding quality of the service) + Prot_Information.originator_name, (from IDUP_Start_Unprotect) + (to determine the name of the signer) + major_status (from IDUP_End_Unprotect) + (to determine pass/fail status of signature verification). + +B.4. More Sophisticated Mechanism, Small Application Buffers + + To illustrate a higher level of complexity, consider the use of a + more sophisticated IDUP mechanism and a calling application with + small data buffers. In particular, consider the case in which a very + small e-mail message is to be encrypted for a relatively large + receiver list (R), some subset of whom (r) will be asked to send + proofs of receipt of the message to some other subset (L) (which + includes the originator). So that the example is not unnecessarily + complicated, assume again that the originating application uses + encapsulation. + + The uses and defaults for the various parameter bundles for this + mechanism would be specified in the relevant IDUP mechanism document + as follows. + + + +Adams Informational [Page 64] + +RFC 2479 IDUP-GSS-API December 1998 + + + Mech_Specific_Info + - NOT USED (the only acceptable input, therefore, is NULL) + + Idu_Sensitivity + - NOT USED (the only acceptable input, therefore, is NULL) + + Service_Creation_Info + - used to create "proof of delivery" evidence (but actual + structure is opaque to calling application) + + Service_Verification_Info + - used to verify "proof of delivery" evidence (but actual + structure is opaque to calling application) + + Quality + - the qop_algs parameter must be supported, with a suitable + DEFAULT value specified; + - suitable DEFAULT values for validity, policy_id, and + allow_policy_mapping must be specified (it may be an + implementation option as to whether these parameters are + explicitly modifiable by the calling application, or whether + NULLs are the only acceptable input) + + Idu_Information + - the idu_type parameter must have a value representing a suitable + IDU type, with a suitable DEFAULT value specified; + - the idu_title parameter must have a value representing a + suitable IDU title, with a suitable DEFAULT value specified + + Prot_Information + - the originator_name, protection_time, and idu_type / idu_title + (in Idu_Information) parameters are read from the contained + header information and output by IDUP_Start_Unprotect; + + Special_Conditions + - the parameter prot_oper_id is NOT USED (the only acceptable + input, therefore, is NULL); + - trusted or untrusted time may be selected by the calling + application, with a suitable DEFAULT value specified + + Target_Info + - this bundle is used as described in IDUP; no DEFAULT values are + specified + + General_Service_Data + - the unencapsulated_token parameter is used if + encapsulation_request is FALSE; + - the minor_status parameter is used to return minor status values + + + +Adams Informational [Page 65] + +RFC 2479 IDUP-GSS-API December 1998 + + + as specified by the mechanism document + + Prot_Service + - the prot_service_type parameter may have a value of "1" + ("perform unsolicited service"), "2" ("perform solicited + service"), "3" (perform service solicitation), or NULL (which + specifies the DEFAULT value of "1"); + - the service_id parameter must have a value representing + "PER_CONF", "PER_DOA", "PER_POO", or "PER_POD"; + - the parameters Service_Creation_Info, service_to, + Service_Verification_Info, and service_verification_info_id are + used when required by the IDUP operation + + Unprot_Service + - the unprot_service_type parameter may have a value of "1" + ("receive unsolicited service"), "2" ("receive solicited + service"), or "3" (receive service solicitation); + - the service_id parameter will have a value representing + "REC_CONF", "REC_DOA", "REC_POO", or "REC_POD"; + - the parameters service_verification_info_id, + Service_Verification_Info, service_to, and + Service_Creation_Info, are used when required by the IDUP + operation + + + SENDER (any parameters not listed below are given the value NULL): + + Set + env_handle = environment handle in use; + Idu_Information.idu_type = value for "e-mail document"; + Idu_Information.idu_title = "Contract 1234"; + Special_Conditions.use_trusted_time = TRUE; + encapsulation_request = TRUE; + single_idu_buffer = very small e-mail message; + Target_Info.targ_names = receiver names (R); + Prot_Service_1.prot_service_type = "1"; + Prot_Service_1.service_id = PER_CONF; + Prot_Service_2.prot_service_type = "3"; + Prot_Service_2.service_id = PER_POD; + Prot_Service_2.General_Service_Data.Target_Info.targ_names + = "receipts from" list (r); + Prot_Service_2.service_to = "receipts to" list (L); + P_Services.Prot_Service_1 = Prot_Service_1; + P_Services.Prot_Service_2 = Prot_Service_2; + + Call + IDUP_Start_Protect() with above input parameters + + + + +Adams Informational [Page 66] + +RFC 2479 IDUP-GSS-API December 1998 + + + Check + major_status. If not GSS_S_COMPLETE, + while major_status == IDUP_S_MORE_OUTBUFFER_NEEDED + Save + pidu_buffer, + Call + IDUP_Start_Protect() (to get next portion of pidu_buffer) + Check + major_status, + minor_status, + Target_Info.bad_targ_names / Target_Info.bad_targ_status, + P_Services.Prot_Service_1.General_Service_Data.minor_status, + P_Services.Prot_Service_2.General_Service_Data.minor_status + (as required) for more detailed information. + + Save + Prot_Service_2.Service_Verification_Info, + Prot_Service_2.service_verification_info_id + + Send + All saved buffers of pidu_buffer to receiver list (R). + + + RECEIVER (ON RECEIVER LIST (R)): + (any parameters not listed below are given the value NULL) + + Set + env_handle = environment handle in use; + partial_pidu_buffer = initial buffer of received p-idu; + + Call + IDUP_Start_Unprotect() with above input parameters + While major_status == IDUP_S_MORE_PIDU_NEEDED, + Set + partial_pidu_buffer = next buffer of p-idu + Call + IDUP_Start_Unprotect() + Check + major_status, + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status, + R_Services.Unprot_Service_2.General_Service_Data.minor_status, + (as required) for more detailed information + + Save + initial_idu_buffer (if non-empty) + + + + + +Adams Informational [Page 67] + +RFC 2479 IDUP-GSS-API December 1998 + + + Set + input_buffer = remaining p-idu buffer + Call + IDUP_Unprotect() with above input parameter + Check + major_status. If not GSS_S_COMPLETE, check + minor_status + Save + output_buffer + + Call + IDUP_End_Unprotect() + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status, + R_Services.Unprot_Service_2.General_Service_Data.minor_status, + (as required) for more detailed information. + + Utilize + R_Services.Unprot_Service_1/2.service_id, + (to determine which services were applied by the originator) + R_Services.Unprot_Service_1/2.Quality, + (to determine the corresponding qualities of the service) + Prot_Information.originator_name/protection_time and + Prot_Information.Idu_Information.idu_type/idu_title, + (from IDUP_Start_Unprotect) (to determine originator info.) + R_Services.Unprot_Service_2.General_Service_Data.Target_Info. + targ.names, (to determine if rec. is in "receipts from" (r)) + Service_Verification_Info/service_verification_info_id + (to determine if receiver is in "receipts to" list (L)) + + If receiver is in "receipts from" list (r) + Save + R_Services.Unprot_Service_2.service_to, + R_Services.Unprot_Service_2.Service_Creation_Info + + If receiver is in "receipts to" list (L) + Save + Service_Verification_Info, + service_verification_info_id + + RECEIVER (ON "RECEIPTS FROM" LIST (r)): + (procedure to generate receipt) + + Set + env_handle = environment handle in use; + Target_Info.targ_names = service_to + + + +Adams Informational [Page 68] + +RFC 2479 IDUP-GSS-API December 1998 + + + Prot_Service_1.prot_service_type = "2"; + Prot_Service_1.service_id = "PER_POD"; + Prot_Service_1.Service_Creation_Info = Service_Creation_Info; + P_Services.Prot_Service_1 = Prot_Service_1 + + Call + IDUP_Start_Protect() with above input parameters + Check + major_status. If not GSS_S_COMPLETE, check + minor_status, + P_Services.Prot_Service_1.General_Service_Data.minor_status + (as required) for more detailed information. + + Send + pidu_buffer to "receipts to" list (L) + + RECEIVER (ON "RECEIPTS TO" LIST (L)): + (procedure to process received receipt) + + Set + env_handle = environment handle in use; + single_pidu_buffer = received p-idu buffer (if it fits in a single + buffer; otherwise use partial_pidu_buffer and make multiple + calls, as above) + + Call + IDUP_Start_Unprotect() with above input parameters + If major_status == IDUP_S_SERV_VERIF_INFO_NEEDED + Utilize + R_Services.Unprot_Service_1.service_verification_info.id + (to assist in locating necessary Service_Verification_Info) + Set + R_Services.Unprot_Service_1.Service_Verification_Info + = Service_Verification_Info + Call + IDUP_Start_Unprotect() with above input parameters + Check + major_status, + minor_status, + R_Services.Unprot_Service_1.General_Service_Data.minor_status + (as required) for more detailed information. + + Utilize + R_Services.Unprot_Service_1.service_id, + (to determine that this is a "proof of delivery" evidence) + R_Services.Unprot_Service_1.Quality, + Prot_Information.originator_name, (for evidence generator info.) + major_status (to determine pass/fail status of evi. verif.). + + + +Adams Informational [Page 69] + +RFC 2479 IDUP-GSS-API 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. + + + + + + + + + + + + + + + + + + + + + + + + +Adams Informational [Page 70] + |