From 15ac7dcf547ebd123344e49cdc3daf5a4bdc8999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 26 Apr 2004 22:03:02 +0000 Subject: [PATCH] add set_param for RC2 git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13818 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/crypto.c | 52 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/lib/krb5/crypto.c b/lib/krb5/crypto.c index 249d4095b..741e32d8f 100644 --- a/lib/krb5/crypto.c +++ b/lib/krb5/crypto.c @@ -94,8 +94,8 @@ struct key_type { void (*random_to_key)(krb5_context, krb5_keyblock*, const void*, size_t); krb5_error_code (*get_params)(krb5_context, const krb5_data *, void **, krb5_data *); - krb5_error_code (*set_params)(krb5_context, void *, const krb5_data *, - krb5_data *); + krb5_error_code (*set_params)(krb5_context, const void *, + const krb5_data *, krb5_data *); }; struct checksum_type { @@ -800,6 +800,48 @@ rc2_get_params(krb5_context context, return ret; } +static krb5_error_code +rc2_set_params(krb5_context context, + const void *params, + const krb5_data *ivec, + krb5_data *data) +{ + RC2CBCParameter rc2params; + const struct _RC2_params *p = params; + int maximum_effective_key = 128; + krb5_error_code ret; + size_t size; + + memset(&rc2params, 0, sizeof(rc2params)); + + if (p) + maximum_effective_key = p->maximum_effective_key; + + /* XXX */ + switch(maximum_effective_key) { + case 40: + rc2params.rc2ParameterVersion = 160; + break; + case 64: + rc2params.rc2ParameterVersion = 120; + break; + case 128: + rc2params.rc2ParameterVersion = 58; + break; + } + ret = copy_octet_string(ivec, &rc2params.iv); + if (ret) + return ret; + + ASN1_MALLOC_ENCODE(RC2CBCParameter, data->data, data->length, + &rc2params, &size, ret); + if (ret == 0 && size != data->length) + krb5_abortx(context, "Internal asn1 encoder failure"); + free_RC2CBCParameter(&rc2params); + + return ret; +} + static void rc2_schedule(krb5_context context, struct key_data *kd, @@ -939,7 +981,8 @@ struct key_type keytype_rc2 = { rc2_schedule, NULL, /* XXX salt */ NULL, - rc2_get_params + rc2_get_params, + rc2_set_params }; struct key_type *keytypes[] = { @@ -4051,7 +4094,8 @@ krb5_crypto_set_params(krb5_context context, const krb5_data *ivec, krb5_data *params) { - krb5_error_code (*sp)(krb5_context, void *,const krb5_data *,krb5_data *); + krb5_error_code (*sp)(krb5_context, const void *, + const krb5_data *, krb5_data *); krb5_error_code ret; sp = crypto->et->keytype->set_params;