simplify now that there is only one data buffer.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24751 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -3183,7 +3183,7 @@ krb5_encrypt_iov_ivec(krb5_context context,
|
|||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
struct key_data *dkey;
|
struct key_data *dkey;
|
||||||
const struct encryption_type *et = crypto->et;
|
const struct encryption_type *et = crypto->et;
|
||||||
krb5_crypto_iov *tiv, *piv, *hiv;
|
krb5_crypto_iov *tiv, *piv, *hiv, *div;
|
||||||
|
|
||||||
if (num_data < 0) {
|
if (num_data < 0) {
|
||||||
krb5_clear_error_message(context);
|
krb5_clear_error_message(context);
|
||||||
@@ -3198,18 +3198,16 @@ krb5_encrypt_iov_ivec(krb5_context context,
|
|||||||
headersz = et->confoundersize;
|
headersz = et->confoundersize;
|
||||||
trailersz = CHECKSUMSIZE(et->keyed_checksum);
|
trailersz = CHECKSUMSIZE(et->keyed_checksum);
|
||||||
|
|
||||||
for (len = 0, i = 0; i < num_data; i++) {
|
div = find_iv(data, num_data, KRB5_CRYPTO_TYPE_DATA);
|
||||||
if (data[i].flags != KRB5_CRYPTO_TYPE_HEADER &&
|
if (div == NULL)
|
||||||
data[i].flags == KRB5_CRYPTO_TYPE_DATA) {
|
return KRB5_CRYPTO_INTERNAL;
|
||||||
len += data[i].data.length;
|
|
||||||
}
|
len = div->data.length;
|
||||||
}
|
|
||||||
|
|
||||||
sz = headersz + len;
|
sz = headersz + len;
|
||||||
block_sz = (sz + et->padsize - 1) &~ (et->padsize - 1); /* pad */
|
block_sz = (sz + et->padsize - 1) &~ (et->padsize - 1); /* pad */
|
||||||
|
|
||||||
pad_sz = block_sz - sz;
|
pad_sz = block_sz - sz;
|
||||||
trailersz += pad_sz;
|
|
||||||
|
|
||||||
/* header */
|
/* header */
|
||||||
|
|
||||||
@@ -3296,13 +3294,9 @@ krb5_encrypt_iov_ivec(krb5_context context,
|
|||||||
|
|
||||||
/* XXX replace with EVP_Cipher */
|
/* XXX replace with EVP_Cipher */
|
||||||
|
|
||||||
len = hiv->data.length;
|
len = hiv->data.length + div->data.length;
|
||||||
for (i = 0; i < num_data; i++) {
|
if (piv)
|
||||||
if (data[i].flags != KRB5_CRYPTO_TYPE_DATA &&
|
len += piv->data.length;
|
||||||
data[i].flags != KRB5_CRYPTO_TYPE_PADDING)
|
|
||||||
continue;
|
|
||||||
len += data[i].data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = q = malloc(len);
|
p = q = malloc(len);
|
||||||
if(p == NULL)
|
if(p == NULL)
|
||||||
@@ -3310,13 +3304,9 @@ krb5_encrypt_iov_ivec(krb5_context context,
|
|||||||
|
|
||||||
memcpy(q, hiv->data.data, hiv->data.length);
|
memcpy(q, hiv->data.data, hiv->data.length);
|
||||||
q += hiv->data.length;
|
q += hiv->data.length;
|
||||||
for (i = 0; i < num_data; i++) {
|
memcpy(q, div->data.data, div->data.length);
|
||||||
if (data[i].flags != KRB5_CRYPTO_TYPE_DATA &&
|
q += div->data.length;
|
||||||
data[i].flags != KRB5_CRYPTO_TYPE_PADDING)
|
memset(q, 0, pad_sz);
|
||||||
continue;
|
|
||||||
memcpy(q, data[i].data.data, data[i].data.length);
|
|
||||||
q += data[i].data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = _get_derived_key(context, crypto, ENCRYPTION_USAGE(usage), &dkey);
|
ret = _get_derived_key(context, crypto, ENCRYPTION_USAGE(usage), &dkey);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
@@ -3337,16 +3327,14 @@ krb5_encrypt_iov_ivec(krb5_context context,
|
|||||||
|
|
||||||
/* now copy data back to buffers */
|
/* now copy data back to buffers */
|
||||||
q = p;
|
q = p;
|
||||||
|
|
||||||
memcpy(hiv->data.data, q, hiv->data.length);
|
memcpy(hiv->data.data, q, hiv->data.length);
|
||||||
q += hiv->data.length;
|
q += hiv->data.length;
|
||||||
|
|
||||||
for (i = 0; i < num_data; i++) {
|
memcpy(div->data.data, q, div->data.length);
|
||||||
if (data[i].flags != KRB5_CRYPTO_TYPE_DATA &&
|
q += div->data.length;
|
||||||
data[i].flags != KRB5_CRYPTO_TYPE_PADDING)
|
|
||||||
continue;
|
memcpy(piv->data.data, q, pad_sz);
|
||||||
memcpy(data[i].data.data, q, data[i].data.length);
|
|
||||||
q += data[i].data.length;
|
|
||||||
}
|
|
||||||
free(p);
|
free(p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user