diff options
author | John Carr <jfc@mit.edu> | 1991-12-06 13:18:16 +0000 |
---|---|---|
committer | John Carr <jfc@mit.edu> | 1991-12-06 13:18:16 +0000 |
commit | ae5ad7d5ad644bf9102d720b2279da3359b70d2d (patch) | |
tree | b027afe204efc7e83a7b65307f9db79b1267db56 /src/lib | |
parent | 8f908720f3a6940ac452f48e46f9fb9fea9f3ea7 (diff) | |
download | krb5-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
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/kdb/decrypt_key.c | 10 | ||||
-rw-r--r-- | src/lib/kdb/encrypt_key.c | 10 |
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); |