gssapi/mech: -Wcalloc-transposed args
[heimdal.git] / lib / gssapi / krb5 / aeap.c
blobfe95ecf0b9cc9cbfc78af036641bf7a445f85f4e
1 /*
2 * Copyright (c) 2008 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
34 #include "gsskrb5_locl.h"
36 #include <roken.h>
38 OM_uint32 GSSAPI_CALLCONV
39 _gk_wrap_iov(OM_uint32 * minor_status,
40 gss_ctx_id_t context_handle,
41 int conf_req_flag,
42 gss_qop_t qop_req,
43 int * conf_state,
44 gss_iov_buffer_desc *iov,
45 int iov_count)
47 const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
48 krb5_context context;
49 OM_uint32 ret;
50 krb5_keyblock *key;
51 krb5_keytype keytype;
53 GSSAPI_KRB5_INIT (&context);
55 if (ctx->more_flags & IS_CFX)
56 return _gssapi_wrap_cfx_iov(minor_status, ctx, context,
57 conf_req_flag, conf_state,
58 iov, iov_count);
60 HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
61 ret = _gsskrb5i_get_token_key(ctx, context, &key);
62 HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
63 if (ret) {
64 *minor_status = ret;
65 return GSS_S_FAILURE;
67 krb5_enctype_to_keytype(context, key->keytype, &keytype);
69 switch (keytype) {
70 case KEYTYPE_ARCFOUR:
71 case KEYTYPE_ARCFOUR_56:
72 ret = _gssapi_wrap_iov_arcfour(minor_status, ctx, context,
73 conf_req_flag, conf_state,
74 iov, iov_count, key);
75 break;
77 default:
78 ret = GSS_S_FAILURE;
79 break;
82 krb5_free_keyblock(context, key);
83 return ret;
86 OM_uint32 GSSAPI_CALLCONV
87 _gk_unwrap_iov(OM_uint32 *minor_status,
88 gss_ctx_id_t context_handle,
89 int *conf_state,
90 gss_qop_t *qop_state,
91 gss_iov_buffer_desc *iov,
92 int iov_count)
94 const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
95 krb5_context context;
96 OM_uint32 ret;
97 krb5_keytype keytype;
98 krb5_keyblock *key;
100 GSSAPI_KRB5_INIT (&context);
102 if (ctx->more_flags & IS_CFX)
103 return _gssapi_unwrap_cfx_iov(minor_status, ctx, context,
104 conf_state, qop_state, iov, iov_count);
106 HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
107 ret = _gsskrb5i_get_token_key(ctx, context, &key);
108 HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
109 if (ret) {
110 *minor_status = ret;
111 return GSS_S_FAILURE;
113 krb5_enctype_to_keytype(context, key->keytype, &keytype);
115 switch (keytype) {
116 case KEYTYPE_ARCFOUR:
117 case KEYTYPE_ARCFOUR_56:
118 ret = _gssapi_unwrap_iov_arcfour(minor_status, ctx, context,
119 conf_state, qop_state,
120 iov, iov_count, key);
121 break;
123 default:
124 ret = GSS_S_FAILURE;
125 break;
128 krb5_free_keyblock(context, key);
129 return ret;
132 OM_uint32 GSSAPI_CALLCONV
133 _gk_wrap_iov_length(OM_uint32 * minor_status,
134 gss_ctx_id_t context_handle,
135 int conf_req_flag,
136 gss_qop_t qop_req,
137 int *conf_state,
138 gss_iov_buffer_desc *iov,
139 int iov_count)
141 const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
142 krb5_context context;
143 OM_uint32 ret;
144 krb5_keytype keytype;
145 krb5_keyblock *key;
147 GSSAPI_KRB5_INIT (&context);
149 if (ctx->more_flags & IS_CFX)
150 return _gssapi_wrap_iov_length_cfx(minor_status, ctx, context,
151 conf_req_flag, qop_req, conf_state,
152 iov, iov_count);
154 HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
155 ret = _gsskrb5i_get_token_key(ctx, context, &key);
156 HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
157 if (ret) {
158 *minor_status = ret;
159 return GSS_S_FAILURE;
161 krb5_enctype_to_keytype(context, key->keytype, &keytype);
163 switch (keytype) {
164 case KEYTYPE_ARCFOUR:
165 case KEYTYPE_ARCFOUR_56:
166 ret = _gssapi_wrap_iov_length_arcfour(minor_status, ctx, context,
167 conf_req_flag, qop_req, conf_state,
168 iov, iov_count);
169 break;
171 default:
172 ret = GSS_S_FAILURE;
173 break;
176 krb5_free_keyblock(context, key);
177 return ret;