summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1995-11-13 16:53:23 +0000
committerTheodore Tso <tytso@mit.edu>1995-11-13 16:53:23 +0000
commit01cc5eb727ff872c52be731a72ae9a5b1a567836 (patch)
treebb143b2b3e75ffb3ca79a0311950822f143cb392
parent5df3f8fe779456692c24ee3f1c2e165aab0b8ed2 (diff)
downloadkrb5-01cc5eb727ff872c52be731a72ae9a5b1a567836.tar.gz
krb5-01cc5eb727ff872c52be731a72ae9a5b1a567836.tar.xz
krb5-01cc5eb727ff872c52be731a72ae9a5b1a567836.zip
* encrypt_data.c (krb5_encrypt_data): New file. A generic routine
for encrypting data in a krb5_data structure. Fills in a krb5_enc_data structure. * decrypt_data.c (krb5_decrypt_data): New file. A generic routine for decrypting data in a krb5_enc_data structure. Fills in a krb5_data structure. * Makefile.in (SRCS): Added decrypt_data.c and encrypt_data.c to list of files to be compiled. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@7100 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/crypto/ChangeLog13
-rw-r--r--src/lib/crypto/Makefile.in4
-rw-r--r--src/lib/crypto/decrypt_data.c66
-rw-r--r--src/lib/crypto/encrypt_data.c70
4 files changed, 153 insertions, 0 deletions
diff --git a/src/lib/crypto/ChangeLog b/src/lib/crypto/ChangeLog
index 5b9d99f18..298030de3 100644
--- a/src/lib/crypto/ChangeLog
+++ b/src/lib/crypto/ChangeLog
@@ -1,3 +1,16 @@
+Mon Nov 13 11:30:10 1995 Theodore Y. Ts'o <tytso@dcl>
+
+ * encrypt_data.c (krb5_encrypt_data): New file. A generic routine
+ for encrypting data in a krb5_data structure. Fills in a
+ krb5_enc_data structure.
+
+ * decrypt_data.c (krb5_decrypt_data): New file. A generic routine
+ for decrypting data in a krb5_enc_data structure. Fills
+ in a krb5_data structure.
+
+ * Makefile.in (SRCS): Added decrypt_data.c and encrypt_data.c to
+ list of files to be compiled.
+
Fri Oct 6 22:01:04 1995 Theodore Y. Ts'o <tytso@dcl>
* Makefile.in: Remove ##DOS!include of config/windows.in.
diff --git a/src/lib/crypto/Makefile.in b/src/lib/crypto/Makefile.in
index c8f62a9f3..7d8c0a330 100644
--- a/src/lib/crypto/Makefile.in
+++ b/src/lib/crypto/Makefile.in
@@ -10,11 +10,15 @@ TST=if test -n "`cat DONE`" ; then
@SHARED_RULE@
OBJS= cryptoconf.$(OBJEXT) \
+ encrypt_data.$(OBJEXT) \
+ decrypt_data.$(OBJEXT) \
des_crc.$(OBJEXT) \
des_md5.$(OBJEXT) \
raw_des.$(OBJEXT)
SRCS= $(srcdir)/cryptoconf.c \
+ $(srcdir)/encrypt_data.c \
+ $(srcdir)/decrypt_data.c \
$(srcdir)/des_crc.c \
$(srcdir)/des_md5.c \
$(srcdir)/raw_des.c
diff --git a/src/lib/crypto/decrypt_data.c b/src/lib/crypto/decrypt_data.c
new file mode 100644
index 000000000..ae886d0c9
--- /dev/null
+++ b/src/lib/crypto/decrypt_data.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright 1995 by the Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ *
+ */
+
+#include "k5-int.h"
+
+/*
+ * This routine takes a key and a krb5_enc_data structure as input, and
+ * outputs the decrypted data in a krb5_data structure. Note that
+ * the krb5_data structure is not allocated.
+ */
+krb5_error_code
+krb5_decrypt_data(context, key, ivec, enc_data, data)
+ krb5_context context;
+ krb5_keyblock * key;
+ krb5_pointer ivec;
+ krb5_enc_data * enc_data;
+ krb5_data * data;
+{
+ krb5_error_code retval;
+ krb5_encrypt_block eblock;
+
+ krb5_use_enctype(context, &eblock, key->enctype);
+ data->length = enc_data->ciphertext.length;
+ if (!(data->data = malloc(data->length)))
+ return ENOMEM;
+
+ if ((retval = krb5_process_key(context, &eblock, key)) != 0)
+ goto cleanup;
+
+ if ((retval = krb5_decrypt(context,
+ (krb5_pointer) enc_data->ciphertext.data,
+ (krb5_pointer) data->data,
+ enc_data->ciphertext.length, &eblock, ivec))) {
+ krb5_finish_key(context, &eblock);
+ goto cleanup;
+ }
+ (void) krb5_finish_key(context, &eblock);
+
+ return 0;
+
+cleanup:
+ if (data->data) {
+ free(data->data);
+ data->data = 0;
+ }
+ return retval;
+}
diff --git a/src/lib/crypto/encrypt_data.c b/src/lib/crypto/encrypt_data.c
new file mode 100644
index 000000000..b2f039f33
--- /dev/null
+++ b/src/lib/crypto/encrypt_data.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright 1995 by the Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ *
+ */
+
+#include "k5-int.h"
+
+/*
+ * This routine takes a key and a krb5_data structure as input, and
+ * outputs the encrypted data in a krb5_enc_data structure. Note that
+ * the krb5_enc_data structure is not allocated, and the kvno field is
+ * not filled in.
+ */
+krb5_error_code
+krb5_encrypt_data(context, key, ivec, data, enc_data)
+ krb5_context context;
+ krb5_keyblock * key;
+ krb5_pointer ivec;
+ krb5_data * data;
+ krb5_enc_data * enc_data;
+{
+ krb5_error_code retval;
+ krb5_encrypt_block eblock;
+
+ krb5_use_enctype(context, &eblock, key->enctype);
+
+ enc_data->magic = KV5M_ENC_DATA;
+ enc_data->kvno = 0;
+ enc_data->enctype = key->enctype;
+ enc_data->ciphertext.length = krb5_encrypt_size(data->length,
+ eblock.crypto_entry);
+ enc_data->ciphertext.data = malloc(enc_data->ciphertext.length);
+ if (enc_data->ciphertext.data == 0)
+ return ENOMEM;
+
+ if ((retval = krb5_process_key(context, &eblock, key)) != 0)
+ goto cleanup;
+
+ if ((retval = krb5_encrypt(context, (krb5_pointer) data->data,
+ (krb5_pointer) enc_data->ciphertext.data,
+ data->length, &eblock, ivec))) {
+ krb5_finish_key(context, &eblock);
+ goto cleanup;
+ }
+ (void) krb5_finish_key(context, &eblock);
+
+ return 0;
+
+cleanup:
+ free(enc_data->ciphertext.data);
+ return retval;
+}
+