/[rdesktop]/sourceforge.net/trunk/rdesktop/licence.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/licence.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 39 by matthewc, Fri Apr 5 07:57:43 2002 UTC revision 64 by astrand, Thu Jul 18 16:38:31 2002 UTC
# Line 7  Line 7 
7     it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.     (at your option) any later version.
10      
11     This program is distributed in the hope that it will be useful,     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# Line 32  BOOL licence_issued = False; Line 32  BOOL licence_issued = False;
32    
33  /* Generate a session key and RC4 keys, given client and server randoms */  /* Generate a session key and RC4 keys, given client and server randoms */
34  static void  static void
35  licence_generate_keys(uint8 *client_key, uint8 *server_key, uint8 *client_rsa)  licence_generate_keys(uint8 * client_key, uint8 * server_key,
36                          uint8 * client_rsa)
37  {  {
38          uint8 session_key[48];          uint8 session_key[48];
39          uint8 temp_hash[48];          uint8 temp_hash[48];
# Line 49  licence_generate_keys(uint8 *client_key, Line 50  licence_generate_keys(uint8 *client_key,
50  }  }
51    
52  static void  static void
53  licence_generate_hwid(uint8 *hwid)  licence_generate_hwid(uint8 * hwid)
54  {  {
55          buf_out_uint32(hwid, 2);          buf_out_uint32(hwid, 2);
56          strncpy(hwid + 4, hostname, LICENCE_HWID_SIZE - 4);          strncpy(hwid + 4, hostname, LICENCE_HWID_SIZE - 4);
# Line 57  licence_generate_hwid(uint8 *hwid) Line 58  licence_generate_hwid(uint8 *hwid)
58    
59  /* Present an existing licence to the server */  /* Present an existing licence to the server */
60  static void  static void
61  licence_present(uint8 *client_random, uint8 *rsa_data,  licence_present(uint8 * client_random, uint8 * rsa_data,
62                  uint8 *licence_data, int licence_size,                  uint8 * licence_data, int licence_size,
63                  uint8 *hwid, uint8 *signature)                  uint8 * hwid, uint8 * signature)
64  {  {
65          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
66          uint16 length = 16 + SEC_RANDOM_SIZE + SEC_MODULUS_SIZE + SEC_PADDING_SIZE          uint16 length =
67                          + licence_size + LICENCE_HWID_SIZE + LICENCE_SIGNATURE_SIZE;                  16 + SEC_RANDOM_SIZE + SEC_MODULUS_SIZE + SEC_PADDING_SIZE +
68                    licence_size + LICENCE_HWID_SIZE + LICENCE_SIGNATURE_SIZE;
69          STREAM s;          STREAM s;
70    
71          s = sec_init(sec_flags, length + 4);          s = sec_init(sec_flags, length + 4);
# Line 97  licence_present(uint8 *client_random, ui Line 99  licence_present(uint8 *client_random, ui
99    
100  /* Send a licence request packet */  /* Send a licence request packet */
101  static void  static void
102  licence_send_request(uint8 *client_random, uint8 *rsa_data,  licence_send_request(uint8 * client_random, uint8 * rsa_data,
103                       char *user, char *host)                       char *user, char *host)
104  {  {
105          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
106          uint16 userlen = strlen(user) + 1;          uint16 userlen = strlen(user) + 1;
107          uint16 hostlen = strlen(host) + 1;          uint16 hostlen = strlen(host) + 1;
108          uint16 length = 120 + userlen + hostlen;          uint16 length = 128 + userlen + hostlen;
109          STREAM s;          STREAM s;
110    
111          s = sec_init(sec_flags, length + 2);          s = sec_init(sec_flags, length + 2);
# Line 156  licence_process_demand(STREAM s) Line 158  licence_process_demand(STREAM s)
158          licence_size = load_licence(&licence_data);          licence_size = load_licence(&licence_data);
159          if (licence_size == -1)          if (licence_size == -1)
160          {          {
161                  licence_send_request(null_data, null_data, username, hostname);                  licence_send_request(null_data, null_data, username,
162                                         hostname);
163                  return;                  return;
164          }          }
165    
166          /* Generate a signature for the HWID buffer */          /* Generate a signature for the HWID buffer */
167          licence_generate_hwid(hwid);          licence_generate_hwid(hwid);
168          sec_sign(signature, licence_sign_key, 16, hwid, sizeof(hwid));          sec_sign(signature, 16, licence_sign_key, 16, hwid, sizeof(hwid));
169    
170          /* Now encrypt the HWID */          /* Now encrypt the HWID */
171          RC4_set_key(&crypt_key, 16, licence_key);          RC4_set_key(&crypt_key, 16, licence_key);
172          RC4(&crypt_key, sizeof(hwid), hwid, hwid);          RC4(&crypt_key, sizeof(hwid), hwid, hwid);
173    
174          licence_present(null_data, null_data, licence_data, licence_size,          licence_present(null_data, null_data, licence_data, licence_size,
175                                          hwid, signature);                          hwid, signature);
176          xfree(licence_data);          xfree(licence_data);
177  }  }
178    
179  /* Send an authentication response packet */  /* Send an authentication response packet */
180  static void  static void
181  licence_send_authresp(uint8 *token, uint8 *crypt_hwid, uint8 *signature)  licence_send_authresp(uint8 * token, uint8 * crypt_hwid, uint8 * signature)
182  {  {
183          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
184          uint16 length = 58;          uint16 length = 58;
# Line 202  licence_send_authresp(uint8 *token, uint Line 205  licence_send_authresp(uint8 *token, uint
205    
206  /* Parse an authentication request packet */  /* Parse an authentication request packet */
207  static BOOL  static BOOL
208  licence_parse_authreq(STREAM s, uint8 **token, uint8 **signature)  licence_parse_authreq(STREAM s, uint8 ** token, uint8 ** signature)
209  {  {
210          uint16 tokenlen;          uint16 tokenlen;
211    
# Line 245  licence_process_authreq(STREAM s) Line 248  licence_process_authreq(STREAM s)
248          licence_generate_hwid(hwid);          licence_generate_hwid(hwid);
249          memcpy(sealed_buffer, decrypt_token, LICENCE_TOKEN_SIZE);          memcpy(sealed_buffer, decrypt_token, LICENCE_TOKEN_SIZE);
250          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);
251          sec_sign(out_sig, licence_sign_key, 16,          sec_sign(out_sig, 16, licence_sign_key, 16,
252                   sealed_buffer, sizeof(sealed_buffer));                   sealed_buffer, sizeof(sealed_buffer));
253    
254          /* Deliberately break signature if licencing disabled */          /* Deliberately break signature if licencing disabled */
# Line 280  licence_process_issue(STREAM s) Line 283  licence_process_issue(STREAM s)
283                  return;                  return;
284    
285          licence_issued = True;          licence_issued = True;
286          save_licence(s->p, length-2);          save_licence(s->p, length - 2);
287  }  }
288    
289  /* Process a licence packet */  /* Process a licence packet */

Legend:
Removed from v.39  
changed lines
  Added in v.64

  ViewVC Help
Powered by ViewVC 1.1.26