freerdp/winpr/libwinpr/sspi/sspi_gss.h

681 lines
35 KiB
C

/**
* FreeRDP: A Remote Desktop Protocol Implementation
* Generic Security Service Application Program Interface (GSSAPI)
*
* Copyright 2015 ANSSI, Author Thomas Calderon
* Copyright 2015 Marc-Andre Moreau <marcandre.moreau@gmail.com>
* Copyright 2017 Dorian Ducournau <dorian.ducournau@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef FREERDP_SSPI_GSS_PRIVATE_H
#define FREERDP_SSPI_GSS_PRIVATE_H
#include <winpr/crt.h>
#include <winpr/sspi.h>
/**
* The following are ABI-compatible, non-conflicting GSSAPI definitions
*
* http://tools.ietf.org/html/rfc2743
* http://tools.ietf.org/html/rfc2744
*/
#define SSPI_GSSAPI
#define SSPI_GSSOID
struct sspi_gss_name_struct;
typedef struct sspi_gss_name_struct* sspi_gss_name_t;
struct sspi_gss_cred_id_struct;
typedef struct sspi_gss_cred_id_struct* sspi_gss_cred_id_t;
struct sspi_gss_ctx_id_struct;
typedef struct sspi_gss_ctx_id_struct* sspi_gss_ctx_id_t;
typedef struct sspi_gss_OID_desc_struct
{
UINT32 length;
void* elements;
} sspi_gss_OID_desc, *sspi_gss_OID;
typedef struct sspi_gss_OID_set_desc_struct
{
size_t count;
sspi_gss_OID elements;
} sspi_gss_OID_set_desc, *sspi_gss_OID_set;
typedef struct sspi_gss_buffer_desc_struct
{
size_t length;
void* value;
} sspi_gss_buffer_desc, *sspi_gss_buffer_t;
typedef struct sspi_gss_channel_bindings_struct
{
UINT32 initiator_addrtype;
sspi_gss_buffer_desc initiator_address;
UINT32 acceptor_addrtype;
sspi_gss_buffer_desc acceptor_address;
sspi_gss_buffer_desc application_data;
} * sspi_gss_channel_bindings_t;
typedef UINT32 sspi_gss_qop_t;
typedef int sspi_gss_cred_usage_t;
#define SSPI_GSS_C_DELEG_FLAG 1
#define SSPI_GSS_C_MUTUAL_FLAG 2
#define SSPI_GSS_C_REPLAY_FLAG 4
#define SSPI_GSS_C_SEQUENCE_FLAG 8
#define SSPI_GSS_C_CONF_FLAG 16
#define SSPI_GSS_C_INTEG_FLAG 32
#define SSPI_GSS_C_ANON_FLAG 64
#define SSPI_GSS_C_PROT_READY_FLAG 128
#define SSPI_GSS_C_TRANS_FLAG 256
#define SSPI_GSS_C_DELEG_POLICY_FLAG 32768
#define SSPI_GSS_C_BOTH 0
#define SSPI_GSS_C_INITIATE 1
#define SSPI_GSS_C_ACCEPT 2
#define SSPI_GSS_C_GSS_CODE 1
#define SSPI_GSS_C_MECH_CODE 2
#define SSPI_GSS_C_AF_UNSPEC 0
#define SSPI_GSS_C_AF_LOCAL 1
#define SSPI_GSS_C_AF_INET 2
#define SSPI_GSS_C_AF_IMPLINK 3
#define SSPI_GSS_C_AF_PUP 4
#define SSPI_GSS_C_AF_CHAOS 5
#define SSPI_GSS_C_AF_NS 6
#define SSPI_GSS_C_AF_NBS 7
#define SSPI_GSS_C_AF_ECMA 8
#define SSPI_GSS_C_AF_DATAKIT 9
#define SSPI_GSS_C_AF_CCITT 10
#define SSPI_GSS_C_AF_SNA 11
#define SSPI_GSS_C_AF_DECnet 12
#define SSPI_GSS_C_AF_DLI 13
#define SSPI_GSS_C_AF_LAT 14
#define SSPI_GSS_C_AF_HYLINK 15
#define SSPI_GSS_C_AF_APPLETALK 16
#define SSPI_GSS_C_AF_BSC 17
#define SSPI_GSS_C_AF_DSS 18
#define SSPI_GSS_C_AF_OSI 19
#define SSPI_GSS_C_AF_NETBIOS 20
#define SSPI_GSS_C_AF_X25 21
#define SSPI_GSS_C_AF_NULLADDR 255
#define SSPI_GSS_C_NO_NAME ((sspi_gss_name_t)0)
#define SSPI_GSS_C_NO_BUFFER ((sspi_gss_buffer_t)0)
#define SSPI_GSS_C_NO_OID ((sspi_gss_OID)0)
#define SSPI_GSS_C_NO_OID_SET ((sspi_gss_OID_set)0)
#define SSPI_GSS_C_NO_CONTEXT ((sspi_gss_ctx_id_t)0)
#define SSPI_GSS_C_NO_CREDENTIAL ((sspi_gss_cred_id_t)0)
#define SSPI_GSS_C_NO_CHANNEL_BINDINGS ((sspi_gss_channel_bindings_t)0)
#define SSPI_GSS_C_EMPTY_BUFFER \
{ \
0, NULL \
}
#define SSPI_GSS_C_NULL_OID SSPI_GSS_C_NO_OID
#define SSPI_GSS_C_NULL_OID_SET SSPI_GSS_C_NO_OID_SET
#define SSPI_GSS_C_QOP_DEFAULT 0
#define SSPI_GSS_C_INDEFINITE ((UINT32)0xFFFFFFFF)
#define SSPI_GSS_S_COMPLETE 0
#define SSPI_GSS_C_CALLING_ERROR_OFFSET 24
#define SSPI_GSS_C_ROUTINE_ERROR_OFFSET 16
#define SSPI_GSS_C_SUPPLEMENTARY_OFFSET 0
#define SSPI_GSS_C_CALLING_ERROR_MASK ((UINT32)0377)
#define SSPI_GSS_C_ROUTINE_ERROR_MASK ((UINT32)0377)
#define SSPI_GSS_C_SUPPLEMENTARY_MASK ((UINT32)0177777)
#define SSPI_GSS_CALLING_ERROR(_x) \
((_x) & (SSPI_GSS_C_CALLING_ERROR_MASK << SSPI_GSS_C_CALLING_ERROR_OFFSET))
#define SSPI_GSS_ROUTINE_ERROR(_x) \
((_x) & (SSPI_GSS_C_ROUTINE_ERROR_MASK << SSPI_GSS_C_ROUTINE_ERROR_OFFSET))
#define SSPI_GSS_SUPPLEMENTARY_INFO(_x) \
((_x) & (SSPI_GSS_C_SUPPLEMENTARY_MASK << SSPI_GSS_C_SUPPLEMENTARY_OFFSET))
#define SSPI_GSS_ERROR(_x) \
((_x) & ((SSPI_GSS_C_CALLING_ERROR_MASK << SSPI_GSS_C_CALLING_ERROR_OFFSET) | \
(SSPI_GSS_C_ROUTINE_ERROR_MASK << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)))
#define SSPI_GSS_S_CALL_INACCESSIBLE_READ (((UINT32)1) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
#define SSPI_GSS_S_CALL_INACCESSIBLE_WRITE (((UINT32)2) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
#define SSPI_GSS_S_CALL_BAD_STRUCTURE (((UINT32)3) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_MECH (((UINT32)1) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_NAME (((UINT32)2) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_NAMETYPE (((UINT32)3) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_BINDINGS (((UINT32)4) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_STATUS (((UINT32)5) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_SIG (((UINT32)6) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_NO_CRED (((UINT32)7) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_NO_CONTEXT (((UINT32)8) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_DEFECTIVE_TOKEN (((UINT32)9) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_DEFECTIVE_CREDENTIAL (((UINT32)10) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_CREDENTIALS_EXPIRED (((UINT32)11) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_CONTEXT_EXPIRED (((UINT32)12) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_FAILURE (((UINT32)13) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_QOP (((UINT32)14) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_UNAUTHORIZED (((UINT32)15) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_UNAVAILABLE (((UINT32)16) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_DUPLICATE_ELEMENT (((UINT32)17) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_NAME_NOT_MN (((UINT32)18) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_BAD_MECH_ATTR (((UINT32)19) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
#define SSPI_GSS_S_CONTINUE_NEEDED (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 0))
#define SSPI_GSS_S_DUPLICATE_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 1))
#define SSPI_GSS_S_OLD_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 2))
#define SSPI_GSS_S_UNSEQ_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 3))
#define SSPI_GSS_S_GAP_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 4))
#define SSPI_GSS_C_PRF_KEY_FULL 0
#define SSPI_GSS_C_PRF_KEY_PARTIAL 1
#ifdef __cplusplus
extern "C"
{
#endif
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_USER_NAME;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_MACHINE_UID_NAME;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_STRING_UID_NAME;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_HOSTBASED_SERVICE_X;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_HOSTBASED_SERVICE;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_ANONYMOUS;
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_EXPORT_NAME;
UINT32 SSPI_GSSAPI sspi_gss_acquire_cred(UINT32* minor_status, sspi_gss_name_t desired_name,
UINT32 time_req, sspi_gss_OID_set desired_mechs,
sspi_gss_cred_usage_t cred_usage,
sspi_gss_cred_id_t* output_cred_handle,
sspi_gss_OID_set* actual_mechs, UINT32* time_rec);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_acquire_cred)(
UINT32* minor_status, sspi_gss_name_t desired_name, UINT32 time_req,
sspi_gss_OID_set desired_mechs, sspi_gss_cred_usage_t cred_usage,
sspi_gss_cred_id_t* output_cred_handle, sspi_gss_OID_set* actual_mechs, UINT32* time_rec);
UINT32 SSPI_GSSAPI sspi_gss_release_cred(UINT32* minor_status, sspi_gss_cred_id_t* cred_handle);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_cred)(UINT32* minor_status,
sspi_gss_cred_id_t* cred_handle);
UINT32 SSPI_GSSAPI sspi_gss_init_sec_context(
UINT32* minor_status, sspi_gss_cred_id_t claimant_cred_handle,
sspi_gss_ctx_id_t* context_handle, sspi_gss_name_t target_name, sspi_gss_OID mech_type,
UINT32 req_flags, UINT32 time_req, sspi_gss_channel_bindings_t input_chan_bindings,
sspi_gss_buffer_t input_token, sspi_gss_OID* actual_mech_type,
sspi_gss_buffer_t output_token, UINT32* ret_flags, UINT32* time_rec);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_init_sec_context)(
UINT32* minor_status, sspi_gss_cred_id_t claimant_cred_handle,
sspi_gss_ctx_id_t* context_handle, sspi_gss_name_t target_name, sspi_gss_OID mech_type,
UINT32 req_flags, UINT32 time_req, sspi_gss_channel_bindings_t input_chan_bindings,
sspi_gss_buffer_t input_token, sspi_gss_OID* actual_mech_type,
sspi_gss_buffer_t output_token, UINT32* ret_flags, UINT32* time_rec);
UINT32 SSPI_GSSAPI sspi_gss_accept_sec_context(
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
sspi_gss_cred_id_t acceptor_cred_handle, sspi_gss_buffer_t input_token_buffer,
sspi_gss_channel_bindings_t input_chan_bindings, sspi_gss_name_t* src_name,
sspi_gss_OID* mech_type, sspi_gss_buffer_t output_token, UINT32* ret_flags,
UINT32* time_rec, sspi_gss_cred_id_t* delegated_cred_handle);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_accept_sec_context)(
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
sspi_gss_cred_id_t acceptor_cred_handle, sspi_gss_buffer_t input_token_buffer,
sspi_gss_channel_bindings_t input_chan_bindings, sspi_gss_name_t* src_name,
sspi_gss_OID* mech_type, sspi_gss_buffer_t output_token, UINT32* ret_flags,
UINT32* time_rec, sspi_gss_cred_id_t* delegated_cred_handle);
UINT32 SSPI_GSSAPI sspi_gss_process_context_token(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t token_buffer);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_process_context_token)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t token_buffer);
UINT32 SSPI_GSSAPI sspi_gss_delete_sec_context(UINT32* minor_status,
sspi_gss_ctx_id_t* context_handle,
sspi_gss_buffer_t output_token);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_delete_sec_context)(UINT32* minor_status,
sspi_gss_ctx_id_t* context_handle,
sspi_gss_buffer_t output_token);
UINT32 SSPI_GSSAPI sspi_gss_context_time(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
UINT32* time_rec);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_context_time)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
UINT32* time_rec);
UINT32 SSPI_GSSAPI sspi_gss_get_mic(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
sspi_gss_qop_t qop_req, sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_get_mic)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_qop_t qop_req,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token);
UINT32 SSPI_GSSAPI sspi_gss_verify_mic(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token,
sspi_gss_qop_t* qop_state);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_verify_mic)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token,
sspi_gss_qop_t* qop_state);
UINT32 SSPI_GSSAPI sspi_gss_wrap(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
int conf_req_flag, sspi_gss_qop_t qop_req,
sspi_gss_buffer_t input_message_buffer, int* conf_state,
sspi_gss_buffer_t output_message_buffer);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_wrap)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
int conf_req_flag, sspi_gss_qop_t qop_req,
sspi_gss_buffer_t input_message_buffer,
int* conf_state,
sspi_gss_buffer_t output_message_buffer);
UINT32 SSPI_GSSAPI sspi_gss_unwrap(UINT32* minor_status, const sspi_gss_ctx_id_t context_handle,
const sspi_gss_buffer_t input_message_buffer,
sspi_gss_buffer_t output_message_buffer, int* conf_state,
sspi_gss_qop_t* qop_state);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_unwrap)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t input_message_buffer,
sspi_gss_buffer_t output_message_buffer,
int* conf_state, sspi_gss_qop_t* qop_state);
UINT32 SSPI_GSSAPI sspi_gss_display_status(UINT32* minor_status, UINT32 status_value,
int status_type, sspi_gss_OID mech_type,
UINT32* message_context,
sspi_gss_buffer_t status_string);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_display_status)(UINT32* minor_status,
UINT32 status_value, int status_type,
sspi_gss_OID mech_type,
UINT32* message_context,
sspi_gss_buffer_t status_string);
UINT32 SSPI_GSSAPI sspi_gss_indicate_mechs(UINT32* minor_status, sspi_gss_OID_set* mech_set);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_indicate_mechs)(UINT32* minor_status,
sspi_gss_OID_set* mech_set);
UINT32 SSPI_GSSAPI sspi_gss_compare_name(UINT32* minor_status, sspi_gss_name_t name1,
sspi_gss_name_t name2, int* name_equal);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_compare_name)(UINT32* minor_status,
sspi_gss_name_t name1,
sspi_gss_name_t name2, int* name_equal);
UINT32 SSPI_GSSAPI sspi_gss_display_name(UINT32* minor_status, sspi_gss_name_t input_name,
sspi_gss_buffer_t output_name_buffer,
sspi_gss_OID* output_name_type);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_display_name)(UINT32* minor_status,
sspi_gss_name_t input_name,
sspi_gss_buffer_t output_name_buffer,
sspi_gss_OID* output_name_type);
UINT32 SSPI_GSSAPI sspi_gss_import_name(UINT32* minor_status,
sspi_gss_buffer_t input_name_buffer,
sspi_gss_OID input_name_type,
sspi_gss_name_t* output_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_name)(UINT32* minor_status,
sspi_gss_buffer_t input_name_buffer,
sspi_gss_OID input_name_type,
sspi_gss_name_t* output_name);
UINT32 SSPI_GSSAPI sspi_gss_release_name(UINT32* minor_status, sspi_gss_name_t* input_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_name)(UINT32* minor_status,
sspi_gss_name_t* input_name);
UINT32 SSPI_GSSAPI sspi_gss_release_buffer(UINT32* minor_status, sspi_gss_buffer_t buffer);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_buffer)(UINT32* minor_status,
sspi_gss_buffer_t buffer);
UINT32 SSPI_GSSAPI sspi_gss_release_oid_set(UINT32* minor_status, sspi_gss_OID_set* set);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_oid_set)(UINT32* minor_status,
sspi_gss_OID_set* set);
UINT32 SSPI_GSSAPI sspi_gss_inquire_cred(UINT32* minor_status, sspi_gss_cred_id_t cred_handle,
sspi_gss_name_t* name, UINT32* lifetime,
sspi_gss_cred_usage_t* cred_usage,
sspi_gss_OID_set* mechanisms);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_cred)(UINT32* minor_status,
sspi_gss_cred_id_t cred_handle,
sspi_gss_name_t* name, UINT32* lifetime,
sspi_gss_cred_usage_t* cred_usage,
sspi_gss_OID_set* mechanisms);
UINT32 SSPI_GSSAPI sspi_gss_inquire_context(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_name_t* src_name,
sspi_gss_name_t* targ_name, UINT32* lifetime_rec,
sspi_gss_OID* mech_type, UINT32* ctx_flags,
int* locally_initiated, int* open);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_context)(
UINT32* minor_status, sspi_gss_ctx_id_t context_handle, sspi_gss_name_t* src_name,
sspi_gss_name_t* targ_name, UINT32* lifetime_rec, sspi_gss_OID* mech_type,
UINT32* ctx_flags, int* locally_initiated, int* open);
UINT32 SSPI_GSSAPI sspi_gss_wrap_size_limit(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle, int conf_req_flag,
sspi_gss_qop_t qop_req, UINT32 req_output_size,
UINT32* max_input_size);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_wrap_size_limit)(
UINT32* minor_status, sspi_gss_ctx_id_t context_handle, int conf_req_flag,
sspi_gss_qop_t qop_req, UINT32 req_output_size, UINT32* max_input_size);
UINT32 SSPI_GSSAPI sspi_gss_import_name_object(UINT32* minor_status, void* input_name,
sspi_gss_OID input_name_type,
sspi_gss_name_t* output_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_name_object)(UINT32* minor_status,
void* input_name,
sspi_gss_OID input_name_type,
sspi_gss_name_t* output_name);
UINT32 SSPI_GSSAPI sspi_gss_export_name_object(UINT32* minor_status, sspi_gss_name_t input_name,
sspi_gss_OID desired_name_type,
void** output_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_name_object)(UINT32* minor_status,
sspi_gss_name_t input_name,
sspi_gss_OID desired_name_type,
void** output_name);
UINT32 SSPI_GSSAPI sspi_gss_add_cred(UINT32* minor_status, sspi_gss_cred_id_t input_cred_handle,
sspi_gss_name_t desired_name, sspi_gss_OID desired_mech,
sspi_gss_cred_usage_t cred_usage,
UINT32 initiator_time_req, UINT32 acceptor_time_req,
sspi_gss_cred_id_t* output_cred_handle,
sspi_gss_OID_set* actual_mechs, UINT32* initiator_time_rec,
UINT32* acceptor_time_rec);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_add_cred)(
UINT32* minor_status, sspi_gss_cred_id_t input_cred_handle, sspi_gss_name_t desired_name,
sspi_gss_OID desired_mech, sspi_gss_cred_usage_t cred_usage, UINT32 initiator_time_req,
UINT32 acceptor_time_req, sspi_gss_cred_id_t* output_cred_handle,
sspi_gss_OID_set* actual_mechs, UINT32* initiator_time_rec, UINT32* acceptor_time_rec);
UINT32 SSPI_GSSAPI sspi_gss_inquire_cred_by_mech(UINT32* minor_status,
sspi_gss_cred_id_t cred_handle,
sspi_gss_OID mech_type, sspi_gss_name_t* name,
UINT32* initiator_lifetime,
UINT32* acceptor_lifetime,
sspi_gss_cred_usage_t* cred_usage);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_cred_by_mech)(
UINT32* minor_status, sspi_gss_cred_id_t cred_handle, sspi_gss_OID mech_type,
sspi_gss_name_t* name, UINT32* initiator_lifetime, UINT32* acceptor_lifetime,
sspi_gss_cred_usage_t* cred_usage);
UINT32 SSPI_GSSAPI sspi_gss_export_sec_context(UINT32* minor_status,
sspi_gss_ctx_id_t* context_handle,
sspi_gss_buffer_t interprocess_token);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_sec_context)(
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
sspi_gss_buffer_t interprocess_token);
UINT32 SSPI_GSSAPI sspi_gss_import_sec_context(UINT32* minor_status,
sspi_gss_buffer_t interprocess_token,
sspi_gss_ctx_id_t* context_handle);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_sec_context)(
UINT32* minor_status, sspi_gss_buffer_t interprocess_token,
sspi_gss_ctx_id_t* context_handle);
UINT32 SSPI_GSSAPI sspi_gss_release_oid(UINT32* minor_status, sspi_gss_OID* oid);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_oid)(UINT32* minor_status, sspi_gss_OID* oid);
UINT32 SSPI_GSSAPI sspi_gss_create_empty_oid_set(UINT32* minor_status,
sspi_gss_OID_set* oid_set);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_create_empty_oid_set)(UINT32* minor_status,
sspi_gss_OID_set* oid_set);
UINT32 SSPI_GSSAPI sspi_gss_add_oid_set_member(UINT32* minor_status, sspi_gss_OID member_oid,
sspi_gss_OID_set* oid_set);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_add_oid_set_member)(UINT32* minor_status,
sspi_gss_OID member_oid,
sspi_gss_OID_set* oid_set);
UINT32 SSPI_GSSAPI sspi_gss_test_oid_set_member(UINT32* minor_status, sspi_gss_OID member,
sspi_gss_OID_set set, int* present);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_test_oid_set_member)(UINT32* minor_status,
sspi_gss_OID member,
sspi_gss_OID_set set,
int* present);
UINT32 SSPI_GSSAPI sspi_gss_str_to_oid(UINT32* minor_status, sspi_gss_buffer_t oid_str,
sspi_gss_OID* oid);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_str_to_oid)(UINT32* minor_status,
sspi_gss_buffer_t oid_str,
sspi_gss_OID* oid);
UINT32 SSPI_GSSAPI sspi_gss_oid_to_str(UINT32* minor_status, sspi_gss_OID oid,
sspi_gss_buffer_t oid_str);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_oid_to_str)(UINT32* minor_status, sspi_gss_OID oid,
sspi_gss_buffer_t oid_str);
UINT32 SSPI_GSSAPI sspi_gss_inquire_names_for_mech(UINT32* minor_status, sspi_gss_OID mechanism,
sspi_gss_OID_set* name_types);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_names_for_mech)(UINT32* minor_status,
sspi_gss_OID mechanism,
sspi_gss_OID_set* name_types);
UINT32 SSPI_GSSAPI sspi_gss_inquire_mechs_for_name(UINT32* minor_status,
const sspi_gss_name_t input_name,
sspi_gss_OID_set* mech_types);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_mechs_for_name)(
UINT32* minor_status, const sspi_gss_name_t input_name, sspi_gss_OID_set* mech_types);
UINT32 SSPI_GSSAPI sspi_gss_sign(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
int qop_req, sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_sign)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle, int qop_req,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t message_token);
UINT32 SSPI_GSSAPI sspi_gss_verify(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t token_buffer, int* qop_state);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_verify)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t message_buffer,
sspi_gss_buffer_t token_buffer, int* qop_state);
UINT32 SSPI_GSSAPI sspi_gss_seal(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
int conf_req_flag, int qop_req,
sspi_gss_buffer_t input_message_buffer, int* conf_state,
sspi_gss_buffer_t output_message_buffer);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_seal)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
int conf_req_flag, int qop_req,
sspi_gss_buffer_t input_message_buffer,
int* conf_state,
sspi_gss_buffer_t output_message_buffer);
UINT32 SSPI_GSSAPI sspi_gss_unseal(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t input_message_buffer,
sspi_gss_buffer_t output_message_buffer, int* conf_state,
int* qop_state);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_unseal)(UINT32* minor_status,
sspi_gss_ctx_id_t context_handle,
sspi_gss_buffer_t input_message_buffer,
sspi_gss_buffer_t output_message_buffer,
int* conf_state, int* qop_state);
UINT32 SSPI_GSSAPI sspi_gss_export_name(UINT32* minor_status, const sspi_gss_name_t input_name,
sspi_gss_buffer_t exported_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_name)(UINT32* minor_status,
const sspi_gss_name_t input_name,
sspi_gss_buffer_t exported_name);
UINT32 SSPI_GSSAPI sspi_gss_duplicate_name(UINT32* minor_status,
const sspi_gss_name_t input_name,
sspi_gss_name_t* dest_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_duplicate_name)(UINT32* minor_status,
const sspi_gss_name_t input_name,
sspi_gss_name_t* dest_name);
UINT32 SSPI_GSSAPI sspi_gss_canonicalize_name(UINT32* minor_status,
const sspi_gss_name_t input_name,
const sspi_gss_OID mech_type,
sspi_gss_name_t* output_name);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_canonicalize_name)(UINT32* minor_status,
const sspi_gss_name_t input_name,
const sspi_gss_OID mech_type,
sspi_gss_name_t* output_name);
UINT32 SSPI_GSSAPI sspi_gss_pseudo_random(UINT32* minor_status, sspi_gss_ctx_id_t context,
int prf_key, const sspi_gss_buffer_t prf_in,
SSIZE_T desired_output_len,
sspi_gss_buffer_t prf_out);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_pseudo_random)(UINT32* minor_status,
sspi_gss_ctx_id_t context, int prf_key,
const sspi_gss_buffer_t prf_in,
SSIZE_T desired_output_len,
sspi_gss_buffer_t prf_out);
UINT32 SSPI_GSSAPI sspi_gss_store_cred(UINT32* minor_status,
const sspi_gss_cred_id_t input_cred_handle,
sspi_gss_cred_usage_t input_usage,
const sspi_gss_OID desired_mech, UINT32 overwrite_cred,
UINT32 default_cred, sspi_gss_OID_set* elements_stored,
sspi_gss_cred_usage_t* cred_usage_stored);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_store_cred)(UINT32* minor_status,
const sspi_gss_cred_id_t input_cred_handle,
sspi_gss_cred_usage_t input_usage,
const sspi_gss_OID desired_mech,
UINT32 overwrite_cred, UINT32 default_cred,
sspi_gss_OID_set* elements_stored,
sspi_gss_cred_usage_t* cred_usage_stored);
UINT32 SSPI_GSSAPI sspi_gss_set_neg_mechs(UINT32* minor_status, sspi_gss_cred_id_t cred_handle,
const sspi_gss_OID_set mech_set);
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_set_neg_mechs)(UINT32* minor_status,
sspi_gss_cred_id_t cred_handle,
const sspi_gss_OID_set mech_set);
#ifdef __cplusplus
}
#endif
struct _GSSAPI_FUNCTION_TABLE
{
fn_sspi_gss_acquire_cred gss_acquire_cred;
fn_sspi_gss_release_cred gss_release_cred;
fn_sspi_gss_init_sec_context gss_init_sec_context;
fn_sspi_gss_accept_sec_context gss_accept_sec_context;
fn_sspi_gss_process_context_token gss_process_context_token;
fn_sspi_gss_delete_sec_context gss_delete_sec_context;
fn_sspi_gss_context_time gss_context_time;
fn_sspi_gss_get_mic gss_get_mic;
fn_sspi_gss_verify_mic gss_verify_mic;
fn_sspi_gss_wrap gss_wrap;
fn_sspi_gss_unwrap gss_unwrap;
fn_sspi_gss_display_status gss_display_status;
fn_sspi_gss_indicate_mechs gss_indicate_mechs;
fn_sspi_gss_compare_name gss_compare_name;
fn_sspi_gss_display_name gss_display_name;
fn_sspi_gss_import_name gss_import_name;
fn_sspi_gss_release_name gss_release_name;
fn_sspi_gss_release_buffer gss_release_buffer;
fn_sspi_gss_release_oid_set gss_release_oid_set;
fn_sspi_gss_inquire_cred gss_inquire_cred;
fn_sspi_gss_inquire_context gss_inquire_context;
fn_sspi_gss_wrap_size_limit gss_wrap_size_limit;
fn_sspi_gss_import_name_object gss_import_name_object;
fn_sspi_gss_export_name_object gss_export_name_object;
fn_sspi_gss_add_cred gss_add_cred;
fn_sspi_gss_inquire_cred_by_mech gss_inquire_cred_by_mech;
fn_sspi_gss_export_sec_context gss_export_sec_context;
fn_sspi_gss_import_sec_context gss_import_sec_context;
fn_sspi_gss_release_oid gss_release_oid;
fn_sspi_gss_create_empty_oid_set gss_create_empty_oid_set;
fn_sspi_gss_add_oid_set_member gss_add_oid_set_member;
fn_sspi_gss_test_oid_set_member gss_test_oid_set_member;
fn_sspi_gss_str_to_oid gss_str_to_oid;
fn_sspi_gss_oid_to_str gss_oid_to_str;
fn_sspi_gss_inquire_names_for_mech gss_inquire_names_for_mech;
fn_sspi_gss_inquire_mechs_for_name gss_inquire_mechs_for_name;
fn_sspi_gss_sign gss_sign;
fn_sspi_gss_verify gss_verify;
fn_sspi_gss_seal gss_seal;
fn_sspi_gss_unseal gss_unseal;
fn_sspi_gss_export_name gss_export_name;
fn_sspi_gss_duplicate_name gss_duplicate_name;
fn_sspi_gss_canonicalize_name gss_canonicalize_name;
fn_sspi_gss_pseudo_random gss_pseudo_random;
fn_sspi_gss_store_cred gss_store_cred;
fn_sspi_gss_set_neg_mechs gss_set_neg_mechs;
};
typedef struct _GSSAPI_FUNCTION_TABLE GSSAPI_FUNCTION_TABLE;
GSSAPI_FUNCTION_TABLE* SEC_ENTRY gssApi_InitSecurityInterface(void);
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __cplusplus
}
#endif
#endif /* FREERDP_SSPI_GSS_PRIVATE_H */