summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal')
-rw-r--r--crypto/heimdal/admin/ktutil_locl.h6
-rw-r--r--crypto/heimdal/appl/ftp/ftp/ftp_locl.h3
-rw-r--r--crypto/heimdal/kadmin/kadmin_locl.h34
-rw-r--r--crypto/heimdal/kdc/headers.h13
-rw-r--r--crypto/heimdal/lib/des/rc4_enc.c5
-rw-r--r--crypto/heimdal/lib/des/rc4_skey.c5
-rw-r--r--crypto/heimdal/lib/hdb/hdb_locl.h9
-rw-r--r--crypto/heimdal/lib/krb5/crypto.c896
-rw-r--r--crypto/heimdal/lib/krb5/krb5_locl.h25
9 files changed, 168 insertions, 828 deletions
diff --git a/crypto/heimdal/admin/ktutil_locl.h b/crypto/heimdal/admin/ktutil_locl.h
index 955dd44..030ec1f 100644
--- a/crypto/heimdal/admin/ktutil_locl.h
+++ b/crypto/heimdal/admin/ktutil_locl.h
@@ -32,7 +32,8 @@
*/
/*
- * $Id: ktutil_locl.h,v 1.12 2000/07/19 13:58:19 assar Exp $
+ * $Id: ktutil_locl.h,v 1.11 2000/02/07 04:26:37 assar Exp $
+ * $FreeBSD$
*/
#ifndef __KTUTIL_LOCL_H__
@@ -51,10 +52,9 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#include <parse_time.h>
#include <roken.h>
-#include <des.h>
+#include <openssl/des.h>
#include <krb5.h>
#include <kadm5/admin.h>
diff --git a/crypto/heimdal/appl/ftp/ftp/ftp_locl.h b/crypto/heimdal/appl/ftp/ftp/ftp_locl.h
index 49c2b2f..c0d6cae 100644
--- a/crypto/heimdal/appl/ftp/ftp/ftp_locl.h
+++ b/crypto/heimdal/appl/ftp/ftp/ftp_locl.h
@@ -32,6 +32,7 @@
*/
/* $Id: ftp_locl.h,v 1.34 1999/12/02 16:58:29 joda Exp $ */
+/* $FreeBSD$ */
#ifndef __FTP_LOCL_H__
#define __FTP_LOCL_H__
@@ -129,7 +130,7 @@ struct hostent *gethostbyname(const char *);
#include "roken.h"
#include "security.h"
-#include <des.h> /* for des_read_pw_string */
+#include <openssl/des.h> /* for des_read_pw_string */
#if defined(__sun__) && !defined(__svr4)
int fclose(FILE*);
diff --git a/crypto/heimdal/kadmin/kadmin_locl.h b/crypto/heimdal/kadmin/kadmin_locl.h
index 3953cf3..aa5ba13 100644
--- a/crypto/heimdal/kadmin/kadmin_locl.h
+++ b/crypto/heimdal/kadmin/kadmin_locl.h
@@ -32,7 +32,8 @@
*/
/*
- * $Id: kadmin_locl.h,v 1.34 2000/09/19 12:46:18 assar Exp $
+ * $Id: kadmin_locl.h,v 1.25 2000/02/06 05:16:35 assar Exp $
+ * $FreeBSD$
*/
#ifndef __ADMIN_LOCL_H__
@@ -46,22 +47,15 @@
#include <string.h>
#include <ctype.h>
#include <errno.h>
-#include <limits.h>
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -72,9 +66,6 @@
#include <netinet6/in6.h>
#endif
-#ifdef HAVE_UTIL_H
-#include <util.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -83,9 +74,8 @@
#endif
#include <err.h>
#include <roken.h>
-#include <des.h>
+#include <openssl/des.h>
#include <krb5.h>
-#include <krb5_locl.h>
#include <hdb.h>
#include <hdb_err.h>
#include <kadm5/admin.h>
@@ -117,7 +107,6 @@ DECL(dump);
DECL(load);
DECL(merge);
-#undef ALLOC
#define ALLOC(X) ((X) = malloc(sizeof(*(X))))
/* util.c */
@@ -156,9 +145,6 @@ foreach_principal(const char *exp,
void get_response(const char *prompt, const char *def, char *buf, size_t len);
-int parse_des_key (const char *key_string,
- krb5_key_data *key_data, const char **err);
-
/* server.c */
krb5_error_code
@@ -167,23 +153,11 @@ kadmind_loop (krb5_context, krb5_auth_context, krb5_keytab, int);
/* version4.c */
void
-handle_v4(krb5_context context, krb5_keytab keytab, int len, int fd);
+handle_v4(krb5_context context, int len, int fd);
/* random_password.c */
void
random_password(char *pw, size_t len);
-/* kadm_conn.c */
-
-sig_atomic_t term_flag, doing_useful_work;
-
-void parse_ports(krb5_context, const char*);
-int start_server(krb5_context);
-
-/* server.c */
-
-krb5_error_code
-kadmind_loop (krb5_context, krb5_auth_context, krb5_keytab, int);
-
#endif /* __ADMIN_LOCL_H__ */
diff --git a/crypto/heimdal/kdc/headers.h b/crypto/heimdal/kdc/headers.h
index c4c8b5e..118e0d8 100644
--- a/crypto/heimdal/kdc/headers.h
+++ b/crypto/heimdal/kdc/headers.h
@@ -32,7 +32,8 @@
*/
/*
- * $Id: headers.h,v 1.10 2000/08/04 11:21:38 joda Exp $
+ * $Id: headers.h,v 1.6 2000/02/06 06:04:36 assar Exp $
+ * $FreeBSD$
*/
#ifndef __HEADERS_H__
@@ -74,17 +75,13 @@
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
-#ifdef HAVE_UTIL_H
-#include <util.h>
-#endif
#include <err.h>
#include <roken.h>
#include <getarg.h>
#include <base64.h>
#include <parse_units.h>
-#include <des.h>
+#include <openssl/des.h>
#include <krb5.h>
-#include <krb5_locl.h>
#include <hdb.h>
#include <hdb_err.h>
#include <der.h> /* copy_octet_string */
@@ -96,10 +93,6 @@
#include <krb_db.h>
#endif
-#undef ALLOC
#define ALLOC(X) ((X) = malloc(sizeof(*(X))))
-#undef ALLOC_SEQ
-#define ALLOC_SEQ(X, N) do { (X)->len = (N); \
-(X)->val = calloc((X)->len, sizeof(*(X)->val)); } while(0)
#endif /* __HEADERS_H__ */
diff --git a/crypto/heimdal/lib/des/rc4_enc.c b/crypto/heimdal/lib/des/rc4_enc.c
index 6b1686f..7e02f85 100644
--- a/crypto/heimdal/lib/des/rc4_enc.c
+++ b/crypto/heimdal/lib/des/rc4_enc.c
@@ -56,10 +56,11 @@
* [including the GNU Public Licence.]
*/
-#include "des_locl.h"
+/* #include "des_locl.h" */
#include "rc4.h"
-RCSID("$Id: rc4_enc.c,v 1.2 1999/10/21 12:58:43 joda Exp $");
+/* RCSID("$Id: rc4_enc.c,v 1.2 1999/10/21 12:58:43 joda Exp $"); */
+/* RCSID("$FreeBSD$"); */
/* RC4 as implemented from a posting from
* Newsgroups: sci.crypt
diff --git a/crypto/heimdal/lib/des/rc4_skey.c b/crypto/heimdal/lib/des/rc4_skey.c
index f5bce46..ec9e9da 100644
--- a/crypto/heimdal/lib/des/rc4_skey.c
+++ b/crypto/heimdal/lib/des/rc4_skey.c
@@ -56,10 +56,11 @@
* [including the GNU Public Licence.]
*/
-#include "des_locl.h"
+/* #include "des_locl.h" */
#include "rc4.h"
-RCSID("$Id: rc4_skey.c,v 1.2 1999/10/21 12:58:52 joda Exp $");
+/* RCSID("$Id: rc4_skey.c,v 1.2 1999/10/21 12:58:52 joda Exp $"); */
+/* RCSID("$FreeBSD$"); */
/* RC4 as implemented from a posting from
* Newsgroups: sci.crypt
diff --git a/crypto/heimdal/lib/hdb/hdb_locl.h b/crypto/heimdal/lib/hdb/hdb_locl.h
index 1c825fa..2ce6be7 100644
--- a/crypto/heimdal/lib/hdb/hdb_locl.h
+++ b/crypto/heimdal/lib/hdb/hdb_locl.h
@@ -31,7 +31,8 @@
* SUCH DAMAGE.
*/
-/* $Id: hdb_locl.h,v 1.14 2000/11/14 06:57:17 assar Exp $ */
+/* $Id: hdb_locl.h,v 1.13 2000/02/06 05:17:05 assar Exp $ */
+/* $FreeBSD$ */
#ifndef __HDB_LOCL_H__
#define __HDB_LOCL_H__
@@ -56,7 +57,7 @@
#endif
#include <roken.h>
-#include <des.h>
+#include <openssl/des.h>
#include <krb5.h>
#include <hdb.h>
#include <hdb-private.h>
@@ -67,10 +68,8 @@
#include <db.h>
#endif
-#if defined(HAVE_NDBM_H)
+#ifdef HAVE_NDBM_H
#include <ndbm.h>
-#elif defined(HAVE_GDBM_NDBM_H)
-#include <gdbm/ndbm.h>
#endif
int hdb_principal2key(krb5_context, krb5_principal, krb5_data*);
diff --git a/crypto/heimdal/lib/krb5/crypto.c b/crypto/heimdal/lib/krb5/crypto.c
index 0415542..08ebdba 100644
--- a/crypto/heimdal/lib/krb5/crypto.c
+++ b/crypto/heimdal/lib/krb5/crypto.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -32,7 +32,8 @@
*/
#include "krb5_locl.h"
-RCSID("$Id: crypto.c,v 1.43 2001/01/30 17:10:55 assar Exp $");
+RCSID("$Id: crypto.c,v 1.29 2000/01/25 23:06:55 assar Exp $");
+/* RCSID("$FreeBSD$"); */
#undef CRYPTO_DEBUG
#ifdef CRYPTO_DEBUG
@@ -65,7 +66,6 @@ struct krb5_crypto_data {
#define F_DERIVED 4 /* uses derived keys */
#define F_VARIANT 8 /* uses `variant' keys (6.4.3) */
#define F_PSEUDO 16 /* not a real protocol type */
-#define F_SPECIAL 32 /* backwards */
struct salt_type {
krb5_salttype type;
@@ -94,16 +94,9 @@ struct checksum_type {
size_t blocksize;
size_t checksumsize;
unsigned flags;
- void (*checksum)(krb5_context context,
- struct key_data *key,
- const void *buf, size_t len,
- unsigned usage,
- Checksum *csum);
- krb5_error_code (*verify)(krb5_context context,
- struct key_data *key,
- const void *buf, size_t len,
- unsigned usage,
- Checksum *csum);
+ void (*checksum)(krb5_context, struct key_data*, void*, size_t, Checksum*);
+ krb5_error_code (*verify)(krb5_context, struct key_data*,
+ void*, size_t, Checksum*);
};
struct encryption_type {
@@ -115,11 +108,7 @@ struct encryption_type {
struct checksum_type *cksumtype;
struct checksum_type *keyed_checksum;
unsigned flags;
- krb5_error_code (*encrypt)(struct key_data *key,
- void *data, size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ivec);
+ void (*encrypt)(struct key_data *, void *, size_t, int);
};
#define ENCRYPTION_USAGE(U) (((U) << 8) | 0xAA)
@@ -201,8 +190,7 @@ DES_AFS3_CMU_string_to_key (krb5_data pw,
for(i = 0; i < 8; i++) {
char c = ((i < pw.length) ? ((char*)pw.data)[i] : 0) ^
- ((i < cell.length) ?
- tolower(((unsigned char*)cell.data)[i]) : 0);
+ ((i < cell.length) ? ((char*)cell.data)[i] : 0);
password[i] = c ? c : 'X';
}
password[8] = '\0';
@@ -232,25 +220,23 @@ DES_AFS3_Transarc_string_to_key (krb5_data pw,
size_t passlen;
memcpy(password, pw.data, min(pw.length, sizeof(password)));
- if(pw.length < sizeof(password)) {
- int len = min(cell.length, sizeof(password) - pw.length);
- int i;
-
- memcpy(password + pw.length, cell.data, len);
- for (i = pw.length; i < pw.length + len; ++i)
- password[i] = tolower((unsigned char)password[i]);
- }
+ if(pw.length < sizeof(password))
+ memcpy(password + pw.length,
+ cell.data, min(cell.length,
+ sizeof(password) - pw.length));
passlen = min(sizeof(password), pw.length + cell.length);
memcpy(&ivec, "kerberos", 8);
memcpy(&temp_key, "kerberos", 8);
des_set_odd_parity (&temp_key);
des_set_key (&temp_key, schedule);
- des_cbc_cksum ((des_cblock *)password, &ivec, passlen, schedule, &ivec);
+ des_cbc_cksum ((const void *)password, &ivec, passlen,
+ schedule, &ivec);
memcpy(&temp_key, &ivec, 8);
des_set_odd_parity (&temp_key);
des_set_key (&temp_key, schedule);
- des_cbc_cksum ((des_cblock *)password, key, passlen, schedule, &ivec);
+ des_cbc_cksum ((const void *)password, key, passlen,
+ schedule, &ivec);
memset(&schedule, 0, sizeof(schedule));
memset(&temp_key, 0, sizeof(temp_key));
memset(&ivec, 0, sizeof(ivec));
@@ -354,8 +340,8 @@ DES3_string_to_key(krb5_context context,
des_set_key(keys + i, s[i]);
}
memset(&ivec, 0, sizeof(ivec));
- des_ede3_cbc_encrypt((des_cblock *)tmp,
- (des_cblock *)tmp, sizeof(tmp),
+ des_ede3_cbc_encrypt((const void *)tmp,
+ (void *)tmp, sizeof(tmp),
s[0], s[1], s[2], &ivec, DES_ENCRYPT);
memset(s, 0, sizeof(s));
memset(&ivec, 0, sizeof(ivec));
@@ -431,7 +417,7 @@ ARCFOUR_string_to_key(krb5_context context,
int i;
MD4_CTX m;
- len = 2 * password.length;
+ len = 2 * (password.length + salt.saltvalue.length);
s = malloc (len);
if (len != 0 && s == NULL)
return ENOMEM;
@@ -439,11 +425,15 @@ ARCFOUR_string_to_key(krb5_context context,
*p++ = ((char *)password.data)[i];
*p++ = 0;
}
- MD4_Init (&m);
- MD4_Update (&m, s, len);
+ for (i = 0; i < salt.saltvalue.length; ++i) {
+ *p++ = ((char *)salt.saltvalue.data)[i];
+ *p++ = 0;
+ }
+ MD4Init (&m);
+ MD4Update (&m, s, len);
key->keytype = enctype;
krb5_data_alloc (&key->keyvalue, 16);
- MD4_Final (key->keyvalue.data, &m);
+ MD4Final (key->keyvalue.data, &m);
memset (s, 0, len);
free (s);
return 0;
@@ -681,11 +671,6 @@ krb5_string_to_key (krb5_context context,
return krb5_string_to_key_data(context, enctype, pw, principal, key);
}
-/*
- * Do a string -> key for encryption type `enctype' operation on
- * `password' (with salt `salt'), returning the resulting key in `key'
- */
-
krb5_error_code
krb5_string_to_key_data_salt (krb5_context context,
krb5_enctype enctype,
@@ -703,12 +688,6 @@ krb5_string_to_key_data_salt (krb5_context context,
return HEIM_ERR_SALTTYPE_NOSUPP;
}
-/*
- * Do a string -> key for encryption type `enctype' operation on the
- * string `password' (with salt `salt'), returning the resulting key
- * in `key'
- */
-
krb5_error_code
krb5_string_to_key_salt (krb5_context context,
krb5_enctype enctype,
@@ -781,8 +760,6 @@ _key_schedule(krb5_context context,
if(kt->schedule == NULL)
return 0;
- if (key->schedule != NULL)
- return 0;
ALLOC(key->schedule, 1);
if(key->schedule == NULL)
return ENOMEM;
@@ -803,9 +780,8 @@ _key_schedule(krb5_context context,
static void
NONE_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
}
@@ -813,9 +789,8 @@ NONE_checksum(krb5_context context,
static void
CRC32_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
u_int32_t crc;
@@ -831,24 +806,22 @@ CRC32_checksum(krb5_context context,
static void
RSA_MD4_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD4_CTX m;
- MD4_Init (&m);
- MD4_Update (&m, data, len);
- MD4_Final (C->checksum.data, &m);
+ MD4Init (&m);
+ MD4Update (&m, data, len);
+ MD4Final (C->checksum.data, &m);
}
static void
RSA_MD4_DES_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *cksum)
{
MD4_CTX md4;
@@ -856,13 +829,13 @@ RSA_MD4_DES_checksum(krb5_context context,
unsigned char *p = cksum->checksum.data;
krb5_generate_random_block(p, 8);
- MD4_Init (&md4);
- MD4_Update (&md4, p, 8);
- MD4_Update (&md4, data, len);
- MD4_Final (p + 8, &md4);
+ MD4Init (&md4);
+ MD4Update (&md4, p, 8);
+ MD4Update (&md4, data, len);
+ MD4Final (p + 8, &md4);
memset (&ivec, 0, sizeof(ivec));
- des_cbc_encrypt((des_cblock*)p,
- (des_cblock*)p,
+ des_cbc_encrypt((const void *)p,
+ (void *)p,
24,
key->schedule->data,
&ivec,
@@ -872,9 +845,8 @@ RSA_MD4_DES_checksum(krb5_context context,
static krb5_error_code
RSA_MD4_DES_verify(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD4_CTX md4;
@@ -890,10 +862,10 @@ RSA_MD4_DES_verify(krb5_context context,
key->schedule->data,
&ivec,
DES_DECRYPT);
- MD4_Init (&md4);
- MD4_Update (&md4, tmp, 8); /* confounder */
- MD4_Update (&md4, data, len);
- MD4_Final (res, &md4);
+ MD4Init (&md4);
+ MD4Update (&md4, tmp, 8); /* confounder */
+ MD4Update (&md4, data, len);
+ MD4Final (res, &md4);
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
memset(tmp, 0, sizeof(tmp));
@@ -904,24 +876,22 @@ RSA_MD4_DES_verify(krb5_context context,
static void
RSA_MD5_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD5_CTX m;
- MD5_Init (&m);
- MD5_Update(&m, data, len);
- MD5_Final (C->checksum.data, &m);
+ MD5Init (&m);
+ MD5Update(&m, data, len);
+ MD5Final (C->checksum.data, &m);
}
static void
RSA_MD5_DES_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD5_CTX md5;
@@ -929,13 +899,13 @@ RSA_MD5_DES_checksum(krb5_context context,
unsigned char *p = C->checksum.data;
krb5_generate_random_block(p, 8);
- MD5_Init (&md5);
- MD5_Update (&md5, p, 8);
- MD5_Update (&md5, data, len);
- MD5_Final (p + 8, &md5);
+ MD5Init (&md5);
+ MD5Update (&md5, p, 8);
+ MD5Update (&md5, data, len);
+ MD5Final (p + 8, &md5);
memset (&ivec, 0, sizeof(ivec));
- des_cbc_encrypt((des_cblock*)p,
- (des_cblock*)p,
+ des_cbc_encrypt((const void *)p,
+ (void *)p,
24,
key->schedule->data,
&ivec,
@@ -945,9 +915,8 @@ RSA_MD5_DES_checksum(krb5_context context,
static krb5_error_code
RSA_MD5_DES_verify(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD5_CTX md5;
@@ -964,10 +933,10 @@ RSA_MD5_DES_verify(krb5_context context,
sched[0],
&ivec,
DES_DECRYPT);
- MD5_Init (&md5);
- MD5_Update (&md5, tmp, 8); /* confounder */
- MD5_Update (&md5, data, len);
- MD5_Final (res, &md5);
+ MD5Init (&md5);
+ MD5Update (&md5, tmp, 8); /* confounder */
+ MD5Update (&md5, data, len);
+ MD5Final (res, &md5);
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
memset(tmp, 0, sizeof(tmp));
@@ -978,9 +947,8 @@ RSA_MD5_DES_verify(krb5_context context,
static void
RSA_MD5_DES3_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD5_CTX md5;
@@ -989,13 +957,13 @@ RSA_MD5_DES3_checksum(krb5_context context,
des_key_schedule *sched = key->schedule->data;
krb5_generate_random_block(p, 8);
- MD5_Init (&md5);
- MD5_Update (&md5, p, 8);
- MD5_Update (&md5, data, len);
- MD5_Final (p + 8, &md5);
+ MD5Init (&md5);
+ MD5Update (&md5, p, 8);
+ MD5Update (&md5, data, len);
+ MD5Final (p + 8, &md5);
memset (&ivec, 0, sizeof(ivec));
- des_ede3_cbc_encrypt((des_cblock*)p,
- (des_cblock*)p,
+ des_ede3_cbc_encrypt((const void *)p,
+ (void *)p,
24,
sched[0], sched[1], sched[2],
&ivec,
@@ -1005,9 +973,8 @@ RSA_MD5_DES3_checksum(krb5_context context,
static krb5_error_code
RSA_MD5_DES3_verify(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
MD5_CTX md5;
@@ -1024,10 +991,10 @@ RSA_MD5_DES3_verify(krb5_context context,
sched[0], sched[1], sched[2],
&ivec,
DES_DECRYPT);
- MD5_Init (&md5);
- MD5_Update (&md5, tmp, 8); /* confounder */
- MD5_Update (&md5, data, len);
- MD5_Final (res, &md5);
+ MD5Init (&md5);
+ MD5Update (&md5, tmp, 8); /* confounder */
+ MD5Update (&md5, data, len);
+ MD5Final (res, &md5);
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
memset(tmp, 0, sizeof(tmp));
@@ -1038,25 +1005,23 @@ RSA_MD5_DES3_verify(krb5_context context,
static void
SHA1_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *C)
{
- SHA_CTX m;
+ SHA1_CTX m;
- SHA1_Init(&m);
- SHA1_Update(&m, data, len);
- SHA1_Final(C->checksum.data, &m);
+ SHA_Init(&m);
+ SHA_Update(&m, data, len);
+ SHA_Final(C->checksum.data, &m);
}
/* HMAC according to RFC2104 */
static void
hmac(krb5_context context,
struct checksum_type *cm,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
struct key_data *keyblock,
Checksum *result)
{
@@ -1070,7 +1035,6 @@ hmac(krb5_context context,
keyblock,
keyblock->key->keyvalue.data,
keyblock->key->keyvalue.length,
- usage,
result);
key = result->checksum.data;
key_len = result->checksum.length;
@@ -1087,12 +1051,11 @@ hmac(krb5_context context,
opad[i] ^= key[i];
}
memcpy(ipad + cm->blocksize, data, len);
- (*cm->checksum)(context, keyblock, ipad, cm->blocksize + len,
- usage, result);
+ (*cm->checksum)(context, keyblock, ipad, cm->blocksize + len, result);
memcpy(opad + cm->blocksize, result->checksum.data,
result->checksum.length);
(*cm->checksum)(context, keyblock, opad,
- cm->blocksize + cm->checksumsize, usage, result);
+ cm->blocksize + cm->checksumsize, result);
memset(ipad, 0, cm->blocksize + len);
free(ipad);
memset(opad, 0, cm->blocksize + cm->checksumsize);
@@ -1102,84 +1065,13 @@ hmac(krb5_context context,
static void
HMAC_SHA1_DES3_checksum(krb5_context context,
struct key_data *key,
- const void *data,
+ void *data,
size_t len,
- unsigned usage,
Checksum *result)
{
struct checksum_type *c = _find_checksum(CKSUMTYPE_SHA1);
- hmac(context, c, data, len, usage, key, result);
-}
-
-/*
- * checksum according to section 5. of draft-brezak-win2k-krb-rc4-hmac-03.txt
- */
-
-static void
-HMAC_MD5_checksum(krb5_context context,
- struct key_data *key,
- const void *data,
- size_t len,
- unsigned usage,
- Checksum *result)
-{
- MD5_CTX md5;
- struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
- const char signature[] = "signaturekey";
- Checksum ksign_c;
- struct key_data ksign;
- krb5_keyblock kb;
- unsigned char t[4];
- unsigned char tmp[16];
- unsigned char ksign_c_data[16];
-
- ksign_c.checksum.length = sizeof(ksign_c_data);
- ksign_c.checksum.data = ksign_c_data;
- hmac(context, c, signature, sizeof(signature), 0, key, &ksign_c);
- ksign.key = &kb;
- kb.keyvalue = ksign_c.checksum;
- MD5_Init (&md5);
- t[0] = (usage >> 0) & 0xFF;
- t[1] = (usage >> 8) & 0xFF;
- t[2] = (usage >> 16) & 0xFF;
- t[3] = (usage >> 24) & 0xFF;
- MD5_Update (&md5, t, 4);
- MD5_Update (&md5, data, len);
- MD5_Final (tmp, &md5);
- hmac(context, c, tmp, sizeof(tmp), 0, &ksign, result);
-}
-
-/*
- * same as previous but being used while encrypting.
- */
-
-static void
-HMAC_MD5_checksum_enc(krb5_context context,
- struct key_data *key,
- const void *data,
- size_t len,
- unsigned usage,
- Checksum *result)
-{
- struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
- Checksum ksign_c;
- struct key_data ksign;
- krb5_keyblock kb;
- unsigned char t[4];
- unsigned char ksign_c_data[16];
-
- t[0] = (usage >> 0) & 0xFF;
- t[1] = (usage >> 8) & 0xFF;
- t[2] = (usage >> 16) & 0xFF;
- t[3] = (usage >> 24) & 0xFF;
-
- ksign_c.checksum.length = sizeof(ksign_c_data);
- ksign_c.checksum.data = ksign_c_data;
- hmac(context, c, t, sizeof(t), 0, key, &ksign_c);
- ksign.key = &kb;
- kb.keyvalue = ksign_c.checksum;
- hmac(context, c, data, len, 0, &ksign, result);
+ hmac(context, c, data, len, key, result);
}
struct checksum_type checksum_none = {
@@ -1225,7 +1117,7 @@ struct checksum_type checksum_des_mac = {
0,
0,
0,
- DES_MAC_checksum
+ DES_MAC_checksum,
};
struct checksum_type checksum_des_mac_k = {
CKSUMTYPE_DES_MAC_K,
@@ -1233,7 +1125,7 @@ struct checksum_type checksum_des_mac_k = {
0,
0,
0,
- DES_MAC_K_checksum
+ DES_MAC_K_checksum,
};
struct checksum_type checksum_rsa_md4_des_k = {
CKSUMTYPE_RSA_MD4_DES_K,
@@ -1241,8 +1133,8 @@ struct checksum_type checksum_rsa_md4_des_k = {
0,
0,
0,
- RSA_MD4_DES_K_checksum,
- RSA_MD4_DES_K_verify
+ RSA_MD4_DES_K_checksum,
+ RSA_MD4_DES_K_verify,
};
#endif
struct checksum_type checksum_rsa_md5 = {
@@ -1261,7 +1153,7 @@ struct checksum_type checksum_rsa_md5_des = {
24,
F_KEYED | F_CPROOF | F_VARIANT,
RSA_MD5_DES_checksum,
- RSA_MD5_DES_verify
+ RSA_MD5_DES_verify,
};
struct checksum_type checksum_rsa_md5_des3 = {
CKSUMTYPE_RSA_MD5_DES3,
@@ -1270,7 +1162,7 @@ struct checksum_type checksum_rsa_md5_des3 = {
24,
F_KEYED | F_CPROOF | F_VARIANT,
RSA_MD5_DES3_checksum,
- RSA_MD5_DES3_verify
+ RSA_MD5_DES3_verify,
};
struct checksum_type checksum_sha1 = {
CKSUMTYPE_SHA1,
@@ -1291,26 +1183,6 @@ struct checksum_type checksum_hmac_sha1_des3 = {
NULL
};
-struct checksum_type checksum_hmac_md5 = {
- CKSUMTYPE_HMAC_MD5,
- "hmac-md5",
- 64,
- 16,
- F_KEYED | F_CPROOF,
- HMAC_MD5_checksum,
- NULL
-};
-
-struct checksum_type checksum_hmac_md5_enc = {
- CKSUMTYPE_HMAC_MD5_ENC,
- "hmac-md5-enc",
- 64,
- 16,
- F_KEYED | F_CPROOF | F_PSEUDO,
- HMAC_MD5_checksum_enc,
- NULL
-};
-
struct checksum_type *checksum_types[] = {
&checksum_none,
&checksum_crc32,
@@ -1325,9 +1197,7 @@ struct checksum_type *checksum_types[] = {
&checksum_rsa_md5_des,
&checksum_rsa_md5_des3,
&checksum_sha1,
- &checksum_hmac_sha1_des3,
- &checksum_hmac_md5,
- &checksum_hmac_md5_enc
+ &checksum_hmac_sha1_des3
};
static int num_checksums = sizeof(checksum_types) / sizeof(checksum_types[0]);
@@ -1388,15 +1258,13 @@ do_checksum (krb5_context context,
keyed_checksum = (ct->flags & F_KEYED) != 0;
if(keyed_checksum && crypto == NULL)
return KRB5_PROG_SUMTYPE_NOSUPP; /* XXX */
- if(keyed_checksum) {
+ if(keyed_checksum)
ret = get_checksum_key(context, crypto, usage, ct, &dkey);
- if (ret)
- return ret;
- } else
+ else
dkey = NULL;
result->cksumtype = ct->type;
krb5_data_alloc(&result->checksum, ct->checksumsize);
- (*ct->checksum)(context, dkey, data, len, usage, result);
+ (*ct->checksum)(context, dkey, data, len, result);
return 0;
}
@@ -1462,13 +1330,13 @@ verify_checksum(krb5_context context,
else
dkey = NULL;
if(ct->verify)
- return (*ct->verify)(context, dkey, data, len, usage, cksum);
+ return (*ct->verify)(context, dkey, data, len, cksum);
ret = krb5_data_alloc (&c.checksum, ct->checksumsize);
if (ret)
return ret;
- (*ct->checksum)(context, dkey, data, len, usage, &c);
+ (*ct->checksum)(context, dkey, data, len, &c);
if(c.checksum.length != cksum->checksum.length ||
memcmp(c.checksum.data, cksum->checksum.data, c.checksum.length))
@@ -1527,297 +1395,62 @@ krb5_checksum_is_collision_proof(krb5_context context,
* *
************************************************************/
-static krb5_error_code
+static void
NULL_encrypt(struct key_data *key,
void *data,
size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ivec)
+ krb5_boolean encrypt)
{
- return 0;
}
-static krb5_error_code
+static void
DES_CBC_encrypt_null_ivec(struct key_data *key,
void *data,
size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ignore_ivec)
+ krb5_boolean encrypt)
{
des_cblock ivec;
des_key_schedule *s = key->schedule->data;
memset(&ivec, 0, sizeof(ivec));
des_cbc_encrypt(data, data, len, *s, &ivec, encrypt);
- return 0;
}
-static krb5_error_code
+static void
DES_CBC_encrypt_key_ivec(struct key_data *key,
void *data,
size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ignore_ivec)
+ krb5_boolean encrypt)
{
des_cblock ivec;
des_key_schedule *s = key->schedule->data;
memcpy(&ivec, key->key->keyvalue.data, sizeof(ivec));
des_cbc_encrypt(data, data, len, *s, &ivec, encrypt);
- return 0;
}
-static krb5_error_code
+static void
DES3_CBC_encrypt(struct key_data *key,
void *data,
size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ignore_ivec)
+ krb5_boolean encrypt)
{
des_cblock ivec;
des_key_schedule *s = key->schedule->data;
memset(&ivec, 0, sizeof(ivec));
des_ede3_cbc_encrypt(data, data, len, s[0], s[1], s[2], &ivec, encrypt);
- return 0;
}
-static krb5_error_code
-DES3_CBC_encrypt_ivec(struct key_data *key,
- void *data,
- size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ivec)
-{
- des_key_schedule *s = key->schedule->data;
-
- des_ede3_cbc_encrypt(data, data, len, s[0], s[1], s[2], ivec, encrypt);
- return 0;
-}
-
-static krb5_error_code
-DES_CFB64_encrypt_null_ivec(struct key_data *key,
- void *data,
- size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ignore_ivec)
-{
- des_cblock ivec;
- int num = 0;
- des_key_schedule *s = key->schedule->data;
- memset(&ivec, 0, sizeof(ivec));
-
- des_cfb64_encrypt(data, data, len, *s, &ivec, &num, encrypt);
- return 0;
-}
-
-static krb5_error_code
-DES_PCBC_encrypt_key_ivec(struct key_data *key,
- void *data,
- size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ignore_ivec)
-{
- des_cblock ivec;
- des_key_schedule *s = key->schedule->data;
- memcpy(&ivec, key->key->keyvalue.data, sizeof(ivec));
-
- des_pcbc_encrypt(data, data, len, *s, &ivec, encrypt);
- return 0;
-}
-
-/*
- * section 6 of draft-brezak-win2k-krb-rc4-hmac-03
- *
- * warning: not for small children
- */
-
-static krb5_error_code
-ARCFOUR_subencrypt(struct key_data *key,
- void *data,
- size_t len,
- int usage,
- void *ivec)
-{
- struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
- Checksum k1_c, k2_c, k3_c, cksum;
- struct key_data ke;
- krb5_keyblock kb;
- unsigned char t[4];
- RC4_KEY rc4_key;
- char *cdata = (char *)data;
- unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
-
- t[0] = (usage >> 0) & 0xFF;
- t[1] = (usage >> 8) & 0xFF;
- t[2] = (usage >> 16) & 0xFF;
- t[3] = (usage >> 24) & 0xFF;
-
- k1_c.checksum.length = sizeof(k1_c_data);
- k1_c.checksum.data = k1_c_data;
-
- hmac(NULL, c, t, sizeof(t), 0, key, &k1_c);
-
- memcpy (k2_c_data, k1_c_data, sizeof(k1_c_data));
-
- k2_c.checksum.length = sizeof(k2_c_data);
- k2_c.checksum.data = k2_c_data;
-
- ke.key = &kb;
- kb.keyvalue = k2_c.checksum;
-
- cksum.checksum.length = 16;
- cksum.checksum.data = data;
-
- hmac(NULL, c, cdata + 16, len - 16, 0, &ke, &cksum);
-
- ke.key = &kb;
- kb.keyvalue = k1_c.checksum;
-
- k3_c.checksum.length = sizeof(k3_c_data);
- k3_c.checksum.data = k3_c_data;
-
- hmac(NULL, c, data, 16, 0, &ke, &k3_c);
-
- RC4_set_key (&rc4_key, k3_c.checksum.length, k3_c.checksum.data);
- RC4 (&rc4_key, len - 16, cdata + 16, cdata + 16);
- memset (k1_c_data, 0, sizeof(k1_c_data));
- memset (k2_c_data, 0, sizeof(k2_c_data));
- memset (k3_c_data, 0, sizeof(k3_c_data));
- return 0;
-}
-
-static krb5_error_code
-ARCFOUR_subdecrypt(struct key_data *key,
- void *data,
- size_t len,
- int usage,
- void *ivec)
-{
- struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
- Checksum k1_c, k2_c, k3_c, cksum;
- struct key_data ke;
- krb5_keyblock kb;
- unsigned char t[4];
- RC4_KEY rc4_key;
- char *cdata = (char *)data;
- unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
- unsigned char cksum_data[16];
-
- t[0] = (usage >> 0) & 0xFF;
- t[1] = (usage >> 8) & 0xFF;
- t[2] = (usage >> 16) & 0xFF;
- t[3] = (usage >> 24) & 0xFF;
-
- k1_c.checksum.length = sizeof(k1_c_data);
- k1_c.checksum.data = k1_c_data;
-
- hmac(NULL, c, t, sizeof(t), 0, key, &k1_c);
-
- memcpy (k2_c_data, k1_c_data, sizeof(k1_c_data));
-
- k2_c.checksum.length = sizeof(k2_c_data);
- k2_c.checksum.data = k2_c_data;
-
- ke.key = &kb;
- kb.keyvalue = k1_c.checksum;
-
- k3_c.checksum.length = sizeof(k3_c_data);
- k3_c.checksum.data = k3_c_data;
-
- hmac(NULL, c, cdata, 16, 0, &ke, &k3_c);
-
- RC4_set_key (&rc4_key, k3_c.checksum.length, k3_c.checksum.data);
- RC4 (&rc4_key, len - 16, cdata + 16, cdata + 16);
-
- ke.key = &kb;
- kb.keyvalue = k2_c.checksum;
-
- cksum.checksum.length = 16;
- cksum.checksum.data = cksum_data;
-
- hmac(NULL, c, cdata + 16, len - 16, 0, &ke, &cksum);
-
- memset (k1_c_data, 0, sizeof(k1_c_data));
- memset (k2_c_data, 0, sizeof(k2_c_data));
- memset (k3_c_data, 0, sizeof(k3_c_data));
-
- if (memcmp (cksum.checksum.data, data, 16) != 0)
- return KRB5KRB_AP_ERR_BAD_INTEGRITY;
- else
- return 0;
-}
-
-/*
- * convert the usage numbers used in
- * draft-ietf-cat-kerb-key-derivation-00.txt to the ones in
- * draft-brezak-win2k-krb-rc4-hmac-03.txt
- */
-
-static int
-usage2arcfour (int usage)
-{
- switch (usage) {
- case KRB5_KU_PA_ENC_TIMESTAMP :
- return 1;
- case KRB5_KU_TICKET :
- return 8;
- case KRB5_KU_AS_REP_ENC_PART :
- return 8;
- case KRB5_KU_TGS_REQ_AUTH_DAT_SESSION :
- case KRB5_KU_TGS_REQ_AUTH_DAT_SUBKEY :
- case KRB5_KU_TGS_REQ_AUTH_CKSUM :
- case KRB5_KU_TGS_REQ_AUTH :
- return 7;
- case KRB5_KU_TGS_REP_ENC_PART_SESSION :
- case KRB5_KU_TGS_REP_ENC_PART_SUB_KEY :
- return 8;
- case KRB5_KU_AP_REQ_AUTH_CKSUM :
- case KRB5_KU_AP_REQ_AUTH :
- case KRB5_KU_AP_REQ_ENC_PART :
- return 11;
- case KRB5_KU_KRB_PRIV :
- return 0;
- case KRB5_KU_KRB_CRED :
- case KRB5_KU_KRB_SAFE_CKSUM :
- case KRB5_KU_OTHER_ENCRYPTED :
- case KRB5_KU_OTHER_CKSUM :
- case KRB5_KU_KRB_ERROR :
- case KRB5_KU_AD_KDC_ISSUED :
- case KRB5_KU_MANDATORY_TICKET_EXTENSION :
- case KRB5_KU_AUTH_DATA_TICKET_EXTENSION :
- case KRB5_KU_USAGE_SEAL :
- case KRB5_KU_USAGE_SIGN :
- case KRB5_KU_USAGE_SEQ :
- default :
- abort ();
- }
-}
-
-static krb5_error_code
+static void
ARCFOUR_encrypt(struct key_data *key,
void *data,
size_t len,
- krb5_boolean encrypt,
- int usage,
- void *ivec)
+ krb5_boolean encrypt)
{
- usage = usage2arcfour (usage);
- if (encrypt)
- return ARCFOUR_subencrypt (key, data, len, usage, ivec);
- else
- return ARCFOUR_subdecrypt (key, data, len, usage, ivec);
}
-
/*
* these should currently be in reverse preference order.
- * (only relevant for !F_PSEUDO) */
+ */
static struct encryption_type etypes[] = {
{
@@ -1864,17 +1497,6 @@ static struct encryption_type etypes[] = {
0,
DES_CBC_encrypt_null_ivec,
},
- {
- ETYPE_ARCFOUR_HMAC_MD5,
- "arcfour-hmac-md5",
- 1,
- 8,
- &keytype_arcfour,
- &checksum_hmac_md5_enc,
- &checksum_hmac_md5_enc,
- F_SPECIAL,
- ARCFOUR_encrypt
- },
{
ETYPE_DES3_CBC_MD5,
"des3-cbc-md5",
@@ -1920,28 +1542,6 @@ static struct encryption_type etypes[] = {
DES_CBC_encrypt_null_ivec,
},
{
- ETYPE_DES_CFB64_NONE,
- "des-cfb64-none",
- 1,
- 0,
- &keytype_des,
- &checksum_none,
- NULL,
- F_PSEUDO,
- DES_CFB64_encrypt_null_ivec,
- },
- {
- ETYPE_DES_PCBC_NONE,
- "des-pcbc-none",
- 8,
- 0,
- &keytype_des,
- &checksum_none,
- NULL,
- F_PSEUDO,
- DES_PCBC_encrypt_key_ivec,
- },
- {
ETYPE_DES3_CBC_NONE,
"des3-cbc-none",
8,
@@ -1950,19 +1550,8 @@ static struct encryption_type etypes[] = {
&checksum_none,
NULL,
F_PSEUDO,
- DES3_CBC_encrypt,
+ DES_CBC_encrypt_null_ivec,
},
- {
- ETYPE_DES3_CBC_NONE_IVEC,
- "des3-cbc-none-ivec",
- 8,
- 0,
- &keytype_des3_derived,
- &checksum_none,
- NULL,
- F_PSEUDO,
- DES3_CBC_encrypt_ivec,
- }
};
static unsigned num_etypes = sizeof(etypes) / sizeof(etypes[0]);
@@ -2118,12 +1707,6 @@ derived_crypto(krb5_context context,
return (crypto->et->flags & F_DERIVED) != 0;
}
-static krb5_boolean
-special_crypto(krb5_context context,
- krb5_crypto crypto)
-{
- return (crypto->et->flags & F_SPECIAL) != 0;
-}
#define CHECKSUMSIZE(C) ((C)->checksumsize)
#define CHECKSUMTYPE(C) ((C)->type)
@@ -2134,8 +1717,7 @@ encrypt_internal_derived(krb5_context context,
unsigned usage,
void *data,
size_t len,
- krb5_data *result,
- void *ivec)
+ krb5_data *result)
{
size_t sz, block_sz, checksum_sz;
Checksum cksum;
@@ -2164,17 +1746,14 @@ encrypt_internal_derived(krb5_context context,
p,
block_sz,
&cksum);
- if(ret == 0 && cksum.checksum.length != checksum_sz) {
- free_Checksum (&cksum);
- ret = KRB5_CRYPTO_INTERNAL;
- }
+ if(ret == 0 && cksum.checksum.length != checksum_sz)
+ ret = KRB5_CRYPTO_INTERNAL;
if(ret) {
memset(p, 0, block_sz + checksum_sz);
free(p);
return ret;
}
memcpy(p + block_sz, cksum.checksum.data, cksum.checksum.length);
- free_Checksum (&cksum);
ret = _get_derived_key(context, crypto, ENCRYPTION_USAGE(usage), &dkey);
if(ret) {
memset(p, 0, block_sz + checksum_sz);
@@ -2190,7 +1769,7 @@ encrypt_internal_derived(krb5_context context,
#ifdef CRYPTO_DEBUG
krb5_crypto_debug(context, 1, block_sz, dkey->key);
#endif
- (*et->encrypt)(dkey, p, block_sz, 1, usage, ivec);
+ (*et->encrypt)(dkey, p, block_sz, 1);
result->data = p;
result->length = block_sz + checksum_sz;
return 0;
@@ -2201,8 +1780,7 @@ encrypt_internal(krb5_context context,
krb5_crypto crypto,
void *data,
size_t len,
- krb5_data *result,
- void *ivec)
+ krb5_data *result)
{
size_t sz, block_sz, checksum_sz;
Checksum cksum;
@@ -2253,49 +1831,19 @@ encrypt_internal(krb5_context context,
#ifdef CRYPTO_DEBUG
krb5_crypto_debug(context, 1, block_sz, crypto->key.key);
#endif
- (*et->encrypt)(&crypto->key, p, block_sz, 1, 0, ivec);
+ (*et->encrypt)(&crypto->key, p, block_sz, 1);
result->data = p;
result->length = block_sz;
return 0;
}
static krb5_error_code
-encrypt_internal_special(krb5_context context,
- krb5_crypto crypto,
- int usage,
- void *data,
- size_t len,
- krb5_data *result,
- void *ivec)
-{
- struct encryption_type *et = crypto->et;
- size_t cksum_sz = CHECKSUMSIZE(et->cksumtype);
- size_t sz = len + cksum_sz + et->confoundersize;
- char *tmp, *p;
-
- tmp = malloc (sz);
- if (tmp == NULL)
- return ENOMEM;
- p = tmp;
- memset (p, 0, cksum_sz);
- p += cksum_sz;
- krb5_generate_random_block(p, et->confoundersize);
- p += et->confoundersize;
- memcpy (p, data, len);
- (*et->encrypt)(&crypto->key, tmp, sz, TRUE, usage, ivec);
- result->data = tmp;
- result->length = sz;
- return 0;
-}
-
-static krb5_error_code
decrypt_internal_derived(krb5_context context,
krb5_crypto crypto,
unsigned usage,
void *data,
size_t len,
- krb5_data *result,
- void *ivec)
+ krb5_data *result)
{
size_t checksum_sz;
Checksum cksum;
@@ -2305,15 +1853,12 @@ decrypt_internal_derived(krb5_context context,
struct encryption_type *et = crypto->et;
unsigned long l;
- checksum_sz = CHECKSUMSIZE(et->keyed_checksum);
- if (len < checksum_sz)
- return EINVAL; /* better error code? */
-
p = malloc(len);
if(len != 0 && p == NULL)
return ENOMEM;
memcpy(p, data, len);
+ checksum_sz = CHECKSUMSIZE(et->keyed_checksum);
len -= checksum_sz;
ret = _get_derived_key(context, crypto, ENCRYPTION_USAGE(usage), &dkey);
@@ -2329,7 +1874,7 @@ decrypt_internal_derived(krb5_context context,
#ifdef CRYPTO_DEBUG
krb5_crypto_debug(context, 0, len, dkey->key);
#endif
- (*et->encrypt)(dkey, p, len, 0, usage, ivec);
+ (*et->encrypt)(dkey, p, len, 0);
cksum.checksum.data = p + len;
cksum.checksum.length = checksum_sz;
@@ -2361,8 +1906,7 @@ decrypt_internal(krb5_context context,
krb5_crypto crypto,
void *data,
size_t len,
- krb5_data *result,
- void *ivec)
+ krb5_data *result)
{
krb5_error_code ret;
unsigned char *p;
@@ -2384,11 +1928,11 @@ decrypt_internal(krb5_context context,
#ifdef CRYPTO_DEBUG
krb5_crypto_debug(context, 0, len, crypto->key.key);
#endif
- (*et->encrypt)(&crypto->key, p, len, 0, 0, ivec);
+ (*et->encrypt)(&crypto->key, p, len, 0);
ret = krb5_data_copy(&cksum.checksum, p + et->confoundersize, checksum_sz);
if(ret) {
- free(p);
- return ret;
+ free(p);
+ return ret;
}
memset(p + et->confoundersize, 0, checksum_sz);
cksum.cksumtype = CHECKSUMTYPE(et->cksumtype);
@@ -2409,54 +1953,6 @@ decrypt_internal(krb5_context context,
return 0;
}
-static krb5_error_code
-decrypt_internal_special(krb5_context context,
- krb5_crypto crypto,
- int usage,
- void *data,
- size_t len,
- krb5_data *result,
- void *ivec)
-{
- struct encryption_type *et = crypto->et;
- size_t cksum_sz = CHECKSUMSIZE(et->cksumtype);
- size_t sz = len - cksum_sz - et->confoundersize;
- char *cdata = (char *)data;
- char *tmp;
-
- tmp = malloc (sz);
- if (tmp == NULL)
- return ENOMEM;
-
- (*et->encrypt)(&crypto->key, data, len, FALSE, usage, ivec);
-
- memcpy (tmp, cdata + cksum_sz + et->confoundersize, sz);
-
- result->data = tmp;
- result->length = sz;
- return 0;
-}
-
-
-krb5_error_code
-krb5_encrypt_ivec(krb5_context context,
- krb5_crypto crypto,
- unsigned usage,
- void *data,
- size_t len,
- krb5_data *result,
- void *ivec)
-{
- if(derived_crypto(context, crypto))
- return encrypt_internal_derived(context, crypto, usage,
- data, len, result, ivec);
- else if (special_crypto(context, crypto))
- return encrypt_internal_special (context, crypto, usage,
- data, len, result, ivec);
- else
- return encrypt_internal(context, crypto, data, len, result, ivec);
-}
-
krb5_error_code
krb5_encrypt(krb5_context context,
krb5_crypto crypto,
@@ -2465,7 +1961,11 @@ krb5_encrypt(krb5_context context,
size_t len,
krb5_data *result)
{
- return krb5_encrypt_ivec(context, crypto, usage, data, len, result, NULL);
+ if(derived_crypto(context, crypto))
+ return encrypt_internal_derived(context, crypto, usage,
+ data, len, result);
+ else
+ return encrypt_internal(context, crypto, data, len, result);
}
krb5_error_code
@@ -2487,25 +1987,6 @@ krb5_encrypt_EncryptedData(krb5_context context,
}
krb5_error_code
-krb5_decrypt_ivec(krb5_context context,
- krb5_crypto crypto,
- unsigned usage,
- void *data,
- size_t len,
- krb5_data *result,
- void *ivec)
-{
- if(derived_crypto(context, crypto))
- return decrypt_internal_derived(context, crypto, usage,
- data, len, result, ivec);
- else if (special_crypto (context, crypto))
- return decrypt_internal_special(context, crypto, usage,
- data, len, result, ivec);
- else
- return decrypt_internal(context, crypto, data, len, result, ivec);
-}
-
-krb5_error_code
krb5_decrypt(krb5_context context,
krb5_crypto crypto,
unsigned usage,
@@ -2513,15 +1994,18 @@ krb5_decrypt(krb5_context context,
size_t len,
krb5_data *result)
{
- return krb5_decrypt_ivec (context, crypto, usage, data, len, result,
- NULL);
+ if(derived_crypto(context, crypto))
+ return decrypt_internal_derived(context, crypto, usage,
+ data, len, result);
+ else
+ return decrypt_internal(context, crypto, data, len, result);
}
krb5_error_code
krb5_decrypt_EncryptedData(krb5_context context,
krb5_crypto crypto,
unsigned usage,
- const EncryptedData *e,
+ EncryptedData *e,
krb5_data *result)
{
return krb5_decrypt(context, crypto, usage,
@@ -2608,7 +2092,7 @@ derive_key(krb5_context context,
ret = _key_schedule(context, key);
if(ret)
return ret;
- if(et->blocksize * 8 < kt->bits ||
+ if(et->blocksize * 8 < kt->bits ||
len != et->blocksize) {
nblocks = (kt->bits + et->blocksize * 8 - 1) / (et->blocksize * 8);
k = malloc(nblocks * et->blocksize);
@@ -2620,18 +2104,16 @@ derive_key(krb5_context context,
memcpy(k + i * et->blocksize,
k + (i - 1) * et->blocksize,
et->blocksize);
- (*et->encrypt)(key, k + i * et->blocksize, et->blocksize, 1, 0,
- NULL);
+ (*et->encrypt)(key, k + i * et->blocksize, et->blocksize, 1);
}
} else {
- /* this case is probably broken, but won't be run anyway */
void *c = malloc(len);
size_t res_len = (kt->bits + 7) / 8;
if(len != 0 && c == NULL)
return ENOMEM;
memcpy(c, constant, len);
- (*et->encrypt)(key, c, len, 1, 0, NULL);
+ (*et->encrypt)(key, c, len, 1);
k = malloc(res_len);
if(res_len != 0 && k == NULL)
return ENOMEM;
@@ -2784,35 +2266,6 @@ krb5_string_to_key_derived(krb5_context context,
return ret;
}
-static size_t
-wrapped_length (krb5_context context,
- krb5_crypto crypto,
- size_t data_len)
-{
- struct encryption_type *et = crypto->et;
- size_t blocksize = et->blocksize;
- size_t res;
-
- res = et->confoundersize + et->cksumtype->checksumsize + data_len;
- res = (res + blocksize - 1) / blocksize * blocksize;
- return res;
-}
-
-static size_t
-wrapped_length_dervied (krb5_context context,
- krb5_crypto crypto,
- size_t data_len)
-{
- struct encryption_type *et = crypto->et;
- size_t blocksize = et->blocksize;
- size_t res;
-
- res = et->confoundersize + data_len;
- res = (res + blocksize - 1) / blocksize * blocksize;
- res += et->cksumtype->checksumsize;
- return res;
-}
-
/*
* Return the size of an encrypted packet of length `data_len'
*/
@@ -2822,10 +2275,13 @@ krb5_get_wrapped_length (krb5_context context,
krb5_crypto crypto,
size_t data_len)
{
- if (derived_crypto (context, crypto))
- return wrapped_length_dervied (context, crypto, data_len);
- else
- return wrapped_length (context, crypto, data_len);
+ struct encryption_type *et = crypto->et;
+ size_t blocksize = et->blocksize;
+ size_t res;
+
+ res = (data_len + blocksize - 1) / blocksize * blocksize;
+ res = res + et->confoundersize + et->cksumtype->checksumsize;
+ return res;
}
#ifdef CRYPTO_DEBUG
@@ -2838,9 +2294,9 @@ krb5_get_keyid(krb5_context context,
MD5_CTX md5;
unsigned char tmp[16];
- MD5_Init (&md5);
- MD5_Update (&md5, key->keyvalue.data, key->keyvalue.length);
- MD5_Final (tmp, &md5);
+ MD5Init (&md5);
+ MD5Update (&md5, key->keyvalue.data, key->keyvalue.length);
+ MD5Final (tmp, &md5);
*keyid = (tmp[12] << 24) | (tmp[13] << 16) | (tmp[14] << 8) | tmp[15];
return 0;
}
@@ -2864,69 +2320,3 @@ krb5_crypto_debug(krb5_context context,
}
#endif /* CRYPTO_DEBUG */
-
-#if 0
-int
-main()
-{
-#if 0
- int i;
- krb5_context context;
- krb5_crypto crypto;
- struct key_data *d;
- krb5_keyblock key;
- char constant[4];
- unsigned usage = ENCRYPTION_USAGE(3);
- krb5_error_code ret;
-
- ret = krb5_init_context(&context);
- if (ret)
- errx (1, "krb5_init_context failed: %d", ret);
-
- key.keytype = ETYPE_NEW_DES3_CBC_SHA1;
- key.keyvalue.data = "\xb3\x85\x58\x94\xd9\xdc\x7c\xc8"
- "\x25\xe9\x85\xab\x3e\xb5\xfb\x0e"
- "\xc8\xdf\xab\x26\x86\x64\x15\x25";
- key.keyvalue.length = 24;
-
- krb5_crypto_init(context, &key, 0, &crypto);
-
- d = _new_derived_key(crypto, usage);
- if(d == NULL)
- return ENOMEM;
- krb5_copy_keyblock(context, crypto->key.key, &d->key);
- _krb5_put_int(constant, usage, 4);
- derive_key(context, crypto->et, d, constant, sizeof(constant));
- return 0;
-#else
- int i;
- krb5_context context;
- krb5_crypto crypto;
- struct key_data *d;
- krb5_keyblock key;
- krb5_error_code ret;
- Checksum res;
-
- char *data = "what do ya want for nothing?";
-
- ret = krb5_init_context(&context);
- if (ret)
- errx (1, "krb5_init_context failed: %d", ret);
-
- key.keytype = ETYPE_NEW_DES3_CBC_SHA1;
- key.keyvalue.data = "Jefe";
- /* "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; */
- key.keyvalue.length = 4;
-
- d = calloc(1, sizeof(*d));
-
- d->key = &key;
- res.checksum.length = 20;
- res.checksum.data = malloc(res.checksum.length);
- HMAC_SHA1_DES3_checksum(context, d, data, 28, &res);
-
- return 0;
-#endif
-}
-#endif
diff --git a/crypto/heimdal/lib/krb5/krb5_locl.h b/crypto/heimdal/lib/krb5/krb5_locl.h
index 7ea9038..6a4c7fd 100644
--- a/crypto/heimdal/lib/krb5/krb5_locl.h
+++ b/crypto/heimdal/lib/krb5/krb5_locl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997-1999 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -31,7 +31,8 @@
* SUCH DAMAGE.
*/
-/* $Id: krb5_locl.h,v 1.64 2001/01/29 02:09:00 assar Exp $ */
+/* $Id: krb5_locl.h,v 1.63 1999/12/02 17:05:11 joda Exp $ */
+/* $FreeBSD$ */
#ifndef __KRB5_LOCL_H__
#define __KRB5_LOCL_H__
@@ -109,31 +110,11 @@ struct sockaddr_dl;
#include <parse_time.h>
#include <base64.h>
-#ifdef HAVE_OPENSSL_DES_H
#include <openssl/des.h>
-#else
-#include <des.h>
-#endif
-#ifdef HAVE_OPENSSL_MD4_H
-#include <openssl/md4.h>
-#else
#include <md4.h>
-#endif
-#ifdef HAVE_OPENSSL_MD5_H
-#include <openssl/md5.h>
-#else
#include <md5.h>
-#endif
-#ifdef HAVE_OPENSSL_SHA_H
-#include <openssl/sha.h>
-#else
#include <sha.h>
-#endif
-#ifdef HAVE_OPENSSL_RC4_H
-#include <openssl/rc4.h>
-#else
#include <rc4.h>
-#endif
#include <asn1.h>
#include <der.h>
OpenPOWER on IntegriCloud