Changeset View
Changeset View
Standalone View
Standalone View
crypto/heimdal/lib/krb5/crypto-arcfour.c
Show First 20 Lines • Show All 123 Lines • ▼ Show 20 Lines | |||||
static krb5_error_code | static krb5_error_code | ||||
ARCFOUR_subencrypt(krb5_context context, | ARCFOUR_subencrypt(krb5_context context, | ||||
struct _krb5_key_data *key, | struct _krb5_key_data *key, | ||||
void *data, | void *data, | ||||
size_t len, | size_t len, | ||||
unsigned usage, | unsigned usage, | ||||
void *ivec) | void *ivec) | ||||
{ | { | ||||
EVP_CIPHER_CTX ctx; | EVP_CIPHER_CTX *ctx; | ||||
struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5); | struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5); | ||||
Checksum k1_c, k2_c, k3_c, cksum; | Checksum k1_c, k2_c, k3_c, cksum; | ||||
struct _krb5_key_data ke; | struct _krb5_key_data ke; | ||||
krb5_keyblock kb; | krb5_keyblock kb; | ||||
unsigned char t[4]; | unsigned char t[4]; | ||||
unsigned char *cdata = data; | unsigned char *cdata = data; | ||||
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | ||||
krb5_error_code ret; | krb5_error_code ret; | ||||
Show All 30 Lines | krb5_abortx(context, "hmac failed"); | ||||
k3_c.checksum.length = sizeof(k3_c_data); | k3_c.checksum.length = sizeof(k3_c_data); | ||||
k3_c.checksum.data = k3_c_data; | k3_c.checksum.data = k3_c_data; | ||||
ret = _krb5_internal_hmac(NULL, c, data, 16, 0, &ke, &k3_c); | ret = _krb5_internal_hmac(NULL, c, data, 16, 0, &ke, &k3_c); | ||||
if (ret) | if (ret) | ||||
krb5_abortx(context, "hmac failed"); | krb5_abortx(context, "hmac failed"); | ||||
EVP_CIPHER_CTX_init(&ctx); | ctx = EVP_CIPHER_CTX_new(); | ||||
if (ctx == NULL) | |||||
krb5_abortx(context, "malloc failed"); | |||||
EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 1); | EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 1); | ||||
EVP_Cipher(&ctx, cdata + 16, cdata + 16, len - 16); | EVP_Cipher(ctx, cdata + 16, cdata + 16, len - 16); | ||||
EVP_CIPHER_CTX_cleanup(&ctx); | EVP_CIPHER_CTX_free(ctx); | ||||
memset (k1_c_data, 0, sizeof(k1_c_data)); | memset (k1_c_data, 0, sizeof(k1_c_data)); | ||||
memset (k2_c_data, 0, sizeof(k2_c_data)); | memset (k2_c_data, 0, sizeof(k2_c_data)); | ||||
memset (k3_c_data, 0, sizeof(k3_c_data)); | memset (k3_c_data, 0, sizeof(k3_c_data)); | ||||
return 0; | return 0; | ||||
} | } | ||||
static krb5_error_code | static krb5_error_code | ||||
ARCFOUR_subdecrypt(krb5_context context, | ARCFOUR_subdecrypt(krb5_context context, | ||||
struct _krb5_key_data *key, | struct _krb5_key_data *key, | ||||
void *data, | void *data, | ||||
size_t len, | size_t len, | ||||
unsigned usage, | unsigned usage, | ||||
void *ivec) | void *ivec) | ||||
{ | { | ||||
EVP_CIPHER_CTX ctx; | EVP_CIPHER_CTX *ctx; | ||||
struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5); | struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5); | ||||
Checksum k1_c, k2_c, k3_c, cksum; | Checksum k1_c, k2_c, k3_c, cksum; | ||||
struct _krb5_key_data ke; | struct _krb5_key_data ke; | ||||
krb5_keyblock kb; | krb5_keyblock kb; | ||||
unsigned char t[4]; | unsigned char t[4]; | ||||
unsigned char *cdata = data; | unsigned char *cdata = data; | ||||
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | ||||
unsigned char cksum_data[16]; | unsigned char cksum_data[16]; | ||||
Show All 21 Lines | krb5_abortx(context, "hmac failed"); | ||||
k3_c.checksum.length = sizeof(k3_c_data); | k3_c.checksum.length = sizeof(k3_c_data); | ||||
k3_c.checksum.data = k3_c_data; | k3_c.checksum.data = k3_c_data; | ||||
ret = _krb5_internal_hmac(NULL, c, cdata, 16, 0, &ke, &k3_c); | ret = _krb5_internal_hmac(NULL, c, cdata, 16, 0, &ke, &k3_c); | ||||
if (ret) | if (ret) | ||||
krb5_abortx(context, "hmac failed"); | krb5_abortx(context, "hmac failed"); | ||||
EVP_CIPHER_CTX_init(&ctx); | ctx = EVP_CIPHER_CTX_new(); | ||||
EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 0); | if (ctx == NULL) | ||||
EVP_Cipher(&ctx, cdata + 16, cdata + 16, len - 16); | krb5_abortx(context, "malloc failed"); | ||||
EVP_CIPHER_CTX_cleanup(&ctx); | EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 0); | ||||
EVP_Cipher(ctx, cdata + 16, cdata + 16, len - 16); | |||||
EVP_CIPHER_CTX_free(ctx); | |||||
ke.key = &kb; | ke.key = &kb; | ||||
kb.keyvalue = k2_c.checksum; | kb.keyvalue = k2_c.checksum; | ||||
cksum.checksum.length = 16; | cksum.checksum.length = 16; | ||||
cksum.checksum.data = cksum_data; | cksum.checksum.data = cksum_data; | ||||
ret = _krb5_internal_hmac(NULL, c, cdata + 16, len - 16, 0, &ke, &cksum); | ret = _krb5_internal_hmac(NULL, c, cdata + 16, len - 16, 0, &ke, &cksum); | ||||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |