aboutsummaryrefslogtreecommitdiff
path: root/src/lib/crypto/dk/dk_decrypt.c
diff options
context:
space:
mode:
authorno author <devnull@mit.edu>2003-04-09 00:10:14 +0000
committerno author <devnull@mit.edu>2003-04-09 00:10:14 +0000
commit9dc0f646d42648fbbde44799c00b25d97d9cbc98 (patch)
treed7e1bad8215f92673f94df55881b676002da7e8b /src/lib/crypto/dk/dk_decrypt.c
parent38037332d7af42124646c268874e0833bd8ec30e (diff)
downloadkrb5-9dc0f646d42648fbbde44799c00b25d97d9cbc98.zip
krb5-9dc0f646d42648fbbde44799c00b25d97d9cbc98.tar.gz
krb5-9dc0f646d42648fbbde44799c00b25d97d9cbc98.tar.bz2
This commit was manufactured by cvs2svn to create tagkrb5-1.2.8-final
'krb5-1-2-8-final'. git-svn-id: svn://anonsvn.mit.edu/krb5/tags/krb5-1-2-8-final@15331 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/crypto/dk/dk_decrypt.c')
-rw-r--r--src/lib/crypto/dk/dk_decrypt.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/lib/crypto/dk/dk_decrypt.c b/src/lib/crypto/dk/dk_decrypt.c
index d307761..d6e7c0d 100644
--- a/src/lib/crypto/dk/dk_decrypt.c
+++ b/src/lib/crypto/dk/dk_decrypt.c
@@ -41,7 +41,7 @@ krb5_dk_decrypt(enc, hash, key, usage, ivec, input, output)
{
krb5_error_code ret;
size_t hashsize, blocksize, keybytes, keylength, enclen, plainlen;
- unsigned char *plaindata, *kedata, *kidata, *cksum;
+ unsigned char *plaindata, *kedata, *kidata, *cksum, *cn;
krb5_keyblock ke, ki;
krb5_data d1, d2;
unsigned char constantdata[K5CLENGTH];
@@ -108,6 +108,11 @@ krb5_dk_decrypt(enc, hash, key, usage, ivec, input, output)
if ((ret = ((*(enc->decrypt))(&ke, ivec, &d1, &d2))) != 0)
goto cleanup;
+ if (ivec != NULL && ivec->length == blocksize)
+ cn = d1.data + d1.length - blocksize;
+ else
+ cn = NULL;
+
/* verify the hash */
d1.length = hashsize;
@@ -134,6 +139,9 @@ krb5_dk_decrypt(enc, hash, key, usage, ivec, input, output)
memcpy(output->data, d2.data+blocksize, output->length);
+ if (cn != NULL)
+ memcpy(ivec->data, cn, blocksize);
+
ret = 0;
cleanup:
@@ -163,7 +171,7 @@ krb5_marc_dk_decrypt(enc, hash, key, usage, ivec, input, output)
{
krb5_error_code ret;
size_t hashsize, blocksize, keybytes, keylength, enclen, plainlen;
- unsigned char *plaindata, *kedata, *kidata, *cksum;
+ unsigned char *plaindata, *kedata, *kidata, *cksum, *cn;
krb5_keyblock ke, ki;
krb5_data d1, d2;
unsigned char constantdata[K5CLENGTH];
@@ -230,6 +238,11 @@ krb5_marc_dk_decrypt(enc, hash, key, usage, ivec, input, output)
if ((ret = ((*(enc->decrypt))(&ke, ivec, &d1, &d2))) != 0)
goto cleanup;
+ if (ivec != NULL && ivec->length == blocksize)
+ cn = d1.data + d1.length - blocksize;
+ else
+ cn = NULL;
+
/* verify the hash */
d1.length = hashsize;
@@ -264,6 +277,9 @@ krb5_marc_dk_decrypt(enc, hash, key, usage, ivec, input, output)
memcpy(output->data, d2.data+4+blocksize, output->length);
+ if (cn != NULL)
+ memcpy(ivec->data, cn, blocksize);
+
ret = 0;
cleanup: