uint8 bMsgType;
uint16 wMsgSize;
- printf("SEC_LICENSE_PKT\n");
-
license_read_preamble(s, &bMsgType, &flags, &wMsgSize); /* preamble (4 bytes) */
- printf("bMsgType:%X, flags:%X, wMsgSize:%02x\n", bMsgType, flags, wMsgSize);
-
switch (bMsgType)
{
case LICENSE_REQUEST:
case PLATFORM_CHALLENGE:
license_read_platform_challenge_packet(license, s);
+ license_send_platform_challenge_response_packet(license);
break;
case NEW_LICENSE:
}
/**
+ * Generate License Cryptographic Keys.
+ * @param license license module
+ */
+
+void license_generate_keys(rdpLicense* license)
+{
+ /* FIXME: generate real keys, not null keys */
+
+ memset(license->client_random, 0, 32);
+
+ license->encrypted_pre_master_secret->length = 72;
+ license->encrypted_pre_master_secret->data = (uint8*) xzalloc(72);
+}
+
+/**
* Read Product Information (PRODUCT_INFO).\n
* @msdn{cc241915}
* @param s stream
void license_read_license_request_packet(rdpLicense* license, STREAM* s)
{
- printf("LICENSE_REQUEST\n");
+ DEBUG_LICENSE("Receiving License Request Packet");
/* ServerRandom (32 bytes) */
stream_read(s, license->server_random, 32);
void license_read_platform_challenge_packet(rdpLicense* license, STREAM* s)
{
+ DEBUG_LICENSE("Receiving Platform Challenge Packet");
+ stream_seek(s, 4); /* ConnectFlags, Reserved (4 bytes) */
+
+ /* EncryptedPlatformChallenge */
+
+ /* MACData (16 bytes) */
}
/**
void license_read_new_license_packet(rdpLicense* license, STREAM* s)
{
-
+ DEBUG_LICENSE("Receiving New License Packet");
}
/**
void license_read_upgrade_license_packet(rdpLicense* license, STREAM* s)
{
-
+ DEBUG_LICENSE("Receiving Upgrade License Packet");
}
/**
void license_read_error_alert_packet(rdpLicense* license, STREAM* s)
{
-
+ DEBUG_LICENSE("Receiving Error Alert Packet");
}
/**
STREAM* s;
s = license_send_stream_init(license);
+ DEBUG_LICENSE("Sending New License Request Packet");
- /* TODO: generate keys */
+ license->client_user_name->data = license->rdp->settings->username;
+ license->client_user_name->length = strlen(license->rdp->settings->username);
+
+ license->client_machine_name->data = license->rdp->settings->hostname;
+ license->client_machine_name->length = strlen(license->rdp->settings->hostname);
+
+ license_generate_keys(license);
license_write_new_license_request_packet(license, s);
license_send(license, s, NEW_LICENSE_REQUEST);
+
+ license->client_user_name->data = NULL;
+ license->client_user_name->length = 0;
+
+ license->client_machine_name->data = NULL;
+ license->client_machine_name->length = 0;
+}
+
+/**
+ * Write Client Challenge Response Packet.\n
+ * @msdn{cc241922}
+ * @param license license module
+ * @param s stream
+ */
+
+void license_write_platform_challenge_response_packet(rdpLicense* license, STREAM* s)
+{
+ /* EncryptedPlatformChallengeResponse */
+
+ /* EncryptedHWID */
+
+ /* MACData */
+}
+
+/**
+ * Send Client Challenge Response Packet.\n
+ * @msdn{cc241922}
+ * @param license license module
+ */
+
+void license_send_platform_challenge_response_packet(rdpLicense* license)
+{
+ STREAM* s;
+
+ s = license_send_stream_init(license);
+ DEBUG_LICENSE("Sending Platform Challenge Response Packet");
+
+ license_write_platform_challenge_response_packet(license, s);
+
+ license_send(license, s, PLATFORM_CHALLENGE_RESPONSE);
}
/**
#include "rdp.h"
#include <freerdp/freerdp.h>
+#include <freerdp/utils/debug.h>
#include <freerdp/utils/stream.h>
/* Licensing Packet Types */
void license_recv(rdpLicense* license, STREAM* s);
STREAM* license_send_stream_init(rdpLicense* license);
+void license_generate_keys(rdpLicense* license);
+
PRODUCT_INFO* license_new_product_info();
void license_free_product_info(PRODUCT_INFO* productInfo);
void license_read_product_info(STREAM* s, PRODUCT_INFO* productInfo);
void license_write_new_license_request_packet(rdpLicense* license, STREAM* s);
void license_send_new_license_request_packet(rdpLicense* license);
+void license_write_platform_challenge_response_packet(rdpLicense* license, STREAM* s);
+void license_send_platform_challenge_response_packet(rdpLicense* license);
+
rdpLicense* license_new(rdpRdp* rdp);
void license_free(rdpLicense* license);
+#define WITH_DEBUG_LICENSE 1
+
+#ifdef WITH_DEBUG_LICENSE
+#define DEBUG_LICENSE(fmt, ...) DEBUG_CLASS(LICENSE, fmt, ## __VA_ARGS__)
+#else
+#define DEBUG_LICENSE(fmt, ...) DEBUG_NULL(fmt, ## __VA_ARGS__)
+#endif
+
#endif /* __LICENSE_H */