From 94d00009cc37a790da46568ac2dd5894f0144f6f Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 22 Oct 2015 08:17:01 +0200 Subject: [PATCH] libcrypto: Fix build with DEBUG_CRYPTO turned on Signed-off-by: Andreas Schneider --- src/libcrypto.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/libcrypto.c b/src/libcrypto.c index 28347a05..ac950109 100644 --- a/src/libcrypto.c +++ b/src/libcrypto.c @@ -602,7 +602,10 @@ typedef uint8_t des_iv_t[8]; struct ssh_3des_key_schedule { DES_key_schedule keys[3]; - des_iv_t ivs[3]; + union { + des_iv_t v[3]; + uint8_t *c; + } ivs; }; /* 3des cbc for SSH-1 has no suitable EVP construct and requires @@ -622,35 +625,35 @@ static int des3_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV){ DES_set_key_unchecked(&keys[0], &cipher->des3_key->keys[0]); DES_set_key_unchecked(&keys[1], &cipher->des3_key->keys[1]); DES_set_key_unchecked(&keys[2], &cipher->des3_key->keys[2]); - memcpy(cipher->des3_key->ivs, IV, 24); + memcpy(cipher->des3_key->ivs.v, IV, 24); return SSH_OK; } static void des3_1_encrypt(struct ssh_cipher_struct *cipher, void *in, void *out, unsigned long len) { #ifdef DEBUG_CRYPTO - ssh_print_hexa("Encrypt IV before", cipher->des3_key->ivs, 24); + ssh_print_hexa("Encrypt IV before", cipher->des3_key->ivs.c, 24); #endif - DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs[0], 1); - DES_ncbc_encrypt(out, in, len, &cipher->des3_key->keys[1], &cipher->des3_key->ivs[1], 0); - DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[2], &cipher->des3_key->ivs[2], 1); + DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs.v[0], 1); + DES_ncbc_encrypt(out, in, len, &cipher->des3_key->keys[1], &cipher->des3_key->ivs.v[1], 0); + DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[2], &cipher->des3_key->ivs.v[2], 1); #ifdef DEBUG_CRYPTO - ssh_print_hexa("Encrypt IV after", cipher->des3_key->ivs, 24); + ssh_print_hexa("Encrypt IV after", cipher->des3_key->ivs.c, 24); #endif } static void des3_1_decrypt(struct ssh_cipher_struct *cipher, void *in, void *out, unsigned long len) { #ifdef DEBUG_CRYPTO - ssh_print_hexa("Decrypt IV before", cipher->des3_key->ivs, 24); + ssh_print_hexa("Decrypt IV before", cipher->des3_key->ivs.c, 24); #endif - DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[2], &cipher->des3_key->ivs[0], 0); - DES_ncbc_encrypt(out, in, len, &cipher->des3_key->keys[1], &cipher->des3_key->ivs[1], 1); - DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs[2], 0); + DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[2], &cipher->des3_key->ivs.v[0], 0); + DES_ncbc_encrypt(out, in, len, &cipher->des3_key->keys[1], &cipher->des3_key->ivs.v[1], 1); + DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs.v[2], 0); #ifdef DEBUG_CRYPTO - ssh_print_hexa("Decrypt IV after", cipher->des3_key->ivs, 24); + ssh_print_hexa("Decrypt IV after", cipher->des3_key->ivs.c, 24); #endif } @@ -662,18 +665,18 @@ static int des1_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) { return SSH_ERROR; } DES_set_key_unchecked(key, &cipher->des3_key->keys[0]); - memcpy(cipher->des3_key->ivs, IV, 8); + memcpy(cipher->des3_key->ivs.v, IV, 8); return SSH_OK; } static void des1_1_encrypt(struct ssh_cipher_struct *cipher, void *in, void *out, unsigned long len){ - DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs[0], 1); + DES_ncbc_encrypt(in, out, len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs.v[0], 1); } static void des1_1_decrypt(struct ssh_cipher_struct *cipher, void *in, void *out, unsigned long len){ - DES_ncbc_encrypt(in,out,len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs[0], 0); + DES_ncbc_encrypt(in,out,len, &cipher->des3_key->keys[0], &cipher->des3_key->ivs.v[0], 0); } static void des_cleanup(struct ssh_cipher_struct *cipher){