diff --git a/lib/krb5/generate_seq_number.c b/lib/krb5/generate_seq_number.c new file mode 100644 index 000000000..e84f7af80 --- /dev/null +++ b/lib/krb5/generate_seq_number.c @@ -0,0 +1,25 @@ +#include + +RCSID("$Id$"); + +krb5_error_code +krb5_generate_seq_number(krb5_context context, + const krb5_keyblock *key, + int32_t *seqno) +{ + des_cblock c; + int32_t q; + u_char *p; + int i; + + if (key->keytype != KEYTYPE_DES) + abort (); + memmove (c, key->contents.data, sizeof(c)); + des_new_random_key(&c); + q = 0; + for (p = (u_char *)c, i = 0; i < sizeof(c); ++i, ++p) + q = (q << 8) | *p; + q &= 0xffffffff; + *seqno = q; + return 0; +} diff --git a/lib/krb5/generate_subkey.c b/lib/krb5/generate_subkey.c new file mode 100644 index 000000000..8b56c595f --- /dev/null +++ b/lib/krb5/generate_subkey.c @@ -0,0 +1,30 @@ +#include + +RCSID("$Id$"); + +krb5_error_code +krb5_generate_subkey(krb5_context context, + const krb5_keyblock *key, + krb5_keyblock **subkey) +{ + krb5_error_code ret; + krb5_keyblock *k; + + if (key->keytype != KEYTYPE_DES) + abort (); + k = malloc(sizeof(**subkey)); + if (k == NULL) + return ENOMEM; + k->keytype = key->keytype; + k->contents.length = 0; + ret = krb5_data_copy (&k->contents, + key->contents.data, + key->contents.length); + if (ret) { + free(k); + return ret; + } + des_new_random_key ((des_cblock *)k->contents.data); + *subkey = k; + return 0; +}