Changeset 4593
- Timestamp:
- 02/12/07 16:45:49 (2 years ago)
- Files:
-
- libwired/trunk/libwired/p7/wi-p7-socket.c (modified) (10 diffs)
- libwired/trunk/libwired/p7/wi-p7-socket.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/p7/wi-p7-socket.c
r4592 r4593 70 70 wi_p7_options_t options; 71 71 72 wi_string_t *username;73 wi_string_t *password;74 75 72 wi_boolean_t encryption_enabled; 76 73 EVP_PKEY *private_key; … … 99 96 static wi_boolean_t _wi_p7_socket_connect_handshake(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 100 97 static 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 );98 static wi_boolean_t _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *, wi_time_interval_t, wi_string_t *, wi_string_t *); 102 99 static wi_boolean_t _wi_p7_socket_accept_key_exchange(wi_p7_socket_t *, wi_time_interval_t); 103 100 static wi_boolean_t _wi_p7_socket_send_compatibility_check(wi_p7_socket_t *, wi_time_interval_t); … … 178 175 wi_release(p7_socket->socket); 179 176 180 wi_release(p7_socket->username);181 wi_release(p7_socket->password);182 183 177 if(p7_socket->private_key) 184 178 EVP_PKEY_free(p7_socket->private_key); … … 420 414 421 415 422 static wi_boolean_t _wi_p7_socket_connect_key_exchange(wi_p7_socket_t *p7_socket, wi_time_interval_t timeout ) {416 static 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) { 423 417 wi_p7_message_t *p7_message; 424 418 wi_data_t *data, *rsa_data; 425 wi_string_t * password_string;419 wi_string_t *client_password_string; 426 420 RSA *rsa; 427 421 unsigned char *cipher_key = NULL, *iv = NULL, *username = NULL, *password = NULL; … … 482 476 483 477 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); 485 479 486 480 if(username_length == -1) { … … 490 484 } 491 485 492 data = wi_string_data( p7_socket->password);486 data = wi_string_data(wi_string_sha1(password)); 493 487 wi_data_append_data(data, rsa_data); 494 password_string = wi_data_sha1(data);488 client_password_string = wi_data_sha1(data); 495 489 496 490 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); 498 492 499 493 if(password_length == -1) { … … 538 532 if(username) 539 533 wi_free(username); 534 535 if(password) 536 wi_free(password); 540 537 541 538 return result; … … 668 665 669 666 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 670 674 data = wi_string_data(string); 671 675 wi_data_append_data(data, rsa_data); … … 1069 1073 1070 1074 wi_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; 1074 1076 1075 1077 if(!_wi_p7_socket_connect_handshake(p7_socket, timeout, options)) { … … 1088 1090 1089 1091 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)) { 1091 1093 wi_log_warn(WI_STR("key exchange failed")); 1092 1094 libwired/trunk/libwired/p7/wi-p7-socket.h
r4592 r4593 35 35 #include <wired/wi-socket.h> 36 36 37 #define WI_P7_VERSION 137 #define WI_P7_VERSION 1 38 38 39 39 enum _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) 45 45 }; 46 typedef enum _wi_p7_options wi_p7_options_t;46 typedef enum _wi_p7_options wi_p7_options_t; 47 47 48 48 49 typedef wi_string_t * wi_p7_socket_password_provider_func_t(wi_string_t *);49 typedef wi_string_t * wi_p7_socket_password_provider_func_t(wi_string_t *); 50 50 51 51 52 WI_EXPORT wi_runtime_id_t wi_p7_socket_runtime_id(void);52 WI_EXPORT wi_runtime_id_t wi_p7_socket_runtime_id(void); 53 53 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 *);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 *); 57 57 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 *);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 *); 60 60 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 *);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 *); 64 64 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);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); 71 71 72 72
