Changeset 4593

Show
Ignore:
Timestamp:
02/12/07 16:45:49 (2 years ago)
Author:
morris
Message:

Don't hang on to credentials

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/p7/wi-p7-socket.c

    r4592 r4593  
    7070        wi_p7_options_t                                         options; 
    7171         
    72         wi_string_t                                                     *username; 
    73         wi_string_t                                                     *password; 
    74          
    7572        wi_boolean_t                                            encryption_enabled; 
    7673        EVP_PKEY                                                        *private_key; 
     
    9996static wi_boolean_t                                             _wi_p7_socket_connect_handshake(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 
    10097static wi_boolean_t                                             _wi_p7_socket_accept_handshake(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 
    101 static wi_boolean_t                                             _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *, wi_time_interval_t); 
     98static wi_boolean_t                                             _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *, wi_time_interval_t, wi_string_t *, wi_string_t *); 
    10299static wi_boolean_t                                             _wi_p7_socket_accept_key_exchange(wi_p7_socket_t *, wi_time_interval_t); 
    103100static wi_boolean_t                                             _wi_p7_socket_send_compatibility_check(wi_p7_socket_t *, wi_time_interval_t); 
     
    178175        wi_release(p7_socket->socket); 
    179176         
    180         wi_release(p7_socket->username); 
    181         wi_release(p7_socket->password); 
    182  
    183177        if(p7_socket->private_key) 
    184178                EVP_PKEY_free(p7_socket->private_key); 
     
    420414 
    421415 
    422 static wi_boolean_t _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *p7_socket, wi_time_interval_t timeout) { 
     416static wi_boolean_t _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *p7_socket, wi_time_interval_t timeout, wi_string_t *username_string, wi_string_t *password_string) { 
    423417        wi_p7_message_t                 *p7_message; 
    424418        wi_data_t                               *data, *rsa_data; 
    425         wi_string_t                             *password_string; 
     419        wi_string_t                             *client_password_string; 
    426420        RSA                                             *rsa; 
    427421        unsigned char                   *cipher_key = NULL, *iv = NULL, *username = NULL, *password = NULL; 
     
    482476         
    483477        username = wi_malloc(RSA_size(rsa)); 
    484         username_length = RSA_public_encrypt(wi_string_length(p7_socket->username), (unsigned char *) wi_string_cstring(p7_socket->username), username, rsa, RSA_PKCS1_PADDING); 
     478        username_length = RSA_public_encrypt(wi_string_length(username_string), (unsigned char *) wi_string_cstring(username_string), username, rsa, RSA_PKCS1_PADDING); 
    485479         
    486480        if(username_length == -1) { 
     
    490484        } 
    491485 
    492         data = wi_string_data(p7_socket->password); 
     486        data = wi_string_data(wi_string_sha1(password)); 
    493487        wi_data_append_data(data, rsa_data); 
    494         password_string = wi_data_sha1(data); 
     488        client_password_string = wi_data_sha1(data); 
    495489         
    496490        password = wi_malloc(RSA_size(rsa)); 
    497         password_length = RSA_public_encrypt(wi_string_length(password_string), (unsigned char *) wi_string_cstring(password_string), password, rsa, RSA_PKCS1_PADDING); 
     491        password_length = RSA_public_encrypt(wi_string_length(client_password_string), (unsigned char *) wi_string_cstring(client_password_string), password, rsa, RSA_PKCS1_PADDING); 
    498492         
    499493        if(password_length == -1) { 
     
    538532        if(username) 
    539533                wi_free(username); 
     534 
     535        if(password) 
     536                wi_free(password); 
    540537         
    541538        return result; 
     
    668665 
    669666                string = (*wi_p7_socket_password_provider)(username_string); 
     667                 
     668                if(!string) { 
     669                        wi_log_info(WI_STR("username mismatch")); 
     670                         
     671                        goto end; 
     672                } 
     673                 
    670674                data = wi_string_data(string); 
    671675                wi_data_append_data(data, rsa_data); 
     
    10691073 
    10701074wi_boolean_t wi_p7_socket_connect(wi_p7_socket_t *p7_socket, wi_time_interval_t timeout, wi_p7_options_t options, wi_p7_serialization_t serialization, wi_string_t *username, wi_string_t *password) { 
    1071         p7_socket->serialization        = serialization; 
    1072         p7_socket->username                     = wi_retain(username); 
    1073         p7_socket->password                     = wi_retain(wi_string_sha1(password)); 
     1075        p7_socket->serialization = serialization; 
    10741076         
    10751077        if(!_wi_p7_socket_connect_handshake(p7_socket, timeout, options)) { 
     
    10881090         
    10891091        if(_WI_P7_SOCKET_OPTIONS_ENCRYPTION_ENABLED(p7_socket->options)) { 
    1090                 if(!_wi_p7_socket_connect_key_exchange(p7_socket, timeout)) { 
     1092                if(!_wi_p7_socket_connect_key_exchange(p7_socket, timeout, username, password)) { 
    10911093                        wi_log_warn(WI_STR("key exchange failed")); 
    10921094                         
  • libwired/trunk/libwired/p7/wi-p7-socket.h

    r4592 r4593  
    3535#include <wired/wi-socket.h> 
    3636 
    37 #define WI_P7_VERSION                           
     37#define WI_P7_VERSION                                                          
    3838 
    3939enum _wi_p7_options { 
    40         WI_P7_COMPRESSION_DEFLATE               = (1 << 0), 
    41         WI_P7_ENCRYPTION_RSA_AES                = (1 << 1), 
    42         WI_P7_ENCRYPTION_RSA_BF                 = (1 << 2), 
    43         WI_P7_COMPATIBILITY_CHECK               = (1 << 3), 
    44         WI_P7_ALL                                               = (WI_P7_COMPRESSION_DEFLATE | WI_P7_ENCRYPTION_RSA_AES | WI_P7_ENCRYPTION_RSA_BF | WI_P7_COMPATIBILITY_CHECK) 
     40        WI_P7_COMPRESSION_DEFLATE                                              = (1 << 0), 
     41        WI_P7_ENCRYPTION_RSA_AES                                               = (1 << 1), 
     42        WI_P7_ENCRYPTION_RSA_BF                                                = (1 << 2), 
     43        WI_P7_COMPATIBILITY_CHECK                                              = (1 << 3), 
     44        WI_P7_ALL                                                                              = (WI_P7_COMPRESSION_DEFLATE | WI_P7_ENCRYPTION_RSA_AES | WI_P7_ENCRYPTION_RSA_BF | WI_P7_COMPATIBILITY_CHECK) 
    4545}; 
    46 typedef enum _wi_p7_options                     wi_p7_options_t; 
     46typedef enum _wi_p7_options                                                    wi_p7_options_t; 
    4747 
    4848 
    49 typedef wi_string_t *                           wi_p7_socket_password_provider_func_t(wi_string_t *); 
     49typedef wi_string_t *                                                          wi_p7_socket_password_provider_func_t(wi_string_t *); 
    5050 
    5151 
    52 WI_EXPORT wi_runtime_id_t                       wi_p7_socket_runtime_id(void); 
     52WI_EXPORT wi_runtime_id_t                                                      wi_p7_socket_runtime_id(void); 
    5353 
    54 WI_EXPORT wi_p7_socket_t *                      wi_p7_socket_alloc(void); 
    55 WI_EXPORT wi_p7_socket_t *                      wi_p7_socket_init_with_descriptor(wi_p7_socket_t *, int, wi_p7_spec_t *); 
    56 WI_EXPORT wi_p7_socket_t *                      wi_p7_socket_init_with_socket(wi_p7_socket_t *, wi_socket_t *, wi_p7_spec_t *); 
     54WI_EXPORT wi_p7_socket_t *                                                     wi_p7_socket_alloc(void); 
     55WI_EXPORT wi_p7_socket_t *                                                     wi_p7_socket_init_with_descriptor(wi_p7_socket_t *, int, wi_p7_spec_t *); 
     56WI_EXPORT wi_p7_socket_t *                                                     wi_p7_socket_init_with_socket(wi_p7_socket_t *, wi_socket_t *, wi_p7_spec_t *); 
    5757 
    58 WI_EXPORT void                                          wi_p7_socket_set_private_key(wi_p7_socket_t *, void *); 
    59 WI_EXPORT void *                                        wi_p7_socket_private_key(wi_p7_socket_t *); 
     58WI_EXPORT void                                                                         wi_p7_socket_set_private_key(wi_p7_socket_t *, void *); 
     59WI_EXPORT void *                                                                       wi_p7_socket_private_key(wi_p7_socket_t *); 
    6060 
    61 WI_EXPORT wi_p7_spec_t *                        wi_p7_socket_spec(wi_p7_socket_t *); 
    62 WI_EXPORT wi_p7_options_t                       wi_p7_socket_options(wi_p7_socket_t *); 
    63 WI_EXPORT wi_p7_serialization_t         wi_p7_socket_serialization(wi_p7_socket_t *); 
     61WI_EXPORT wi_p7_spec_t *                                                       wi_p7_socket_spec(wi_p7_socket_t *); 
     62WI_EXPORT wi_p7_options_t                                                      wi_p7_socket_options(wi_p7_socket_t *); 
     63WI_EXPORT wi_p7_serialization_t                                        wi_p7_socket_serialization(wi_p7_socket_t *); 
    6464 
    65 WI_EXPORT wi_boolean_t                          wi_p7_socket_connect(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t, wi_p7_serialization_t, wi_string_t *, wi_string_t *); 
    66 WI_EXPORT wi_boolean_t                          wi_p7_socket_accept(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 
    67 WI_EXPORT wi_boolean_t                          wi_p7_socket_write_message(wi_p7_socket_t *, wi_time_interval_t, wi_p7_message_t *); 
    68 WI_EXPORT wi_p7_message_t *                     wi_p7_socket_read_message(wi_p7_socket_t *, wi_time_interval_t); 
    69 WI_EXPORT int32_t                                       wi_p7_socket_write_oobdata(wi_p7_socket_t *, wi_time_interval_t, const void *, uint32_t); 
    70 WI_EXPORT int32_t                                       wi_p7_socket_read_oobdata(wi_p7_socket_t *, wi_time_interval_t, void *, uint32_t); 
     65WI_EXPORT wi_boolean_t                                                         wi_p7_socket_connect(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t, wi_p7_serialization_t, wi_string_t *, wi_string_t *); 
     66WI_EXPORT wi_boolean_t                                                         wi_p7_socket_accept(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 
     67WI_EXPORT wi_boolean_t                                                         wi_p7_socket_write_message(wi_p7_socket_t *, wi_time_interval_t, wi_p7_message_t *); 
     68WI_EXPORT wi_p7_message_t *                                                    wi_p7_socket_read_message(wi_p7_socket_t *, wi_time_interval_t); 
     69WI_EXPORT int32_t                                                                      wi_p7_socket_write_oobdata(wi_p7_socket_t *, wi_time_interval_t, const void *, uint32_t); 
     70WI_EXPORT int32_t                                                                      wi_p7_socket_read_oobdata(wi_p7_socket_t *, wi_time_interval_t, void *, uint32_t); 
    7171 
    7272