Deleted Added
full compact
mk_priv.c (90926) mk_priv.c (103423)
1/*
1/*
2 * Copyright (c) 1997 - 2001 Kungliga Tekniska H�gskolan
2 * Copyright (c) 1997 - 2002 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

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.
32 */
33
34#include <krb5_locl.h>
35
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

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.
32 */
33
34#include <krb5_locl.h>
35
36RCSID("$Id: mk_priv.c,v 1.30 2001/06/18 02:44:54 assar Exp $");
36RCSID("$Id: mk_priv.c,v 1.31 2002/09/04 16:26:04 joda Exp $");
37
37
38/*
39 *
40 */
41
38
42krb5_error_code
43krb5_mk_priv(krb5_context context,
44 krb5_auth_context auth_context,
45 const krb5_data *userdata,
46 krb5_data *outbuf,
47 /*krb5_replay_data*/ void *outdata)
48{
49 krb5_error_code ret;

--- 28 unchanged lines hidden (view full) ---

78 part.seq_number = &tmp_seq;
79 } else {
80 part.seq_number = NULL;
81 }
82
83 part.s_address = auth_context->local_address;
84 part.r_address = auth_context->remote_address;
85
39krb5_error_code
40krb5_mk_priv(krb5_context context,
41 krb5_auth_context auth_context,
42 const krb5_data *userdata,
43 krb5_data *outbuf,
44 /*krb5_replay_data*/ void *outdata)
45{
46 krb5_error_code ret;

--- 28 unchanged lines hidden (view full) ---

75 part.seq_number = &tmp_seq;
76 } else {
77 part.seq_number = NULL;
78 }
79
80 part.s_address = auth_context->local_address;
81 part.r_address = auth_context->remote_address;
82
86 buf_size = 1024;
87 buf = malloc (buf_size);
88 if (buf == NULL) {
89 krb5_set_error_string (context, "malloc: out of memory");
90 return ENOMEM;
91 }
92
93 krb5_data_zero (&s.enc_part.cipher);
94
83 krb5_data_zero (&s.enc_part.cipher);
84
95 do {
96 ret = encode_EncKrbPrivPart (buf + buf_size - 1, buf_size,
97 &part, &len);
98 if (ret) {
99 if (ret == ASN1_OVERFLOW) {
100 u_char *tmp;
85 ASN1_MALLOC_ENCODE(EncKrbPrivPart, buf, buf_size, &part, &len, ret);
86 if (ret)
87 goto fail;
101
88
102 buf_size *= 2;
103 tmp = realloc (buf, buf_size);
104 if (tmp == NULL) {
105 krb5_set_error_string (context, "malloc: out of memory");
106 ret = ENOMEM;
107 goto fail;
108 }
109 buf = tmp;
110 } else {
111 goto fail;
112 }
113 }
114 } while(ret == ASN1_OVERFLOW);
115
116 s.pvno = 5;
117 s.msg_type = krb_priv;
118 s.enc_part.etype = key->keytype;
119 s.enc_part.kvno = NULL;
120
121 ret = krb5_crypto_init(context, key, 0, &crypto);
122 if (ret) {
123 free (buf);

--- 5 unchanged lines hidden (view full) ---

129 buf + buf_size - len,
130 len,
131 &s.enc_part.cipher);
132 krb5_crypto_destroy(context, crypto);
133 if (ret) {
134 free(buf);
135 return ret;
136 }
89 s.pvno = 5;
90 s.msg_type = krb_priv;
91 s.enc_part.etype = key->keytype;
92 s.enc_part.kvno = NULL;
93
94 ret = krb5_crypto_init(context, key, 0, &crypto);
95 if (ret) {
96 free (buf);

--- 5 unchanged lines hidden (view full) ---

102 buf + buf_size - len,
103 len,
104 &s.enc_part.cipher);
105 krb5_crypto_destroy(context, crypto);
106 if (ret) {
107 free(buf);
108 return ret;
109 }
110 free(buf);
137
111
138 do {
139 ret = encode_KRB_PRIV (buf + buf_size - 1, buf_size, &s, &len);
140
112
141 if (ret){
142 if (ret == ASN1_OVERFLOW) {
143 u_char *tmp;
113 ASN1_MALLOC_ENCODE(KRB_PRIV, buf, buf_size, &s, &len, ret);
144
114
145 buf_size *= 2;
146 tmp = realloc (buf, buf_size);
147 if (tmp == NULL) {
148 krb5_set_error_string (context, "malloc: out of memory");
149 ret = ENOMEM;
150 goto fail;
151 }
152 buf = tmp;
153 } else {
154 goto fail;
155 }
156 }
157 } while(ret == ASN1_OVERFLOW);
115 if(ret)
116 goto fail;
158 krb5_data_free (&s.enc_part.cipher);
159
117 krb5_data_free (&s.enc_part.cipher);
118
160 outbuf->length = len;
161 outbuf->data = malloc (len);
162 if (outbuf->data == NULL) {
119 ret = krb5_data_copy(outbuf, buf + buf_size - len, len);
120 if (ret) {
163 krb5_set_error_string (context, "malloc: out of memory");
164 free(buf);
165 return ENOMEM;
166 }
121 krb5_set_error_string (context, "malloc: out of memory");
122 free(buf);
123 return ENOMEM;
124 }
167 memcpy (outbuf->data, buf + buf_size - len, len);
168 free (buf);
169 if (auth_context->flags & KRB5_AUTH_CONTEXT_DO_SEQUENCE)
170 auth_context->local_seqnumber =
171 (auth_context->local_seqnumber + 1) & 0xFFFFFFFF;
172 return 0;
173
174fail:
175 free (buf);
176 krb5_data_free (&s.enc_part.cipher);
177 return ret;
178}
125 free (buf);
126 if (auth_context->flags & KRB5_AUTH_CONTEXT_DO_SEQUENCE)
127 auth_context->local_seqnumber =
128 (auth_context->local_seqnumber + 1) & 0xFFFFFFFF;
129 return 0;
130
131fail:
132 free (buf);
133 krb5_data_free (&s.enc_part.cipher);
134 return ret;
135}