(hex2n, parse_des_key): add

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8055 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2000-03-23 22:55:16 +00:00
parent 91b6bc6386
commit 3e52cd86f1

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 1998, 1999 Kungliga Tekniska H<>gskolan
* Copyright (c) 1997 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -518,3 +518,66 @@ get_response(const char *prompt, const char *def, char *buf, size_t len)
strncpy(buf, def, len);
buf[len-1] = 0;
}
/*
* return [0, 16) or -1
*/
static int
hex2n (char c)
{
static char hexdigits[] = "0123456789abcdef";
const char *p;
p = strchr (hexdigits, tolower(c));
if (p == NULL)
return -1;
else
return p - hexdigits;
}
/*
* convert a key in a readable format into a keyblock.
* return 0 iff succesful.
*/
int
parse_des_key (const char *key_string, krb5_key_data *key_data,
const char **err)
{
const char *p = key_string;
unsigned char bits[8];
int i;
if (strlen (key_string) != 16) {
*err = "bad length, should be 16 for DES key";
return 1;
}
for (i = 0; i < 8; ++i) {
int d1, d2;
d1 = hex2n(p[2 * i]);
d2 = hex2n(p[2 * i + 1]);
if (d1 < 0 || d2 < 0) {
*err = "non-hex character";
return 1;
}
bits[i] = (d1 << 4) | d2;
}
for (i = 0; i < 3; ++i) {
key_data[i].key_data_ver = 2;
key_data[i].key_data_kvno = 0;
/* key */
key_data[i].key_data_type[0] = ETYPE_DES_CBC_CRC;
key_data[i].key_data_length[0] = 8;
key_data[i].key_data_contents[0] = malloc(8);
memcpy (key_data[i].key_data_contents[0], bits, 8);
/* salt */
key_data[i].key_data_type[1] = KRB5_PW_SALT;
key_data[i].key_data_length[1] = 0;
key_data[i].key_data_contents[1] = NULL;
}
key_data[0].key_data_type[0] = ETYPE_DES_CBC_MD5;
key_data[1].key_data_type[0] = ETYPE_DES_CBC_MD4;
return 0;
}