krb5_auth_con_initivector(krb5_context context, krb5_auth_context auth_context)
{
krb5_error_code ret;
- krb5_enctype enctype;
+ krb5_data cstate;
if (auth_context->key) {
- size_t blocksize;
-
- enctype = krb5_k_key_enctype(context, auth_context->key);
- if ((ret = krb5_c_block_size(context, enctype, &blocksize)))
- return(ret);
- if ((auth_context->i_vector = (krb5_pointer)calloc(1,blocksize))) {
- return 0;
- }
- return ENOMEM;
+ ret = krb5_c_init_state(context, &auth_context->key->keyblock, 0,
+ &cstate);
+ if (ret)
+ return ret;
+ auth_context->i_vector = (krb5_pointer)calloc(1,cstate.length);
+ krb5_c_free_state(context, &auth_context->key->keyblock, &cstate);
+ if (auth_context->i_vector == NULL)
+ return ENOMEM;
+ return 0;
}
return EINVAL; /* XXX need an error for no keyblock */
}
krb5_error_code retval;
krb5_priv privmsg;
krb5_priv_enc_part privmsg_enc_part;
- krb5_data *scratch1, *scratch2, ivdata;
- size_t blocksize, enclen;
+ krb5_data *scratch1, *scratch2, cstate, ivdata;
+ size_t enclen;
privmsg.enc_part.kvno = 0; /* XXX allow user-set? */
privmsg.enc_part.enctype = enctype;
/* call the encryption routine */
if (i_vector) {
- if ((retval = krb5_c_block_size(context, enctype, &blocksize)))
+ if ((retval = krb5_c_init_state(context, &key->keyblock, 0, &cstate)))
goto clean_encpart;
- ivdata.length = blocksize;
+ ivdata.length = cstate.length;
ivdata.data = i_vector;
+ krb5_c_free_state(context, &key->keyblock, &cstate);
}
if ((retval = krb5_k_encrypt(context, key,
krb5_priv * privmsg;
krb5_data scratch;
krb5_priv_enc_part * privmsg_enc_part;
- size_t blocksize;
- krb5_data ivdata, *iv = NULL;
- krb5_enctype enctype;
+ krb5_data cstate, ivdata, *iv = NULL;
if (!krb5_is_krb_priv(inbuf))
return KRB5KRB_AP_ERR_MSG_TYPE;
return retval;
if (ac->i_vector != NULL) {
- enctype = krb5_k_key_enctype(context, key);
- if ((retval = krb5_c_block_size(context, enctype, &blocksize)))
+ if ((retval = krb5_c_init_state(context, &key->keyblock, 0, &cstate)))
goto cleanup_privmsg;
- ivdata = make_data(ac->i_vector, blocksize);
+ ivdata = make_data(ac->i_vector, cstate.length);
iv = &ivdata;
+ krb5_c_free_state(context, &key->keyblock, &cstate);
}
scratch.length = privmsg->enc_part.ciphertext.length;