summaryrefslogtreecommitdiff
path: root/src/protocol/internal/fqterm_ssh2_kex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol/internal/fqterm_ssh2_kex.cpp')
-rw-r--r--src/protocol/internal/fqterm_ssh2_kex.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/protocol/internal/fqterm_ssh2_kex.cpp b/src/protocol/internal/fqterm_ssh2_kex.cpp
index 8566e92..ab62ede 100644
--- a/src/protocol/internal/fqterm_ssh2_kex.cpp
+++ b/src/protocol/internal/fqterm_ssh2_kex.cpp
@@ -128,7 +128,7 @@ bool FQTermSSH2Kex::negotiateAlgorithms() {
delete[] I_S_;
I_S_ = new char[I_S_len_];
I_S_[0] = SSH2_MSG_KEXINIT;
- memcpy(I_S_ + 1, packet_receiver_->buffer_->data(), I_S_len_ - 1);
+ memcpy(I_S_ + 1, buffer_data(&packet_receiver_->recvbuf), I_S_len_ - 1);
// 1. Parse server kex init packet
packet_receiver_->getRawData((char*)cookie_, 16);
@@ -218,7 +218,7 @@ bool FQTermSSH2Kex::negotiateAlgorithms() {
// 2. compose a kex init packet.
packet_sender_->startPacket(SSH2_MSG_KEXINIT);
- packet_sender_->putRawData((const char*)cookie_, 16); // FIXME: generate new cookie_;
+ packet_sender_->putRawData((const uint8_t*)cookie_, 16); // FIXME: generate new cookie_;
packet_sender_->putString(all_dh_list);
packet_sender_->putString("ssh-rsa");
packet_sender_->putString(all_ciphers_list);
@@ -234,10 +234,10 @@ bool FQTermSSH2Kex::negotiateAlgorithms() {
packet_sender_->putInt(0);
// 3. backup the payload of this client packet.
- I_C_len_ = packet_sender_->buffer_->len();
+ I_C_len_ = buffer_len(&packet_sender_->orig_data);
delete[] I_C_;
I_C_ = new char[I_C_len_];
- memcpy(I_C_, packet_sender_->buffer_->data(), I_C_len_);
+ memcpy(I_C_, buffer_data(&packet_sender_->orig_data), I_C_len_);
// 4. send packet to server
packet_sender_->write();
@@ -259,10 +259,11 @@ bool FQTermSSH2Kex::negotiateAlgorithms() {
* string signature of H
*/
-void FQTermSSH2Kex::exchangeKey() {
- packet_sender_->startPacket(SSH2_MSG_KEXDH_INIT);
- packet_sender_->putRawData((const char*)sess.dh->mpint_e, sess.dh->e_len);
- packet_sender_->write();
+void FQTermSSH2Kex::exchangeKey()
+{
+ packet_sender_->startPacket(SSH2_MSG_KEXDH_INIT);
+ packet_sender_->putRawData(sess.dh->mpint_e, sess.dh->e_len);
+ packet_sender_->write();
}
static RSA *CreateRSAContext(unsigned char *host_key, int len);
@@ -289,19 +290,20 @@ bool FQTermSSH2Kex::verifyKey() {
int s_len = -1;
unsigned char *s = (unsigned char *)packet_receiver_->getString(&s_len);
- FQTermSSHBuffer *buffer = packet_sender_->output_buffer_;
+ buffer vbuf;
+ buffer_init(&vbuf);
+ buffer_append_string(&vbuf, V_C_, strlen(V_C_));
+ buffer_append_string(&vbuf, V_S_, strlen(V_S_));
+ buffer_append_string(&vbuf, I_C_, I_C_len_);
+ buffer_append_string(&vbuf, I_S_, I_S_len_);
+ buffer_append_string(&vbuf, K_S_, K_S_len_);
+ buffer_append(&vbuf, sess.dh->mpint_e, sess.dh->e_len);
+ buffer_append_string(&vbuf, (const char*)mpint_f, mpint_f_len);
+ buffer_append(&vbuf, sess.dh->secret, sess.dh->secret_len);
- buffer->clear();
- buffer->putString(V_C_);
- buffer->putString(V_S_);
- buffer->putString(I_C_, I_C_len_);
- buffer->putString(I_S_, I_S_len_);
- buffer->putString(K_S_, K_S_len_);
- buffer->putRawData((const char*)sess.dh->mpint_e, sess.dh->e_len);
- buffer->putString((const char*)mpint_f, mpint_f_len);
- buffer->putRawData((const char*)sess.dh->secret, sess.dh->secret_len);
+ ssh_dh_hash(sess.dh, buffer_data(&vbuf), sess.H, buffer_len(&vbuf));
- ssh_dh_hash(sess.dh, buffer->data(), sess.H, buffer->len());
+ buffer_deinit(&vbuf);
// Start verify
// ssh-rsa specifies SHA-1 hashing