/[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 82 by astrand, Tue Jul 30 07:18:48 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, uint8 * client_rsa)
36  {  {
37          uint8 session_key[48];          uint8 session_key[48];
38          uint8 temp_hash[48];          uint8 temp_hash[48];
# Line 49  licence_generate_keys(uint8 *client_key, Line 49  licence_generate_keys(uint8 *client_key,
49  }  }
50    
51  static void  static void
52  licence_generate_hwid(uint8 *hwid)  licence_generate_hwid(uint8 * hwid)
53  {  {
54          buf_out_uint32(hwid, 2);          buf_out_uint32(hwid, 2);
55          strncpy(hwid + 4, hostname, LICENCE_HWID_SIZE - 4);          strncpy((char *) (hwid + 4), hostname, LICENCE_HWID_SIZE - 4);
56  }  }
57    
58  /* Present an existing licence to the server */  /* Present an existing licence to the server */
59  static void  static void
60  licence_present(uint8 *client_random, uint8 *rsa_data,  licence_present(uint8 * client_random, uint8 * rsa_data,
61                  uint8 *licence_data, int licence_size,                  uint8 * licence_data, int licence_size, uint8 * hwid, uint8 * signature)
                 uint8 *hwid, uint8 *signature)  
62  {  {
63          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
64          uint16 length = 16 + SEC_RANDOM_SIZE + SEC_MODULUS_SIZE + SEC_PADDING_SIZE          uint16 length =
65                          + licence_size + LICENCE_HWID_SIZE + LICENCE_SIGNATURE_SIZE;                  16 + SEC_RANDOM_SIZE + SEC_MODULUS_SIZE + SEC_PADDING_SIZE +
66                    licence_size + LICENCE_HWID_SIZE + LICENCE_SIGNATURE_SIZE;
67          STREAM s;          STREAM s;
68    
69          s = sec_init(sec_flags, length + 4);          s = sec_init(sec_flags, length + 4);
# Line 97  licence_present(uint8 *client_random, ui Line 97  licence_present(uint8 *client_random, ui
97    
98  /* Send a licence request packet */  /* Send a licence request packet */
99  static void  static void
100  licence_send_request(uint8 *client_random, uint8 *rsa_data,  licence_send_request(uint8 * client_random, uint8 * rsa_data, char *user, char *host)
                      char *user, char *host)  
101  {  {
102          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
103          uint16 userlen = strlen(user) + 1;          uint16 userlen = strlen(user) + 1;
104          uint16 hostlen = strlen(host) + 1;          uint16 hostlen = strlen(host) + 1;
105          uint16 length = 120 + userlen + hostlen;          uint16 length = 128 + userlen + hostlen;
106          STREAM s;          STREAM s;
107    
108          s = sec_init(sec_flags, length + 2);          s = sec_init(sec_flags, length + 2);
# Line 162  licence_process_demand(STREAM s) Line 161  licence_process_demand(STREAM s)
161    
162          /* Generate a signature for the HWID buffer */          /* Generate a signature for the HWID buffer */
163          licence_generate_hwid(hwid);          licence_generate_hwid(hwid);
164          sec_sign(signature, licence_sign_key, 16, hwid, sizeof(hwid));          sec_sign(signature, 16, licence_sign_key, 16, hwid, sizeof(hwid));
165    
166          /* Now encrypt the HWID */          /* Now encrypt the HWID */
167          RC4_set_key(&crypt_key, 16, licence_key);          RC4_set_key(&crypt_key, 16, licence_key);
168          RC4(&crypt_key, sizeof(hwid), hwid, hwid);          RC4(&crypt_key, sizeof(hwid), hwid, hwid);
169    
170          licence_present(null_data, null_data, licence_data, licence_size,          licence_present(null_data, null_data, licence_data, licence_size, hwid, signature);
                                         hwid, signature);  
171          xfree(licence_data);          xfree(licence_data);
172  }  }
173    
174  /* Send an authentication response packet */  /* Send an authentication response packet */
175  static void  static void
176  licence_send_authresp(uint8 *token, uint8 *crypt_hwid, uint8 *signature)  licence_send_authresp(uint8 * token, uint8 * crypt_hwid, uint8 * signature)
177  {  {
178          uint32 sec_flags = SEC_LICENCE_NEG;          uint32 sec_flags = SEC_LICENCE_NEG;
179          uint16 length = 58;          uint16 length = 58;
# Line 202  licence_send_authresp(uint8 *token, uint Line 200  licence_send_authresp(uint8 *token, uint
200    
201  /* Parse an authentication request packet */  /* Parse an authentication request packet */
202  static BOOL  static BOOL
203  licence_parse_authreq(STREAM s, uint8 **token, uint8 **signature)  licence_parse_authreq(STREAM s, uint8 ** token, uint8 ** signature)
204  {  {
205          uint16 tokenlen;          uint16 tokenlen;
206    
# Line 226  static void Line 224  static void
224  licence_process_authreq(STREAM s)  licence_process_authreq(STREAM s)
225  {  {
226          uint8 *in_token, *in_sig;          uint8 *in_token, *in_sig;
227          uint8 out_token[LICENCE_TOKEN_SIZE],          uint8 out_token[LICENCE_TOKEN_SIZE], decrypt_token[LICENCE_TOKEN_SIZE];
                 decrypt_token[LICENCE_TOKEN_SIZE];  
228          uint8 hwid[LICENCE_HWID_SIZE], crypt_hwid[LICENCE_HWID_SIZE];          uint8 hwid[LICENCE_HWID_SIZE], crypt_hwid[LICENCE_HWID_SIZE];
229          uint8 sealed_buffer[LICENCE_TOKEN_SIZE + LICENCE_HWID_SIZE];          uint8 sealed_buffer[LICENCE_TOKEN_SIZE + LICENCE_HWID_SIZE];
230          uint8 out_sig[LICENCE_SIGNATURE_SIZE];          uint8 out_sig[LICENCE_SIGNATURE_SIZE];
# Line 245  licence_process_authreq(STREAM s) Line 242  licence_process_authreq(STREAM s)
242          licence_generate_hwid(hwid);          licence_generate_hwid(hwid);
243          memcpy(sealed_buffer, decrypt_token, LICENCE_TOKEN_SIZE);          memcpy(sealed_buffer, decrypt_token, LICENCE_TOKEN_SIZE);
244          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);
245          sec_sign(out_sig, licence_sign_key, 16,          sec_sign(out_sig, 16, licence_sign_key, 16, sealed_buffer, sizeof(sealed_buffer));
                  sealed_buffer, sizeof(sealed_buffer));  
246    
247          /* Deliberately break signature if licencing disabled */          /* Deliberately break signature if licencing disabled */
248          if (!licence)          if (!licence)
# Line 280  licence_process_issue(STREAM s) Line 276  licence_process_issue(STREAM s)
276                  return;                  return;
277    
278          licence_issued = True;          licence_issued = True;
279          save_licence(s->p, length-2);          save_licence(s->p, length - 2);
280  }  }
281    
282  /* Process a licence packet */  /* Process a licence packet */

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

  ViewVC Help
Powered by ViewVC 1.1.26