extern uint8 *g_next_packet;
extern int listen_on_vnc;
+extern uint8 sec_sign_key[16];
+extern int rc4_key_len;
+
+/* Initialise secure transport packet */
+STREAM
+rdp5_init(int maxlen, BOOL encryption)
+{
+ int hdrlen;
+ STREAM s;
+
+ hdrlen = encryption ? 11 : 3;
+ s = tcp_init(maxlen + hdrlen);
+ s_push_layer(s, sec_hdr, hdrlen);
+
+ return s;
+}
+
+void
+rdp5_send(STREAM s, BOOL encryption)
+{
+ int datalen;
+
+ s_pop_layer(s, sec_hdr);
+
+ datalen = s->end - s->p;
+
+ out_uint8(s, encryption ? 0x80 : 0); // protocol
+ out_uint8(s, 0x80 | (datalen >> 8));
+ out_uint8(s, datalen & 0xff);
+
+ if (encryption) {
+ datalen -= 11;
+
+ sec_sign(s->p, 8, sec_sign_key, rc4_key_len, s->p + 8, datalen);
+ sec_encrypt(s->p + 8, datalen);
+ }
+
+ tcp_send(s);
+}
+
void
rdp5_process(STREAM s, BOOL encryption)
{
break;
}
default:
- printf("Unimplemented RDP5 opcode %d (len=%u)\n", type, length);
+ printf("Unimplemented RDP5 opcode %d\n", type);
return;
}
}