summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Carr <jfc@mit.edu>1991-12-06 13:18:16 +0000
committerJohn Carr <jfc@mit.edu>1991-12-06 13:18:16 +0000
commitae5ad7d5ad644bf9102d720b2279da3359b70d2d (patch)
treeb027afe204efc7e83a7b65307f9db79b1267db56
parent8f908720f3a6940ac452f48e46f9fb9fea9f3ea7 (diff)
downloadkrb5-ae5ad7d5ad644bf9102d720b2279da3359b70d2d.tar.gz
krb5-ae5ad7d5ad644bf9102d720b2279da3359b70d2d.tar.xz
krb5-ae5ad7d5ad644bf9102d720b2279da3359b70d2d.zip
Store the length field of the encrypted key in network byte order
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2195 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/kdb/decrypt_key.c10
-rw-r--r--src/lib/kdb/encrypt_key.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/src/lib/kdb/decrypt_key.c b/src/lib/kdb/decrypt_key.c
index d99156af42..811727b355 100644
--- a/src/lib/kdb/decrypt_key.c
+++ b/src/lib/kdb/decrypt_key.c
@@ -47,11 +47,11 @@ krb5_encrypt_block *eblock;
const krb5_encrypted_keyblock *in;
krb5_keyblock *out;
{
+ int length;
krb5_error_code retval;
/* the encrypted version is stored as the unencrypted key length
- (in host byte order), followed by the encrypted key.
- */
+ (4 bytes, MSB first) followed by the encrypted key. */
out->keytype = in->keytype;
out->length = krb5_encrypt_size(in->length-sizeof(in->length),
eblock->crypto_entry);
@@ -62,7 +62,11 @@ krb5_keyblock *out;
return ENOMEM;
}
/* copy out the real length count */
- memcpy((char *)&out->length, (char *)in->contents, sizeof(out->length));
+ length = ((unsigned char *)in->contents)[0] << 24;
+ length += ((unsigned char *)in->contents)[1] << 16;
+ length += ((unsigned char *)in->contents)[2] << 8;
+ length += ((unsigned char *)in->contents)[3];
+ out->length = length;
/* remember the contents of the encrypted version has a sizeof(in->length)
integer length of the real embedded key, followed by the
diff --git a/src/lib/kdb/encrypt_key.c b/src/lib/kdb/encrypt_key.c
index f50efc9cbb..293e84dd32 100644
--- a/src/lib/kdb/encrypt_key.c
+++ b/src/lib/kdb/encrypt_key.c
@@ -51,6 +51,7 @@ krb5_encrypted_keyblock *out;
krb5_error_code retval;
krb5_keyblock tmpin;
+ int length;
out->keytype = in->keytype;
out->length = krb5_encrypt_size(in->length, eblock->crypto_entry);
@@ -63,7 +64,14 @@ krb5_encrypted_keyblock *out;
out->length = 0;
return ENOMEM;
}
- memcpy((char *)tmpin.contents, (const char *)in->contents, tmpin.length);
+ /* Convert length from MSB first to host byte order for the encryption
+ routine. Assumes sizeof (int) is 4. */
+ length = ((((unsigned char*)in->contents)[0] << 24) +
+ (((unsigned char*)in->contents)[1] << 16) +
+ (((unsigned char*)in->contents)[2] << 8) +
+ ((unsigned char*)in->contents)[3]);
+ memcpy((char *)tmpin.contents, (const char *)&length, 4);
+ memcpy((char *)tmpin.contents + 4, (const char *)in->contents + 4, tmpin.length);
out->length += sizeof(out->length);
out->contents = (krb5_octet *)malloc(out->length);