2.2.2.2 Client New License Request (CLIENT_NEW_LICENSE_REQUEST)

The Client New License Request packet is sent to a server when the client cannot find a license matching the product information provided in the Server License Request message. This message is interpreted as a new license request by the server, and the server SHOULD attempt to issue a new license to the client on receipt of this message.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

PreferredKeyExchangeAlg

PlatformId

ClientRandom (32 bytes)

...

...

EncryptedPreMasterSecret (variable)

...

ClientUserName (variable)

...

ClientMachineName (variable)

...

PreferredKeyExchangeAlg (4 bytes): A 32-bit unsigned integer that indicates the key exchange algorithm chosen by the client. It MUST be set to KEY_EXCHANGE_ALG_RSA (0x00000001), which indicates an RSA-based key exchange with a 512-bit asymmetric key.<8>

PlatformId (4 bytes): A 32-bit unsigned integer. This field is composed of two identifiers: the operating system identifier and the independent software vendor (ISV) identifier. The platform ID is composed of the logical OR of these two values.

The most significant byte of the PlatformId field contains the operating system version of the client.<9>

The second most significant byte of the PlatformId field identifies the ISV that provided the client image.<10>

The remaining two bytes in the PlatformId field are used by the ISV to identify the build number of the operating system.<11>

ClientRandom (32 bytes): A 32-byte random number generated by the client using a cryptographically secure pseudo-random number generator. The ClientRandom and ServerRandom (see section 2.2.2.1) values, along with the data in the EncryptedPreMasterSecret field, are used to generate licensing encryption keys (see section 5.1.2). These keys are used to encrypt licensing protocol messages (see sections 5.1.3 and 5.1.4).

EncryptedPreMasterSecret (variable): A Licensing Binary BLOB structure (see [MS-RDPBCGR] section 2.2.1.12.1.2) of type BB_RANDOM_BLOB (0x0002). This BLOB contains an encrypted 48-byte random number. For instructions on how to encrypt this random number, see section 5.1.1.1.

ClientUserName (variable): A Licensing Binary BLOB structure (see [MS-RDPBCGR] section 2.2.1.12.1.2) of type BB_CLIENT_USER_NAME_BLOB (0x000F). This BLOB contains the client user name string in null-terminated ANSI character set format and is used along with the ClientMachineName BLOB to keep track of licenses issued to clients.

ClientMachineName (variable): A Licensing Binary BLOB structure (see [MS-RDPBCGR] section 2.2.1.12.1.2) of type BB_CLIENT_MACHINE_NAME_BLOB (0x0010). This BLOB contains the client machine name string in null-terminated ANSI character set format and is used along with the ClientUserName BLOB to keep track of licenses issued to clients.