version 1.5, 1999/09/30 05:19:57 |
version 1.6, 1999/09/30 05:53:04 |
|
|
{ |
{ |
"none", |
"none", |
"no idea", |
"no idea", |
#ifdef WITH_DES |
|
"des", |
|
#else |
|
"no des", |
"no des", |
#endif |
|
"3des", |
"3des", |
"no tss", |
"no tss", |
"no rc4", |
"no rc4", |
|
|
{ |
{ |
unsigned int mask = 0; |
unsigned int mask = 0; |
mask |= 1 << SSH_CIPHER_NONE; |
mask |= 1 << SSH_CIPHER_NONE; |
#ifdef WITH_DES |
|
mask |= 1 << SSH_CIPHER_DES; |
|
#endif |
|
mask |= 1 << SSH_CIPHER_3DES; /* Mandatory */ |
mask |= 1 << SSH_CIPHER_3DES; /* Mandatory */ |
mask |= 1 << SSH_CIPHER_BLOWFISH; |
mask |= 1 << SSH_CIPHER_BLOWFISH; |
return mask; |
return mask; |
|
|
case SSH_CIPHER_NONE: |
case SSH_CIPHER_NONE: |
break; |
break; |
|
|
#ifdef WITH_DES |
|
case SSH_CIPHER_DES: |
|
/* Note: the least significant bit of each byte of key is parity, |
|
and must be ignored by the implementation. 8 bytes of key are |
|
used. */ |
|
if (keylen < 8) |
|
error("Key length %d is insufficient for DES.", keylen); |
|
des_set_key((void*)padded, context->u.des.key); |
|
memset(context->u.des.iv, 0, sizeof(context->u.des.iv)); |
|
break; |
|
#endif /* WITH_DES */ |
|
|
|
case SSH_CIPHER_3DES: |
case SSH_CIPHER_3DES: |
/* Note: the least significant bit of each byte of key is parity, |
/* Note: the least significant bit of each byte of key is parity, |
and must be ignored by the implementation. 16 bytes of key are |
and must be ignored by the implementation. 16 bytes of key are |
|
|
memcpy(dest, src, len); |
memcpy(dest, src, len); |
break; |
break; |
|
|
#ifdef WITH_DES |
|
case SSH_CIPHER_DES: |
|
des_cbc_encrypt((void*)src, (void*)dest, len, |
|
context->u.des.key, &context->u.des.iv, DES_ENCRYPT); |
|
memcpy(context->u.des.iv, dest + len - 8, 8); |
|
break; |
|
#endif /* WITH_DES */ |
|
|
|
case SSH_CIPHER_3DES: |
case SSH_CIPHER_3DES: |
SSH_3CBC_ENCRYPT(context->u.des3.key1, |
SSH_3CBC_ENCRYPT(context->u.des3.key1, |
context->u.des3.key2, &context->u.des3.iv2, |
context->u.des3.key2, &context->u.des3.iv2, |
|
|
case SSH_CIPHER_NONE: |
case SSH_CIPHER_NONE: |
memcpy(dest, src, len); |
memcpy(dest, src, len); |
break; |
break; |
|
|
#ifdef WITH_DES |
|
case SSH_CIPHER_DES: |
|
detect_cbc_attack(src, len); |
|
des_cbc_encrypt((void*)src, (void*)dest, len, |
|
context->u.des.key, &context->u.des.iv, DES_DECRYPT); |
|
memcpy(context->u.des.iv, src + len - 8, 8); |
|
break; |
|
#endif /* WITH_DES */ |
|
|
|
case SSH_CIPHER_3DES: |
case SSH_CIPHER_3DES: |
/* CRC-32 attack? */ |
/* CRC-32 attack? */ |