Стандарты информационной безопасности

       

Представление некоторых объектов интерфейса безопасности в среде языка C


Представление средствами языка C объектов, фигурирующих в обобщенном интерфейсе безопасности GSS-API, по большей части довольно очевидно (или не может быть стандартизовано, так как зависит от специфики механизма безопасности).

Прежде всего, вводится тип OM_uint32, соответствующий 32-битным беззнаковым целым значениям. Большинство структурных значений представляется с помощью указателя на дескриптор (см. листинг 11.1).

typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t;

Листинг 11.1. Описание дескриптора буфера и указателя на него.

Тип gss_buffer_t используется при задании составных аргументов - имен, дескрипторов, токенов, сообщений и т.п.

Идентификаторы объектов представляются следующим образом (см. листинг 11.2).

typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID;

Листинг 11.2. Описание дескриптора идентификаторов объектов и указателя на него.

Указатели elements ссылаются на начало представления идентификаторов, т. е. на последовательности байт, устроенных в соответствии с базовыми правилами ASN.1.

Наборы объектных идентификаторов представляются так, как показано на листинге 11.3.

typedef struct gss_OID_set_desc_struct { int count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set;

Листинг 11.3. Описание дескриптора набора объектных идентификаторов и указателя на него.

Вводятся и некоторые другие типы, уточняющие представление структурированных значений.

На листинге 11.4 показано, как выглядит на языке C описание функции GSS_Init_sec_context.

OM_uint32 GSS_Init_sec_context ( OM_uint32 *minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t *context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token gss_OID *actual_mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, OM_uint32 *time_rec );

Листинг 11.4. Описание функции GSS_Init_sec_context.

Отметим, что параметр context_handle является здесь одновременно входным и выходным, а основной код завершения возвращается как результат функции.

Разумеется, есть еще много аспектов, оговоренных в спецификациях [85], например, кто и когда отводит память под объекты и под дескрипторы, и каким образом эту память можно освобождать. Мы, однако, не будем на этом останавливаться.

<

Содержание раздела