X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/371e569c350575d3f9b41c71e2ff51de9ef62483..875e0b16f64f7b97171d58fe34ebcd57314eb739:/sshdes.c diff --git a/sshdes.c b/sshdes.c index d8b3369d..4b22c71b 100644 --- a/sshdes.c +++ b/sshdes.c @@ -296,7 +296,7 @@ static word32 bitsel(word32 * input, const int *bitnums, int size) return ret; } -void des_key_setup(word32 key_msw, word32 key_lsw, DESContext * sched) +static void des_key_setup(word32 key_msw, word32 key_lsw, DESContext * sched) { static const int PC1_Cbits[] = { @@ -520,7 +520,8 @@ static const word32 SPboxes[8][64] = { bitswap(R, L, 16, 0x0000FFFF), \ bitswap(R, L, 4, 0x0F0F0F0F)) -void des_encipher(word32 * output, word32 L, word32 R, DESContext * sched) +static void des_encipher(word32 * output, word32 L, word32 R, + DESContext * sched) { word32 swap, s0246, s1357; @@ -559,7 +560,8 @@ void des_encipher(word32 * output, word32 L, word32 R, DESContext * sched) output[1] = R; } -void des_decipher(word32 * output, word32 L, word32 R, DESContext * sched) +static void des_decipher(word32 * output, word32 L, word32 R, + DESContext * sched) { word32 swap, s0246, s1357; @@ -895,6 +897,43 @@ void des3_encrypt_pubkey_ossh(unsigned char *key, unsigned char *iv, memset(ourkeys, 0, sizeof(ourkeys)); } +static void des_keysetup_xdmauth(unsigned char *keydata, DESContext *dc) +{ + unsigned char key[8]; + int i, nbits, j; + unsigned int bits; + + bits = 0; + nbits = 0; + j = 0; + for (i = 0; i < 8; i++) { + if (nbits < 7) { + bits = (bits << 8) | keydata[j]; + nbits += 8; + j++; + } + key[i] = (bits >> (nbits - 7)) << 1; + bits &= ~(0x7F << (nbits - 7)); + nbits -= 7; + } + + des_key_setup(GET_32BIT_MSB_FIRST(key), GET_32BIT_MSB_FIRST(key + 4), dc); +} + +void des_encrypt_xdmauth(unsigned char *keydata, unsigned char *blk, int len) +{ + DESContext dc; + des_keysetup_xdmauth(keydata, &dc); + des_cbc_encrypt(blk, blk, 24, &dc); +} + +void des_decrypt_xdmauth(unsigned char *keydata, unsigned char *blk, int len) +{ + DESContext dc; + des_keysetup_xdmauth(keydata, &dc); + des_cbc_decrypt(blk, blk, 24, &dc); +} + static const struct ssh2_cipher ssh_3des_ssh2 = { des3_make_context, des3_free_context, des3_iv, des3_key, des3_ssh2_encrypt_blk, des3_ssh2_decrypt_blk, @@ -908,7 +947,7 @@ static const struct ssh2_cipher ssh_3des_ssh2 = { * only people to do so, so we sigh and implement it anyway. */ static const struct ssh2_cipher ssh_des_ssh2 = { - des3_make_context, des3_free_context, des3_iv, des_key, + des_make_context, des3_free_context, des3_iv, des_key, des_ssh2_encrypt_blk, des_ssh2_decrypt_blk, "des-cbc", 8, 56, "single-DES"