@@ -38,13 +38,24 @@ def authenticate!
38
38
rc4 = OpenSSL ::Cipher ::Cipher . new ( "rc4" )
39
39
rc4 . encrypt
40
40
rc4 . key = user_session_key
41
- sk = rc4 . update master_key
41
+ sk = rc4 . update exported_session_key
42
42
sk << rc4 . final
43
43
t3 . session_key = sk
44
44
end
45
45
t3
46
46
end
47
47
48
+ def exported_session_key
49
+ @exported_session_key ||=
50
+ begin
51
+ if negotiate_key_exchange?
52
+ OpenSSL ::Cipher . new ( "rc4" ) . random_key
53
+ else
54
+ user_session_key
55
+ end
56
+ end
57
+ end
58
+
48
59
def sign_message ( message )
49
60
seq = sequence
50
61
sig = OpenSSL ::HMAC . digest ( OpenSSL ::Digest ::MD5 . new , client_sign_key , "#{ seq } #{ message } " ) [ 0 ..7 ]
@@ -75,24 +86,13 @@ def unseal_message(emessage)
75
86
message + server_cipher . final
76
87
end
77
88
78
-
79
89
private
80
90
81
91
82
92
def user_session_key
83
93
@user_session_key ||= nil
84
94
end
85
95
86
- def master_key
87
- @master_key ||= begin
88
- if negotiate_key_exchange?
89
- OpenSSL ::Cipher . new ( "rc4" ) . random_key
90
- else
91
- user_session_key
92
- end
93
- end
94
- end
95
-
96
96
def sequence
97
97
[ raw_sequence ] . pack ( "V*" )
98
98
end
@@ -106,19 +106,19 @@ def raw_sequence
106
106
end
107
107
108
108
def client_sign_key
109
- @client_sign_key ||= OpenSSL ::Digest ::MD5 . digest "#{ master_key } #{ CLIENT_TO_SERVER_SIGNING } "
109
+ @client_sign_key ||= OpenSSL ::Digest ::MD5 . digest "#{ exported_session_key } #{ CLIENT_TO_SERVER_SIGNING } "
110
110
end
111
111
112
112
def server_sign_key
113
- @server_sign_key ||= OpenSSL ::Digest ::MD5 . digest "#{ master_key } #{ SERVER_TO_CLIENT_SIGNING } "
113
+ @server_sign_key ||= OpenSSL ::Digest ::MD5 . digest "#{ exported_session_key } #{ SERVER_TO_CLIENT_SIGNING } "
114
114
end
115
115
116
116
def client_seal_key
117
- @client_seal_key ||= OpenSSL ::Digest ::MD5 . digest "#{ master_key } #{ CLIENT_TO_SERVER_SEALING } "
117
+ @client_seal_key ||= OpenSSL ::Digest ::MD5 . digest "#{ exported_session_key } #{ CLIENT_TO_SERVER_SEALING } "
118
118
end
119
119
120
120
def server_seal_key
121
- @server_seal_key ||= OpenSSL ::Digest ::MD5 . digest "#{ master_key } #{ SERVER_TO_CLIENT_SEALING } "
121
+ @server_seal_key ||= OpenSSL ::Digest ::MD5 . digest "#{ exported_session_key } #{ SERVER_TO_CLIENT_SEALING } "
122
122
end
123
123
124
124
def client_cipher
0 commit comments