116
114
input_message_buffer,
118
116
output_message_buffer);
117
if (status != GSS_S_COMPLETE)
118
map_error(minor_status, mech);
119
} else if (mech->gss_wrap_aead ||
120
(mech->gss_wrap_iov && mech->gss_wrap_iov_length)) {
121
status = gssint_wrap_aead(mech,
127
input_message_buffer,
129
output_message_buffer);
120
131
status = GSS_S_UNAVAILABLE;
124
135
/* EXPORT DELETE END */
138
149
OM_uint32 * minor_status;
139
150
gss_ctx_id_t context_handle;
140
151
int conf_req_flag;
142
153
gss_buffer_t input_message_buffer;
143
154
int * conf_state;
144
155
gss_buffer_t output_message_buffer;
147
return gss_seal(minor_status, (gss_ctx_id_t)context_handle,
148
conf_req_flag, (int) qop_req,
149
(gss_buffer_t)input_message_buffer, conf_state,
158
return gss_wrap(minor_status, context_handle,
159
conf_req_flag, (gss_qop_t) qop_req,
160
input_message_buffer, conf_state,
150
161
output_message_buffer);
165
* It is only possible to implement gss_wrap_size_limit() on top
166
* of gss_wrap_iov_length() for mechanisms that do not use any
167
* padding and have fixed length headers/trailers.
170
gssint_wrap_size_limit_iov_shim(gss_mechanism mech,
171
OM_uint32 *minor_status,
172
gss_ctx_id_t context_handle,
175
OM_uint32 req_output_size,
176
OM_uint32 *max_input_size)
178
gss_iov_buffer_desc iov[4];
182
iov[0].type = GSS_IOV_BUFFER_TYPE_HEADER;
183
iov[0].buffer.value = NULL;
184
iov[0].buffer.length = 0;
186
iov[1].type = GSS_IOV_BUFFER_TYPE_DATA;
187
iov[1].buffer.length = req_output_size;
188
iov[1].buffer.value = NULL;
190
iov[2].type = GSS_IOV_BUFFER_TYPE_PADDING;
191
iov[2].buffer.value = NULL;
192
iov[2].buffer.length = 0;
194
iov[3].type = GSS_IOV_BUFFER_TYPE_TRAILER;
195
iov[3].buffer.value = NULL;
196
iov[3].buffer.length = 0;
198
assert(mech->gss_wrap_iov_length);
200
status = mech->gss_wrap_iov_length(minor_status, context_handle,
201
conf_req_flag, qop_req,
203
sizeof(iov)/sizeof(iov[0]));
204
if (status != GSS_S_COMPLETE) {
205
map_error(minor_status, mech);
209
ohlen = iov[0].buffer.length + iov[3].buffer.length;
211
if (iov[2].buffer.length == 0 && ohlen < req_output_size)
212
*max_input_size = req_output_size - ohlen;
216
return GSS_S_COMPLETE;
156
222
OM_uint32 KRB5_CALLCONV
188
255
return (GSS_S_BAD_MECH);
190
if (!mech->gss_wrap_size_limit)
191
return (GSS_S_UNAVAILABLE);
193
return (mech->gss_wrap_size_limit(mech->context, minor_status,
194
ctx->internal_ctx_id, conf_req_flag, qop_req,
195
req_output_size, max_input_size));
257
if (mech->gss_wrap_size_limit)
258
major_status = mech->gss_wrap_size_limit(minor_status,
259
ctx->internal_ctx_id,
260
conf_req_flag, qop_req,
261
req_output_size, max_input_size);
262
else if (mech->gss_wrap_iov_length)
263
major_status = gssint_wrap_size_limit_iov_shim(mech, minor_status,
264
ctx->internal_ctx_id,
265
conf_req_flag, qop_req,
266
req_output_size, max_input_size);
268
major_status = GSS_S_UNAVAILABLE;
269
if (major_status != GSS_S_COMPLETE)
270
map_error(minor_status, mech);