* encrypt_data.c (krb5_encrypt_data): New file. A generic routine
authorTheodore Tso <tytso@mit.edu>
Mon, 13 Nov 1995 16:53:23 +0000 (16:53 +0000)
committerTheodore Tso <tytso@mit.edu>
Mon, 13 Nov 1995 16:53:23 +0000 (16:53 +0000)
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

src/lib/crypto/ChangeLog
src/lib/crypto/Makefile.in
src/lib/crypto/decrypt_data.c [new file with mode: 0644]
src/lib/crypto/encrypt_data.c [new file with mode: 0644]

index 5b9d99f18754cdd56abfe4387c05e6f72a2848fb..298030de3cf97459c487812ae515a03072cdd0d6 100644 (file)
@@ -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.
index c8f62a9f3b41800245166d7276787b999e8fd88e..7d8c0a3307c1390fbdff7f1a1a04764d46d56376 100644 (file)
@@ -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 (file)
index 0000000..ae886d0
--- /dev/null
@@ -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 (file)
index 0000000..b2f039f
--- /dev/null
@@ -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;
+}
+