X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=sshdes.c;h=265dc7679d0fcab09e6c847c97a922b0c3cddc98;hb=3b20d71a7ee9b8efa00bba86ea16dc52be4dd3ff;hp=ad4beb6a5ea4c117e3a09d1e274f143f752e9c94;hpb=b49fde94104eef45db3e851346021a21c8098143;p=PuTTY.git diff --git a/sshdes.c b/sshdes.c index ad4beb6a..265dc767 100644 --- a/sshdes.c +++ b/sshdes.c @@ -854,6 +854,36 @@ void des3_encrypt_pubkey(unsigned char *key, unsigned char *blk, int len) des_3cbc_encrypt(blk, blk, len, ourkeys); } +void des3_decrypt_pubkey_ossh(unsigned char *key, unsigned char *iv, + unsigned char *blk, int len) +{ + DESContext ourkeys[3]; + des_key_setup(GET_32BIT_MSB_FIRST(key), + GET_32BIT_MSB_FIRST(key + 4), &ourkeys[0]); + des_key_setup(GET_32BIT_MSB_FIRST(key + 8), + GET_32BIT_MSB_FIRST(key + 12), &ourkeys[1]); + des_key_setup(GET_32BIT_MSB_FIRST(key + 16), + GET_32BIT_MSB_FIRST(key + 20), &ourkeys[2]); + ourkeys[0].div0 = GET_32BIT_MSB_FIRST(iv); + ourkeys[0].div1 = GET_32BIT_MSB_FIRST(iv+4); + des_cbc3_decrypt(blk, blk, len, ourkeys); +} + +void des3_encrypt_pubkey_ossh(unsigned char *key, unsigned char *iv, + unsigned char *blk, int len) +{ + DESContext ourkeys[3]; + des_key_setup(GET_32BIT_MSB_FIRST(key), + GET_32BIT_MSB_FIRST(key + 4), &ourkeys[0]); + des_key_setup(GET_32BIT_MSB_FIRST(key + 8), + GET_32BIT_MSB_FIRST(key + 12), &ourkeys[1]); + des_key_setup(GET_32BIT_MSB_FIRST(key + 16), + GET_32BIT_MSB_FIRST(key + 20), &ourkeys[2]); + ourkeys[0].eiv0 = GET_32BIT_MSB_FIRST(iv); + ourkeys[0].eiv1 = GET_32BIT_MSB_FIRST(iv+4); + des_cbc3_encrypt(blk, blk, len, ourkeys); +} + static const struct ssh2_cipher ssh_3des_ssh2 = { des3_csiv, des3_cskey, des3_sciv, des3_sckey,