mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-06-30 19:12:48 -05:00
Add single-DES support in SSH2
[originally from svn r1396]
This commit is contained in:
52
sshdes.c
52
sshdes.c
@ -757,6 +757,13 @@ static void des3_cskey(unsigned char *key)
|
||||
logevent("Initialised triple-DES client->server encryption");
|
||||
}
|
||||
|
||||
static void des_cskey(unsigned char *key)
|
||||
{
|
||||
des_key_setup(GET_32BIT_MSB_FIRST(key),
|
||||
GET_32BIT_MSB_FIRST(key + 4), &cskeys[0]);
|
||||
logevent("Initialised single-DES client->server encryption");
|
||||
}
|
||||
|
||||
static void des3_csiv(unsigned char *key)
|
||||
{
|
||||
cskeys[0].eiv0 = GET_32BIT_MSB_FIRST(key);
|
||||
@ -780,6 +787,13 @@ static void des3_sckey(unsigned char *key)
|
||||
logevent("Initialised triple-DES server->client encryption");
|
||||
}
|
||||
|
||||
static void des_sckey(unsigned char *key)
|
||||
{
|
||||
des_key_setup(GET_32BIT_MSB_FIRST(key),
|
||||
GET_32BIT_MSB_FIRST(key + 4), &sckeys[0]);
|
||||
logevent("Initialised single-DES server->client encryption");
|
||||
}
|
||||
|
||||
static void des3_sesskey(unsigned char *key)
|
||||
{
|
||||
des3_cskey(key);
|
||||
@ -806,6 +820,16 @@ static void des3_ssh2_decrypt_blk(unsigned char *blk, int len)
|
||||
des_cbc3_decrypt(blk, blk, len, sckeys);
|
||||
}
|
||||
|
||||
static void des_ssh2_encrypt_blk(unsigned char *blk, int len)
|
||||
{
|
||||
des_cbc_encrypt(blk, blk, len, cskeys);
|
||||
}
|
||||
|
||||
static void des_ssh2_decrypt_blk(unsigned char *blk, int len)
|
||||
{
|
||||
des_cbc_decrypt(blk, blk, len, sckeys);
|
||||
}
|
||||
|
||||
void des3_decrypt_pubkey(unsigned char *key, unsigned char *blk, int len)
|
||||
{
|
||||
DESContext ourkeys[3];
|
||||
@ -839,6 +863,20 @@ static const struct ssh2_cipher ssh_3des_ssh2 = {
|
||||
8, 168
|
||||
};
|
||||
|
||||
/*
|
||||
* Single DES in ssh2. It isn't clear that "des-cbc" is an official
|
||||
* cipher name, but ssh.com support it and apparently aren't the
|
||||
* only people to do so, so we sigh and implement it anyway.
|
||||
*/
|
||||
static const struct ssh2_cipher ssh_des_ssh2 = {
|
||||
des3_csiv, des_cskey, /* iv functions shared with 3des */
|
||||
des3_sciv, des_sckey,
|
||||
des_ssh2_encrypt_blk,
|
||||
des_ssh2_decrypt_blk,
|
||||
"des-cbc",
|
||||
8, 56
|
||||
};
|
||||
|
||||
static const struct ssh2_cipher *const des3_list[] = {
|
||||
&ssh_3des_ssh2
|
||||
};
|
||||
@ -848,6 +886,15 @@ const struct ssh2_ciphers ssh2_3des = {
|
||||
des3_list
|
||||
};
|
||||
|
||||
static const struct ssh2_cipher *const des_list[] = {
|
||||
&ssh_des_ssh2
|
||||
};
|
||||
|
||||
const struct ssh2_ciphers ssh2_des = {
|
||||
sizeof(des3_list) / sizeof(*des_list),
|
||||
des_list
|
||||
};
|
||||
|
||||
const struct ssh_cipher ssh_3des = {
|
||||
des3_sesskey,
|
||||
des3_encrypt_blk,
|
||||
@ -857,9 +904,8 @@ const struct ssh_cipher ssh_3des = {
|
||||
|
||||
static void des_sesskey(unsigned char *key)
|
||||
{
|
||||
des_key_setup(GET_32BIT_MSB_FIRST(key),
|
||||
GET_32BIT_MSB_FIRST(key + 4), &cskeys[0]);
|
||||
logevent("Initialised single-DES encryption");
|
||||
des_cskey(key);
|
||||
des_sckey(key);
|
||||
}
|
||||
|
||||
static void des_encrypt_blk(unsigned char *blk, int len)
|
||||
|
Reference in New Issue
Block a user