tttls1.3 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 434477f28514352dc19f51a5164df0544e4f10c0902726fb6daea7dd6a3b418e
4
- data.tar.gz: 2efb6ab4f448b4e96d733f33475e21df10d0286faa8fde16ead1e88d3a4d09b4
3
+ metadata.gz: c4d612bec845851394778f851e83cd26a402c28b28282eadf1630684781dbfad
4
+ data.tar.gz: 2b2ac159212b899dfd2f0281b756469033ab58ac57276a2c834166e9e1c1a659
5
5
  SHA512:
6
- metadata.gz: 6459d7ac7994d985e6877e599908fd1d18fe35e70f476fc5091a8e59909c08c61ad9d4f9a3356c030fb53ce0a8c10d39d4963bb2f06255f95ae2068e952e88ad
7
- data.tar.gz: 06efcf0f787fb07c88541df0874046c9b81a7e774d012e548f785fa9a8fcb0abe30bf3cf0da1b6e4f315bd4316b438a37d935bf6cc955104bc1c9bc74aeccf64
6
+ metadata.gz: 902358ead54f4e37bcb6921f8ac26cb0d365ff90c96f8b1d148286a08a057af719989ed0b24d34e99e646965ca7dbfbcdf2b07d9f28b84d3e00e62d904d8ff3f
7
+ data.tar.gz: 33781ec8908342d9aa0670c1ce82516bd7a0fafbed7f49f470765b0d053883cee66b913fc14c060c83abe82dca863653ec7632efcbbcbc4b84dce577eef21764
@@ -294,7 +294,7 @@ module TTTLS13
294
294
  @state = ClientState::WAIT_CERT_CR
295
295
  @state = ClientState::WAIT_FINISHED unless psk.nil?
296
296
  when ClientState::WAIT_CERT_CR
297
- logger.debug('ClientState::WAIT_EE')
297
+ logger.debug('ClientState::WAIT_CERT_CR')
298
298
 
299
299
  message = recv_message(receivable_ccs: true, cipher: hs_rcipher)
300
300
  if message.msg_type == Message::HandshakeType::CERTIFICATE
@@ -310,14 +310,14 @@ module TTTLS13
310
310
  terminate(:unexpected_message)
311
311
  end
312
312
  when ClientState::WAIT_CERT
313
- logger.debug('ClientState::WAIT_EE')
313
+ logger.debug('ClientState::WAIT_CERT')
314
314
 
315
315
  ct = transcript[CT] = recv_certificate(hs_rcipher)
316
316
  terminate_invalid_certificate(ct, transcript[CH])
317
317
 
318
318
  @state = ClientState::WAIT_CV
319
319
  when ClientState::WAIT_CV
320
- logger.debug('ClientState::WAIT_EE')
320
+ logger.debug('ClientState::WAIT_CV')
321
321
 
322
322
  cv = transcript[CV] = recv_certificate_verify(hs_rcipher)
323
323
  digest = CipherSuite.digest(@cipher_suite)
@@ -329,7 +329,7 @@ module TTTLS13
329
329
 
330
330
  @state = ClientState::WAIT_FINISHED
331
331
  when ClientState::WAIT_FINISHED
332
- logger.debug('ClientState::WAIT_EE')
332
+ logger.debug('ClientState::WAIT_FINISHED')
333
333
 
334
334
  sf = transcript[SF] = recv_finished(hs_rcipher)
335
335
  digest = CipherSuite.digest(@cipher_suite)
@@ -361,6 +361,7 @@ module TTTLS13
361
361
  key_schedule.server_application_write_key,
362
362
  key_schedule.server_application_write_iv
363
363
  )
364
+ @exporter_master_secret = key_schedule.exporter_master_secret
364
365
  @resumption_master_secret = key_schedule.resumption_master_secret
365
366
  @state = ClientState::CONNECTED
366
367
  when ClientState::CONNECTED
@@ -456,10 +457,8 @@ module TTTLS13
456
457
  # @return [String]
457
458
  def gen_psk_from_nst(resumption_master_secret, ticket_nonce, digest)
458
459
  hash_len = OpenSSL::Digest.new(digest).digest_length
459
- info = hash_len.to_uint16
460
- info += 'tls13 resumption'.prefix_uint8_length
461
- info += ticket_nonce.prefix_uint8_length
462
- KeySchedule.hkdf_expand(resumption_master_secret, info, hash_len, digest)
460
+ KeySchedule.hkdf_expand_label(resumption_master_secret, 'resumption',
461
+ ticket_nonce, hash_len, digest)
463
462
  end
464
463
 
465
464
  # @return [TTTLS13::Message::Extensions]
@@ -24,6 +24,7 @@ module TTTLS13
24
24
  @state = 0 # ClientState or ServerState
25
25
  @send_record_size = Message::DEFAULT_RECORD_SIZE_LIMIT
26
26
  @alpn = nil # String
27
+ @exporter_master_secret = nil # String
27
28
  end
28
29
 
29
30
  # @raise [TTTLS13::Error::ConfigError]
@@ -101,8 +102,45 @@ module TTTLS13
101
102
  @alpn
102
103
  end
103
104
 
105
+ # @param label [String]
106
+ # @param context [String]
107
+ # @param key_length [Integer]
108
+ #
109
+ # @return [String, nil]
110
+ def exporter(label, context, key_length)
111
+ return nil if @exporter_master_secret.nil? || @cipher_suite.nil?
112
+
113
+ digest = CipherSuite.digest(@cipher_suite)
114
+ do_exporter(@exporter_master_secret, digest, label, context, key_length)
115
+ end
116
+
104
117
  private
105
118
 
119
+ # @param secret [String] (early_)exporter_master_secret
120
+ # @param digest [String] name of digest algorithm
121
+ # @param label [String]
122
+ # @param context [String]
123
+ # @param key_length [Integer]
124
+ #
125
+ # @return [String]
126
+ def do_exporter(secret, digest, label, context, key_length)
127
+ derived_secret = KeySchedule.hkdf_expand_label(
128
+ secret,
129
+ label,
130
+ OpenSSL::Digest.digest(digest, ''),
131
+ OpenSSL::Digest.new(digest).digest_length,
132
+ digest
133
+ )
134
+
135
+ KeySchedule.hkdf_expand_label(
136
+ derived_secret,
137
+ 'exporter',
138
+ OpenSSL::Digest.digest(digest, context),
139
+ key_length,
140
+ digest
141
+ )
142
+ end
143
+
106
144
  # @param cipher_suite [TTTLS13::CipherSuite]
107
145
  # @param write_key [String]
108
146
  # @param write_iv [String]
@@ -33,14 +33,14 @@ module TTTLS13
33
33
  def binder_key_ext
34
34
  hash = OpenSSL::Digest.digest(@digest, '')
35
35
  base_key = derive_secret(early_secret, 'ext binder', hash)
36
- hkdf_expand_label(base_key, 'finished', '', @hash_len)
36
+ self.class.hkdf_expand_label(base_key, 'finished', '', @hash_len, @digest)
37
37
  end
38
38
 
39
39
  # @return [String]
40
40
  def binder_key_res
41
41
  hash = OpenSSL::Digest.digest(@digest, '')
42
42
  base_key = derive_secret(early_secret, 'res binder', hash)
43
- hkdf_expand_label(base_key, 'finished', '', @hash_len)
43
+ self.class.hkdf_expand_label(base_key, 'finished', '', @hash_len, @digest)
44
44
  end
45
45
 
46
46
  # @return [String]
@@ -52,13 +52,13 @@ module TTTLS13
52
52
  # @return [String]
53
53
  def early_data_write_key
54
54
  secret = client_early_traffic_secret
55
- hkdf_expand_label(secret, 'key', '', @key_len)
55
+ self.class.hkdf_expand_label(secret, 'key', '', @key_len, @digest)
56
56
  end
57
57
 
58
58
  # @return [String]
59
59
  def early_data_write_iv
60
60
  secret = client_early_traffic_secret
61
- hkdf_expand_label(secret, 'iv', '', @iv_len)
61
+ self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
62
62
  end
63
63
 
64
64
  # @return [String]
@@ -87,19 +87,19 @@ module TTTLS13
87
87
  # @return [String]
88
88
  def client_finished_key
89
89
  secret = client_handshake_traffic_secret
90
- hkdf_expand_label(secret, 'finished', '', @hash_len)
90
+ self.class.hkdf_expand_label(secret, 'finished', '', @hash_len, @digest)
91
91
  end
92
92
 
93
93
  # @return [String]
94
94
  def client_handshake_write_key
95
95
  secret = client_handshake_traffic_secret
96
- hkdf_expand_label(secret, 'key', '', @key_len)
96
+ self.class.hkdf_expand_label(secret, 'key', '', @key_len, @digest)
97
97
  end
98
98
 
99
99
  # @return [String]
100
100
  def client_handshake_write_iv
101
101
  secret = client_handshake_traffic_secret
102
- hkdf_expand_label(secret, 'iv', '', @iv_len)
102
+ self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
103
103
  end
104
104
 
105
105
  # @return [String]
@@ -111,19 +111,19 @@ module TTTLS13
111
111
  # @return [String]
112
112
  def server_finished_key
113
113
  secret = server_handshake_traffic_secret
114
- hkdf_expand_label(secret, 'finished', '', @hash_len)
114
+ self.class.hkdf_expand_label(secret, 'finished', '', @hash_len, @digest)
115
115
  end
116
116
 
117
117
  # @return [String]
118
118
  def server_handshake_write_key
119
119
  secret = server_handshake_traffic_secret
120
- hkdf_expand_label(secret, 'key', '', @key_len)
120
+ self.class.hkdf_expand_label(secret, 'key', '', @key_len, @digest)
121
121
  end
122
122
 
123
123
  # @return [String]
124
124
  def server_handshake_write_iv
125
125
  secret = server_handshake_traffic_secret
126
- hkdf_expand_label(secret, 'iv', '', @iv_len)
126
+ self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
127
127
  end
128
128
 
129
129
  # @return [String]
@@ -147,13 +147,13 @@ module TTTLS13
147
147
  # @return [String]
148
148
  def client_application_write_key
149
149
  secret = client_application_traffic_secret
150
- hkdf_expand_label(secret, 'key', '', @key_len)
150
+ self.class.hkdf_expand_label(secret, 'key', '', @key_len, @digest)
151
151
  end
152
152
 
153
153
  # @return [String]
154
154
  def client_application_write_iv
155
155
  secret = client_application_traffic_secret
156
- hkdf_expand_label(secret, 'iv', '', @iv_len)
156
+ self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
157
157
  end
158
158
 
159
159
  # @return [String]
@@ -165,13 +165,13 @@ module TTTLS13
165
165
  # @return [String]
166
166
  def server_application_write_key
167
167
  secret = server_application_traffic_secret
168
- hkdf_expand_label(secret, 'key', '', @key_len)
168
+ self.class.hkdf_expand_label(secret, 'key', '', @key_len, @digest)
169
169
  end
170
170
 
171
171
  # @return [String]
172
172
  def server_application_write_iv
173
173
  secret = server_application_traffic_secret
174
- hkdf_expand_label(secret, 'iv', '', @iv_len)
174
+ self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
175
175
  end
176
176
 
177
177
  # @return [String]
@@ -198,13 +198,14 @@ module TTTLS13
198
198
  # @param label [String]
199
199
  # @param context [String]
200
200
  # @param length [Integer]
201
+ # @param digest [String] name of digest algorithm
201
202
  #
202
203
  # @return [String]
203
- def hkdf_expand_label(secret, label, context, length)
204
+ def self.hkdf_expand_label(secret, label, context, length, digest)
204
205
  binary = length.to_uint16
205
206
  binary += ('tls13 ' + label).prefix_uint8_length
206
207
  binary += context.prefix_uint8_length
207
- self.class.hkdf_expand(secret, binary, length, @digest)
208
+ hkdf_expand(secret, binary, length, digest)
208
209
  end
209
210
 
210
211
  # @param secret [String]
@@ -235,7 +236,7 @@ module TTTLS13
235
236
  #
236
237
  # @return [String]
237
238
  def derive_secret(secret, label, context)
238
- hkdf_expand_label(secret, label, context, @hash_len)
239
+ self.class.hkdf_expand_label(secret, label, context, @hash_len, @digest)
239
240
  end
240
241
  end
241
242
  # rubocop: enable Metrics/ClassLength
@@ -266,6 +266,7 @@ module TTTLS13
266
266
  key_schedule.client_application_write_key,
267
267
  key_schedule.client_application_write_iv
268
268
  )
269
+ @exporter_master_secret = key_schedule.exporter_master_secret
269
270
  @state = ServerState::CONNECTED
270
271
  when ServerState::CONNECTED
271
272
  logger.debug('ServerState::CONNECTED')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TTTLS13
4
- VERSION = '0.2.6'
4
+ VERSION = '0.2.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tttls1.3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekuwayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-04 00:00:00.000000000 Z
11
+ date: 2019-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler