version 1.83, 2012/12/11 22:31:18 |
version 1.84, 2012/12/12 16:46:10 |
|
|
extern const EVP_CIPHER *evp_ssh1_bf(void); |
extern const EVP_CIPHER *evp_ssh1_bf(void); |
extern const EVP_CIPHER *evp_ssh1_3des(void); |
extern const EVP_CIPHER *evp_ssh1_3des(void); |
extern void ssh1_3des_iv(EVP_CIPHER_CTX *, int, u_char *, int); |
extern void ssh1_3des_iv(EVP_CIPHER_CTX *, int, u_char *, int); |
extern const EVP_CIPHER *evp_aes_128_ctr(void); |
|
extern void ssh_aes_ctr_iv(EVP_CIPHER_CTX *, int, u_char *, u_int); |
|
|
|
struct Cipher { |
struct Cipher { |
char *name; |
char *name; |
|
|
{ "aes256-cbc", SSH_CIPHER_SSH2, 16, 32, 0, 1, EVP_aes_256_cbc }, |
{ "aes256-cbc", SSH_CIPHER_SSH2, 16, 32, 0, 1, EVP_aes_256_cbc }, |
{ "rijndael-cbc@lysator.liu.se", |
{ "rijndael-cbc@lysator.liu.se", |
SSH_CIPHER_SSH2, 16, 32, 0, 1, EVP_aes_256_cbc }, |
SSH_CIPHER_SSH2, 16, 32, 0, 1, EVP_aes_256_cbc }, |
{ "aes128-ctr", SSH_CIPHER_SSH2, 16, 16, 0, 0, evp_aes_128_ctr }, |
{ "aes128-ctr", SSH_CIPHER_SSH2, 16, 16, 0, 0, EVP_aes_128_ctr }, |
{ "aes192-ctr", SSH_CIPHER_SSH2, 16, 24, 0, 0, evp_aes_128_ctr }, |
{ "aes192-ctr", SSH_CIPHER_SSH2, 16, 24, 0, 0, EVP_aes_192_ctr }, |
{ "aes256-ctr", SSH_CIPHER_SSH2, 16, 32, 0, 0, evp_aes_128_ctr }, |
{ "aes256-ctr", SSH_CIPHER_SSH2, 16, 32, 0, 0, EVP_aes_256_ctr }, |
{ "acss@openssh.org", SSH_CIPHER_SSH2, 16, 5, 0, 0, EVP_acss }, |
{ "acss@openssh.org", SSH_CIPHER_SSH2, 16, 5, 0, 0, EVP_acss }, |
|
|
{ NULL, SSH_CIPHER_INVALID, 0, 0, 0, 0, NULL } |
{ NULL, SSH_CIPHER_INVALID, 0, 0, 0, 0, NULL } |
|
|
if ((u_int)evplen != len) |
if ((u_int)evplen != len) |
fatal("%s: wrong iv length %d != %d", __func__, |
fatal("%s: wrong iv length %d != %d", __func__, |
evplen, len); |
evplen, len); |
if (c->evptype == evp_aes_128_ctr) |
memcpy(iv, cc->evp.iv, len); |
ssh_aes_ctr_iv(&cc->evp, 0, iv, len); |
|
else |
|
memcpy(iv, cc->evp.iv, len); |
|
break; |
break; |
case SSH_CIPHER_3DES: |
case SSH_CIPHER_3DES: |
ssh1_3des_iv(&cc->evp, 0, iv, 24); |
ssh1_3des_iv(&cc->evp, 0, iv, 24); |
|
|
evplen = EVP_CIPHER_CTX_iv_length(&cc->evp); |
evplen = EVP_CIPHER_CTX_iv_length(&cc->evp); |
if (evplen == 0) |
if (evplen == 0) |
return; |
return; |
if (c->evptype == evp_aes_128_ctr) |
memcpy(cc->evp.iv, iv, evplen); |
ssh_aes_ctr_iv(&cc->evp, 1, iv, evplen); |
|
else |
|
memcpy(cc->evp.iv, iv, evplen); |
|
break; |
break; |
case SSH_CIPHER_3DES: |
case SSH_CIPHER_3DES: |
ssh1_3des_iv(&cc->evp, 1, iv, 24); |
ssh1_3des_iv(&cc->evp, 1, iv, 24); |