1 /** 2 * FreeRDP: A Remote Desktop Protocol Implementation 3 * Licensing API 4 * 5 * Copyright 2018 David Fort <contact@hardening-consulting.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20 #ifndef FREERDP_LICENSE_H 21 #define FREERDP_LICENSE_H 22 23 #include <freerdp/api.h> 24 25 typedef struct rdp_license rdpLicense; 26 27 /** @brief Licensing Packet Types */ 28 enum 29 { 30 LICENSE_REQUEST = 0x01, 31 PLATFORM_CHALLENGE = 0x02, 32 NEW_LICENSE = 0x03, 33 UPGRADE_LICENSE = 0x04, 34 LICENSE_INFO = 0x12, 35 NEW_LICENSE_REQUEST = 0x13, 36 PLATFORM_CHALLENGE_RESPONSE = 0x15, 37 ERROR_ALERT = 0xFF 38 }; 39 40 #define LICENSE_PKT_CS_MASK \ 41 (LICENSE_INFO | NEW_LICENSE_REQUEST | PLATFORM_CHALLENGE_RESPONSE | ERROR_ALERT) 42 #define LICENSE_PKT_SC_MASK \ 43 (LICENSE_REQUEST | PLATFORM_CHALLENGE | NEW_LICENSE | UPGRADE_LICENSE | ERROR_ALERT) 44 #define LICENSE_PKT_MASK (LICENSE_PKT_CS_MASK | LICENSE_PKT_SC_MASK) 45 46 #define LICENSE_PREAMBLE_LENGTH 4 47 48 /* Cryptographic Lengths */ 49 50 #define CLIENT_RANDOM_LENGTH 32 51 #define SERVER_RANDOM_LENGTH 32 52 #define MASTER_SECRET_LENGTH 48 53 #define PREMASTER_SECRET_LENGTH 48 54 #define SESSION_KEY_BLOB_LENGTH 48 55 #define MAC_SALT_KEY_LENGTH 16 56 #define LICENSING_ENCRYPTION_KEY_LENGTH 16 57 #define HWID_PLATFORM_ID_LENGTH 4 58 #define HWID_UNIQUE_DATA_LENGTH 16 59 #define HWID_LENGTH 20 60 #define LICENSING_PADDING_SIZE 8 61 62 /* Preamble Flags */ 63 64 #define PREAMBLE_VERSION_2_0 0x02 65 #define PREAMBLE_VERSION_3_0 0x03 66 #define LicenseProtocolVersionMask 0x0F 67 #define EXTENDED_ERROR_MSG_SUPPORTED 0x80 68 69 /** @brief binary Blob Types */ 70 enum 71 { 72 BB_ANY_BLOB = 0x0000, 73 BB_DATA_BLOB = 0x0001, 74 BB_RANDOM_BLOB = 0x0002, 75 BB_CERTIFICATE_BLOB = 0x0003, 76 BB_ERROR_BLOB = 0x0004, 77 BB_ENCRYPTED_DATA_BLOB = 0x0009, 78 BB_KEY_EXCHG_ALG_BLOB = 0x000D, 79 BB_SCOPE_BLOB = 0x000E, 80 BB_CLIENT_USER_NAME_BLOB = 0x000F, 81 BB_CLIENT_MACHINE_NAME_BLOB = 0x0010 82 }; 83 84 /* License Key Exchange Algorithms */ 85 86 #define KEY_EXCHANGE_ALG_RSA 0x00000001 87 88 /** @brief license Error Codes */ 89 enum 90 { 91 ERR_INVALID_SERVER_CERTIFICATE = 0x00000001, 92 ERR_NO_LICENSE = 0x00000002, 93 ERR_INVALID_MAC = 0x00000003, 94 ERR_INVALID_SCOPE = 0x00000004, 95 ERR_NO_LICENSE_SERVER = 0x00000006, 96 STATUS_VALID_CLIENT = 0x00000007, 97 ERR_INVALID_CLIENT = 0x00000008, 98 ERR_INVALID_PRODUCT_ID = 0x0000000B, 99 ERR_INVALID_MESSAGE_LENGTH = 0x0000000C 100 }; 101 102 /** @brief state Transition Codes */ 103 enum 104 { 105 ST_TOTAL_ABORT = 0x00000001, 106 ST_NO_TRANSITION = 0x00000002, 107 ST_RESET_PHASE_TO_START = 0x00000003, 108 ST_RESEND_LAST_MESSAGE = 0x00000004 109 }; 110 111 /** @brief Platform Challenge Types */ 112 enum 113 { 114 WIN32_PLATFORM_CHALLENGE_TYPE = 0x0100, 115 WIN16_PLATFORM_CHALLENGE_TYPE = 0x0200, 116 WINCE_PLATFORM_CHALLENGE_TYPE = 0x0300, 117 OTHER_PLATFORM_CHALLENGE_TYPE = 0xFF00 118 }; 119 120 /** @brief License Detail Levels */ 121 enum 122 { 123 LICENSE_DETAIL_SIMPLE = 0x0001, 124 LICENSE_DETAIL_MODERATE = 0x0002, 125 LICENSE_DETAIL_DETAIL = 0x0003 126 }; 127 128 /* 129 * PlatformId: 130 * 131 * The most significant byte of the PlatformId field contains the operating system version of the 132 * client. The second most significant byte of the PlatformId field identifies the ISV that provided 133 * the client image. The remaining two bytes in the PlatformId field are used by the ISV to identify 134 * the build number of the operating system. 135 * 136 * 0x04010000: 137 * 138 * CLIENT_OS_ID_WINNT_POST_52 (0x04000000) 139 * CLIENT_IMAGE_ID_MICROSOFT (0x00010000) 140 */ 141 enum 142 { 143 CLIENT_OS_ID_WINNT_351 = 0x01000000, 144 CLIENT_OS_ID_WINNT_40 = 0x02000000, 145 CLIENT_OS_ID_WINNT_50 = 0x03000000, 146 CLIENT_OS_ID_WINNT_POST_52 = 0x04000000, 147 148 CLIENT_IMAGE_ID_MICROSOFT = 0x00010000, 149 CLIENT_IMAGE_ID_CITRIX = 0x00020000, 150 }; 151 152 #ifdef __cpluscplus 153 extern "C" 154 { 155 #endif 156 157 FREERDP_API BOOL license_send_valid_client_error_packet(rdpRdp* rdp); 158 159 #ifdef __cpluscplus 160 } 161 #endif 162 163 #endif /* FREERDP_LICENSE_H */ 164