diff --git a/lib/krb5/generate_seq_number.c b/lib/krb5/generate_seq_number.c index 24d1db0c6..fe160e72b 100644 --- a/lib/krb5/generate_seq_number.c +++ b/lib/krb5/generate_seq_number.c @@ -45,19 +45,23 @@ krb5_generate_seq_number(krb5_context context, const krb5_keyblock *key, int32_t *seqno) { - des_cblock c; - int32_t q; + krb5_error_code ret; + krb5_keyblock *subkey; + u_int32_t q; u_char *p; int i; - if (key->keytype != KEYTYPE_DES) - abort (); - memmove (c, key->keyvalue.data, sizeof(c)); - des_new_random_key(&c); + ret = krb5_generate_subkey (context, key, &subkey); + if (ret) + return ret; + q = 0; - for (p = (u_char *)c, i = 0; i < sizeof(c); ++i, ++p) + for (p = (u_char *)subkey->keyvalue.data, i = 0; + i < subkey->keyvalue.length; + ++i, ++p) q = (q << 8) | *p; q &= 0xffffffff; *seqno = q; + krb5_free_keyblock (context, subkey); return 0; }