mirror of
https://github.com/clearml/dropbear
synced 2025-02-08 13:43:45 +00:00
- Don't be dumb and encrypt/decrypt in a while() loop - why did I do this??
--HG-- extra : convert_revision : c8e1b84cfe874887ad7df0dd95a00de46dbc0136
This commit is contained in:
parent
c04cc62ebf
commit
cca4e1a080
34
packet.c
34
packet.c
@ -240,17 +240,16 @@ void decrypt_packet() {
|
|||||||
buf_setpos(ses.decryptreadbuf, blocksize);
|
buf_setpos(ses.decryptreadbuf, blocksize);
|
||||||
|
|
||||||
/* decrypt it */
|
/* decrypt it */
|
||||||
while (ses.readbuf->pos < ses.readbuf->len - macsize) {
|
len = ses.readbuf->len - macsize - ses.readbuf->pos;
|
||||||
if (ses.keys->recv_crypt_mode->decrypt(
|
if (ses.keys->recv_crypt_mode->decrypt(
|
||||||
buf_getptr(ses.readbuf, blocksize),
|
buf_getptr(ses.readbuf, len),
|
||||||
buf_getwriteptr(ses.decryptreadbuf, blocksize),
|
buf_getwriteptr(ses.decryptreadbuf, len),
|
||||||
blocksize,
|
len,
|
||||||
&ses.keys->recv_cipher_state) != CRYPT_OK) {
|
&ses.keys->recv_cipher_state) != CRYPT_OK) {
|
||||||
dropbear_exit("error decrypting");
|
dropbear_exit("error decrypting");
|
||||||
}
|
}
|
||||||
buf_incrpos(ses.readbuf, blocksize);
|
buf_incrpos(ses.readbuf, len);
|
||||||
buf_incrwritepos(ses.decryptreadbuf, blocksize);
|
buf_incrwritepos(ses.decryptreadbuf, len);
|
||||||
}
|
|
||||||
|
|
||||||
/* check the hmac */
|
/* check the hmac */
|
||||||
buf_setpos(ses.readbuf, ses.readbuf->len - macsize);
|
buf_setpos(ses.readbuf, ses.readbuf->len - macsize);
|
||||||
@ -454,7 +453,7 @@ void encrypt_packet() {
|
|||||||
buffer * writebuf; /* the packet which will go on the wire */
|
buffer * writebuf; /* the packet which will go on the wire */
|
||||||
buffer * clearwritebuf; /* unencrypted, possibly compressed */
|
buffer * clearwritebuf; /* unencrypted, possibly compressed */
|
||||||
unsigned char type;
|
unsigned char type;
|
||||||
unsigned int clear_len;
|
unsigned int len;
|
||||||
|
|
||||||
type = ses.writepayload->data[0];
|
type = ses.writepayload->data[0];
|
||||||
TRACE(("enter encrypt_packet()"))
|
TRACE(("enter encrypt_packet()"))
|
||||||
@ -474,12 +473,12 @@ void encrypt_packet() {
|
|||||||
/* Encrypted packet len is payload+5, then worst case is if we are 3 away
|
/* Encrypted packet len is payload+5, then worst case is if we are 3 away
|
||||||
* from a blocksize multiple. In which case we need to pad to the
|
* from a blocksize multiple. In which case we need to pad to the
|
||||||
* multiple, then add another blocksize (or MIN_PACKET_LEN) */
|
* multiple, then add another blocksize (or MIN_PACKET_LEN) */
|
||||||
clear_len = (ses.writepayload->len+4+1) + MIN_PACKET_LEN + 3;
|
len = (ses.writepayload->len+4+1) + MIN_PACKET_LEN + 3;
|
||||||
|
|
||||||
#ifndef DISABLE_ZLIB
|
#ifndef DISABLE_ZLIB
|
||||||
clear_len += ZLIB_COMPRESS_INCR; /* bit of a kludge, but we can't know len*/
|
len += ZLIB_COMPRESS_INCR; /* bit of a kludge, but we can't know len*/
|
||||||
#endif
|
#endif
|
||||||
clearwritebuf = buf_new(clear_len);
|
clearwritebuf = buf_new(len);
|
||||||
buf_setlen(clearwritebuf, PACKET_PAYLOAD_OFF);
|
buf_setlen(clearwritebuf, PACKET_PAYLOAD_OFF);
|
||||||
buf_setpos(clearwritebuf, PACKET_PAYLOAD_OFF);
|
buf_setpos(clearwritebuf, PACKET_PAYLOAD_OFF);
|
||||||
|
|
||||||
@ -531,17 +530,16 @@ void encrypt_packet() {
|
|||||||
writebuf = buf_new(clearwritebuf->len + macsize);
|
writebuf = buf_new(clearwritebuf->len + macsize);
|
||||||
|
|
||||||
/* encrypt it */
|
/* encrypt it */
|
||||||
while (clearwritebuf->pos < clearwritebuf->len) {
|
len = clearwritebuf->len;
|
||||||
if (ses.keys->trans_crypt_mode->encrypt(
|
if (ses.keys->trans_crypt_mode->encrypt(
|
||||||
buf_getptr(clearwritebuf, blocksize),
|
buf_getptr(clearwritebuf, len),
|
||||||
buf_getwriteptr(writebuf, blocksize),
|
buf_getwriteptr(writebuf, len),
|
||||||
blocksize,
|
len,
|
||||||
&ses.keys->trans_cipher_state) != CRYPT_OK) {
|
&ses.keys->trans_cipher_state) != CRYPT_OK) {
|
||||||
dropbear_exit("error encrypting");
|
dropbear_exit("error encrypting");
|
||||||
}
|
}
|
||||||
buf_incrpos(clearwritebuf, blocksize);
|
buf_incrpos(clearwritebuf, len);
|
||||||
buf_incrwritepos(writebuf, blocksize);
|
buf_incrwritepos(writebuf, len);
|
||||||
}
|
|
||||||
|
|
||||||
/* now add a hmac and we're done */
|
/* now add a hmac and we're done */
|
||||||
writemac(writebuf, clearwritebuf);
|
writemac(writebuf, clearwritebuf);
|
||||||
|
Loading…
Reference in New Issue
Block a user