tttls1.3 0.2.12 → 0.2.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +32 -0
  3. data/.rubocop.yml +2 -2
  4. data/Gemfile +3 -4
  5. data/README.md +4 -1
  6. data/example/helper.rb +3 -3
  7. data/example/https_client.rb +1 -1
  8. data/example/https_client_using_0rtt.rb +2 -2
  9. data/example/https_client_using_hrr.rb +1 -1
  10. data/example/https_client_using_hrr_and_ticket.rb +2 -2
  11. data/example/https_client_using_status_request.rb +2 -2
  12. data/example/https_client_using_ticket.rb +2 -2
  13. data/example/https_server.rb +2 -2
  14. data/interop/client_spec.rb +6 -6
  15. data/interop/server_spec.rb +6 -6
  16. data/lib/tttls1.3/client.rb +106 -65
  17. data/lib/tttls1.3/connection.rb +43 -30
  18. data/lib/tttls1.3/cryptograph/aead.rb +20 -7
  19. data/lib/tttls1.3/cryptograph.rb +1 -1
  20. data/lib/tttls1.3/message/alert.rb +2 -2
  21. data/lib/tttls1.3/message/client_hello.rb +1 -0
  22. data/lib/tttls1.3/message/compressed_certificate.rb +82 -0
  23. data/lib/tttls1.3/message/extension/alpn.rb +5 -2
  24. data/lib/tttls1.3/message/extension/compress_certificate.rb +58 -0
  25. data/lib/tttls1.3/message/extension/signature_algorithms.rb +15 -5
  26. data/lib/tttls1.3/message/extension/signature_algorithms_cert.rb +5 -4
  27. data/lib/tttls1.3/message/extension/supported_groups.rb +2 -2
  28. data/lib/tttls1.3/message/extensions.rb +31 -18
  29. data/lib/tttls1.3/message/record.rb +28 -16
  30. data/lib/tttls1.3/message.rb +23 -21
  31. data/lib/tttls1.3/server.rb +88 -37
  32. data/lib/tttls1.3/transcript.rb +3 -7
  33. data/lib/tttls1.3/version.rb +1 -1
  34. data/spec/client_spec.rb +28 -19
  35. data/spec/compress_certificate_spec.rb +54 -0
  36. data/spec/connection_spec.rb +22 -15
  37. data/spec/extensions_spec.rb +16 -0
  38. data/spec/fixtures/rsa_rsa.crt +15 -15
  39. data/spec/fixtures/rsa_rsa.key +25 -25
  40. data/spec/key_schedule_spec.rb +48 -25
  41. data/spec/record_spec.rb +2 -2
  42. data/spec/server_hello_spec.rb +1 -1
  43. data/spec/server_spec.rb +23 -11
  44. data/spec/signature_algorithms_cert_spec.rb +4 -0
  45. data/spec/signature_algorithms_spec.rb +4 -0
  46. data/spec/spec_helper.rb +4 -0
  47. data/spec/transcript_spec.rb +34 -20
  48. data/tttls1.3.gemspec +0 -1
  49. metadata +11 -7
  50. data/.github/workflows/main.yml +0 -25
@@ -6,15 +6,22 @@ require_relative 'spec_helper'
6
6
  RSpec.describe KeySchedule do
7
7
  context 'key_schedule, Simple 1-RTT Handshake,' do
8
8
  let(:key_schedule) do
9
+ ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
10
+ sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
11
+ ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
12
+ ct = Certificate.deserialize(TESTBINARY_CERTIFICATE)
13
+ cv = CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
14
+ sf = Finished.deserialize(TESTBINARY_SERVER_FINISHED)
15
+ cf = Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
9
16
  transcript = Transcript.new
10
17
  transcript.merge!(
11
- CH => ClientHello.deserialize(TESTBINARY_CLIENT_HELLO),
12
- SH => ServerHello.deserialize(TESTBINARY_SERVER_HELLO),
13
- EE => EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS),
14
- CT => Certificate.deserialize(TESTBINARY_CERTIFICATE),
15
- CV => CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY),
16
- SF => Finished.deserialize(TESTBINARY_SERVER_FINISHED),
17
- CF => Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
18
+ CH => [ch, TESTBINARY_CLIENT_HELLO],
19
+ SH => [sh, TESTBINARY_SERVER_HELLO],
20
+ EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
21
+ CT => [ct, TESTBINARY_CERTIFICATE],
22
+ CV => [cv, TESTBINARY_CERTIFICATE_VERIFY],
23
+ SF => [sf, TESTBINARY_SERVER_FINISHED],
24
+ CF => [cf, TESTBINARY_CLIENT_FINISHED]
18
25
  )
19
26
  KeySchedule.new(shared_secret: TESTBINARY_SHARED_SECRET,
20
27
  cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
@@ -77,15 +84,22 @@ RSpec.describe KeySchedule do
77
84
 
78
85
  context 'key_schedule, Resumed 0-RTT Handshake,' do
79
86
  let(:key_schedule) do
87
+ ch = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
88
+ sh = ServerHello.deserialize(TESTBINARY_0_RTT_SERVER_HELLO)
89
+ ee = EncryptedExtensions.deserialize(
90
+ TESTBINARY_0_RTT_ENCRYPTED_EXTENSIONS
91
+ )
92
+ sf = Finished.deserialize(TESTBINARY_0_RTT_SERVER_FINISHED)
93
+ eoed = EndOfEarlyData.deserialize(TESTBINARY_0_RTT_END_OF_EARLY_DATA)
94
+ cf = Finished.deserialize(TESTBINARY_0_RTT_CLIENT_FINISHED)
80
95
  transcript = Transcript.new
81
96
  transcript.merge!(
82
- CH => ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO),
83
- SH => ServerHello.deserialize(TESTBINARY_0_RTT_SERVER_HELLO),
84
- EE =>
85
- EncryptedExtensions.deserialize(TESTBINARY_0_RTT_ENCRYPTED_EXTENSIONS),
86
- SF => Finished.deserialize(TESTBINARY_0_RTT_SERVER_FINISHED),
87
- EOED => EndOfEarlyData.deserialize(TESTBINARY_0_RTT_END_OF_EARLY_DATA),
88
- CF => Finished.deserialize(TESTBINARY_0_RTT_CLIENT_FINISHED)
97
+ CH => [ch, TESTBINARY_0_RTT_CLIENT_HELLO],
98
+ SH => [sh, TESTBINARY_0_RTT_SERVER_HELLO],
99
+ EE => [ee, TESTBINARY_0_RTT_ENCRYPTED_EXTENSIONS],
100
+ SF => [sf, TESTBINARY_0_RTT_SERVER_FINISHED],
101
+ EOED => [eoed, TESTBINARY_0_RTT_END_OF_EARLY_DATA],
102
+ CF => [cf, TESTBINARY_0_RTT_CLIENT_FINISHED]
89
103
  )
90
104
  KeySchedule.new(psk: TESTBINARY_0_RTT_PSK,
91
105
  shared_secret: TESTBINARY_0_RTT_SHARED_SECRET,
@@ -111,8 +125,9 @@ RSpec.describe KeySchedule do
111
125
  context 'key_schedule, Resumed 0-RTT Handshake, ' \
112
126
  'not negotiated shared_secret yet,' do
113
127
  let(:key_schedule) do
128
+ ch = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
114
129
  transcript = Transcript.new
115
- transcript[CH] = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
130
+ transcript[CH] = [ch, TESTBINARY_0_RTT_CLIENT_HELLO]
116
131
  KeySchedule.new(psk: TESTBINARY_0_RTT_PSK,
117
132
  shared_secret: nil,
118
133
  cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
@@ -139,18 +154,26 @@ RSpec.describe KeySchedule do
139
154
 
140
155
  context 'key_schedule, HelloRetryRequest,' do
141
156
  let(:key_schedule) do
157
+ ch1 = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1)
158
+ hrr = ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST)
159
+ ch = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO)
160
+ sh = ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO)
161
+ ee = EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS)
162
+ ct = Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE)
163
+ cv = CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY)
164
+ sf = Finished.deserialize(TESTBINARY_HRR_SERVER_FINISHED)
165
+ cf = Finished.deserialize(TESTBINARY_HRR_CLIENT_FINISHED)
142
166
  transcript = Transcript.new
143
167
  transcript.merge!(
144
- CH1 => ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1),
145
- HRR => ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST),
146
- CH => ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO),
147
- SH => ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO),
148
- EE =>
149
- EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS),
150
- CT => Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE),
151
- CV => CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY),
152
- SF => Finished.deserialize(TESTBINARY_HRR_SERVER_FINISHED),
153
- CF => Finished.deserialize(TESTBINARY_HRR_CLIENT_FINISHED)
168
+ CH1 => [ch1, TESTBINARY_HRR_CLIENT_HELLO1],
169
+ HRR => [hrr, TESTBINARY_HRR_HELLO_RETRY_REQUEST],
170
+ CH => [ch, TESTBINARY_HRR_CLIENT_HELLO],
171
+ SH => [sh, TESTBINARY_HRR_SERVER_HELLO],
172
+ EE => [ee, TESTBINARY_HRR_ENCRYPTED_EXTENSIONS],
173
+ CT => [ct, TESTBINARY_HRR_CERTIFICATE],
174
+ CV => [cv, TESTBINARY_HRR_CERTIFICATE_VERIFY],
175
+ SF => [sf, TESTBINARY_HRR_SERVER_FINISHED],
176
+ CF => [cf, TESTBINARY_HRR_CLIENT_FINISHED]
154
177
  )
155
178
  KeySchedule.new(shared_secret: TESTBINARY_HRR_SHARED_SECRET,
156
179
  cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
data/spec/record_spec.rb CHANGED
@@ -30,7 +30,7 @@ RSpec.describe Record do
30
30
 
31
31
  context 'valid record binary' do
32
32
  let(:record) do
33
- Record.deserialize(TESTBINARY_RECORD_CCS, Passer.new)
33
+ Record.deserialize(TESTBINARY_RECORD_CCS, Passer.new).first
34
34
  end
35
35
 
36
36
  it 'should generate valid record header and ChangeCipherSpec' do
@@ -75,7 +75,7 @@ RSpec.describe Record do
75
75
  write_iv: TESTBINARY_SERVER_PARAMETERS_WRITE_IV,
76
76
  sequence_number: SequenceNumber.new
77
77
  )
78
- Record.deserialize(TESTBINARY_SERVER_PARAMETERS_RECORD, cipher)
78
+ Record.deserialize(TESTBINARY_SERVER_PARAMETERS_RECORD, cipher).first
79
79
  end
80
80
 
81
81
  it 'should generate valid record header' do
@@ -187,7 +187,7 @@ RSpec.describe ServerHello do
187
187
  let(:message) do
188
188
  sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
189
189
  extensions = sh.instance_variable_get(:@extensions)
190
- extensions[ExtensionType::SUPPORTED_VERSIONS] = nil
190
+ extensions.delete(ExtensionType::SUPPORTED_VERSIONS)
191
191
  sh.instance_variable_set(:@extensions, extensions)
192
192
  sh
193
193
  end
data/spec/server_spec.rb CHANGED
@@ -14,7 +14,7 @@ RSpec.describe Server do
14
14
  + msg_len.to_uint16 \
15
15
  + TESTBINARY_CLIENT_HELLO)
16
16
  server = Server.new(mock_socket)
17
- server.send(:recv_client_hello, true)
17
+ server.send(:recv_client_hello, true).first
18
18
  end
19
19
 
20
20
  it 'should receive ClientHello' do
@@ -90,12 +90,16 @@ RSpec.describe Server do
90
90
  )
91
91
  end
92
92
 
93
+ let(:ch) do
94
+ ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
95
+ end
96
+
93
97
  let(:server) do
94
98
  Server.new(nil)
95
99
  end
96
100
 
97
101
  it 'should generate Certificate' do
98
- ct = server.send(:gen_certificate, crt)
102
+ ct = server.send(:gen_certificate, crt, ch)
99
103
  expect(ct).to be_a_kind_of(Certificate)
100
104
 
101
105
  certificate_entry = ct.certificate_list.first
@@ -119,12 +123,15 @@ RSpec.describe Server do
119
123
  end
120
124
 
121
125
  let(:transcript) do
126
+ ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
127
+ sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
128
+ ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
122
129
  transcript = Transcript.new
123
130
  transcript.merge!(
124
- CH => ClientHello.deserialize(TESTBINARY_CLIENT_HELLO),
125
- SH => ServerHello.deserialize(TESTBINARY_SERVER_HELLO),
126
- EE => EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS),
127
- CT => ct
131
+ CH => [ch, TESTBINARY_CLIENT_HELLO],
132
+ SH => [sh, TESTBINARY_SERVER_HELLO],
133
+ EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
134
+ CT => [ct, TESTBINARY_CERTIFICATE]
128
135
  )
129
136
  end
130
137
 
@@ -168,13 +175,18 @@ RSpec.describe Server do
168
175
  end
169
176
 
170
177
  let(:transcript) do
178
+ ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
179
+ sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
180
+ ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
181
+ ct = Certificate.deserialize(TESTBINARY_CERTIFICATE)
182
+ cv = CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
171
183
  transcript = Transcript.new
172
184
  transcript.merge!(
173
- CH => ClientHello.deserialize(TESTBINARY_CLIENT_HELLO),
174
- SH => ServerHello.deserialize(TESTBINARY_SERVER_HELLO),
175
- EE => EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS),
176
- CT => Certificate.deserialize(TESTBINARY_CERTIFICATE),
177
- CV => CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
185
+ CH => [ch, TESTBINARY_CLIENT_HELLO],
186
+ SH => [sh, TESTBINARY_SERVER_HELLO],
187
+ EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
188
+ CT => [ct, TESTBINARY_CERTIFICATE],
189
+ CV => [cv, TESTBINARY_CERTIFICATE_VERIFY]
178
190
  )
179
191
  transcript
180
192
  end
@@ -24,6 +24,8 @@ RSpec.describe SignatureAlgorithmsCert do
24
24
  end
25
25
 
26
26
  it 'should be generated' do
27
+ expect(extension).to be_a(SignatureAlgorithmsCert)
28
+
27
29
  expect(extension.extension_type)
28
30
  .to eq ExtensionType::SIGNATURE_ALGORITHMS_CERT
29
31
  expect(extension.supported_signature_algorithms)
@@ -58,6 +60,8 @@ RSpec.describe SignatureAlgorithmsCert do
58
60
  end
59
61
 
60
62
  it 'should generate valid object' do
63
+ expect(extension).to be_a(SignatureAlgorithmsCert)
64
+
61
65
  expect(extension.extension_type)
62
66
  .to eq ExtensionType::SIGNATURE_ALGORITHMS_CERT
63
67
  expect(extension.supported_signature_algorithms)
@@ -24,6 +24,8 @@ RSpec.describe SignatureAlgorithms do
24
24
  end
25
25
 
26
26
  it 'should be generated' do
27
+ expect(extension).to be_a(SignatureAlgorithms)
28
+
27
29
  expect(extension.extension_type).to eq ExtensionType::SIGNATURE_ALGORITHMS
28
30
  expect(extension.supported_signature_algorithms)
29
31
  .to eq supported_signature_algorithms
@@ -76,6 +78,8 @@ RSpec.describe SignatureAlgorithms do
76
78
  end
77
79
 
78
80
  it 'should generate valid object' do
81
+ expect(extension).to be_a(SignatureAlgorithms)
82
+
79
83
  expect(extension.extension_type).to eq ExtensionType::SIGNATURE_ALGORITHMS
80
84
  expect(extension.supported_signature_algorithms)
81
85
  .to eq supported_signature_algorithms
data/spec/spec_helper.rb CHANGED
@@ -163,6 +163,10 @@ BIN
163
163
 
164
164
  TESTBINARY_EARLY_DATA_INDICATION_CH = ''
165
165
 
166
+ TESTBINARY_COMPRESS_CERTIFICATE = <<BIN.split.map(&:hex).map(&:chr).join
167
+ 02 00 01
168
+ BIN
169
+
166
170
  # https://tools.ietf.org/html/rfc8448#section-3
167
171
  # 2. Private Keys
168
172
  TESTBINARY_PKEY_MODULUS = <<BIN.split.map(&:hex).map(&:chr).join
@@ -6,15 +6,22 @@ require_relative 'spec_helper'
6
6
  RSpec.describe Transcript do
7
7
  context 'transcript, not including HRR,' do
8
8
  let(:transcript) do
9
+ ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
10
+ sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
11
+ ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
12
+ ct = Certificate.deserialize(TESTBINARY_CERTIFICATE)
13
+ cv = CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
14
+ sf = Finished.deserialize(TESTBINARY_SERVER_FINISHED)
15
+ cf = Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
9
16
  t = Transcript.new
10
17
  t.merge!(
11
- CH => ClientHello.deserialize(TESTBINARY_CLIENT_HELLO),
12
- SH => ServerHello.deserialize(TESTBINARY_SERVER_HELLO),
13
- EE => EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS),
14
- CT => Certificate.deserialize(TESTBINARY_CERTIFICATE),
15
- CV => CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY),
16
- SF => Finished.deserialize(TESTBINARY_SERVER_FINISHED),
17
- CF => Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
18
+ CH => [ch, TESTBINARY_CLIENT_HELLO],
19
+ SH => [sh, TESTBINARY_SERVER_HELLO],
20
+ EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
21
+ CT => [ct, TESTBINARY_CERTIFICATE],
22
+ CV => [cv, TESTBINARY_CERTIFICATE_VERIFY],
23
+ SF => [sf, TESTBINARY_SERVER_FINISHED],
24
+ CF => [cf, TESTBINARY_CLIENT_FINISHED]
18
25
  )
19
26
  end
20
27
 
@@ -26,18 +33,26 @@ RSpec.describe Transcript do
26
33
 
27
34
  context 'transcript, including HRR,' do
28
35
  let(:transcript) do
36
+ ch1 = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1)
37
+ hrr = ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST)
38
+ ch = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO)
39
+ sh = ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO)
40
+ ee = EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS)
41
+ ct = Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE)
42
+ cv = CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY)
43
+ sf = Finished.deserialize(TESTBINARY_HRR_SERVER_FINISHED)
44
+ cf = Finished.deserialize(TESTBINARY_HRR_CLIENT_FINISHED)
29
45
  t = Transcript.new
30
46
  t.merge!(
31
- CH1 => ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1),
32
- HRR => ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST),
33
- CH => ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO),
34
- SH => ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO),
35
- EE =>
36
- EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS),
37
- CT => Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE),
38
- CV => CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY),
39
- SF => Finished.deserialize(TESTBINARY_HRR_SERVER_FINISHED),
40
- CF => Finished.deserialize(TESTBINARY_HRR_CLIENT_FINISHED)
47
+ CH1 => [ch1, TESTBINARY_HRR_CLIENT_HELLO1],
48
+ HRR => [hrr, TESTBINARY_HRR_HELLO_RETRY_REQUEST],
49
+ CH => [ch, TESTBINARY_HRR_CLIENT_HELLO],
50
+ SH => [sh, TESTBINARY_HRR_SERVER_HELLO],
51
+ EE => [ee, TESTBINARY_HRR_ENCRYPTED_EXTENSIONS],
52
+ CT => [ct, TESTBINARY_HRR_CERTIFICATE],
53
+ CV => [cv, TESTBINARY_HRR_CERTIFICATE_VERIFY],
54
+ SF => [sf, TESTBINARY_HRR_SERVER_FINISHED],
55
+ CF => [cf, TESTBINARY_HRR_CLIENT_FINISHED]
41
56
  )
42
57
  end
43
58
 
@@ -51,10 +66,9 @@ RSpec.describe Transcript do
51
66
 
52
67
  context 'transcript, Resumed 0-RTT Handshake,' do
53
68
  let(:transcript) do
69
+ ch = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
54
70
  t = Transcript.new
55
- t.merge!(
56
- CH => ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
57
- )
71
+ t.merge!(CH => [ch, TESTBINARY_0_RTT_CLIENT_HELLO])
58
72
  end
59
73
 
60
74
  let(:hash_len) do
data/tttls1.3.gemspec CHANGED
@@ -16,7 +16,6 @@ Gem::Specification.new do |spec|
16
16
  spec.required_ruby_version = '>=2.6.1'
17
17
 
18
18
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
20
  spec.require_paths = ['lib']
22
21
 
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.12
4
+ version: 0.2.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekuwayama
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-04 00:00:00.000000000 Z
11
+ date: 2021-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,7 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ".github/workflows/main.yml"
62
+ - ".github/workflows/ci.yml"
63
63
  - ".gitignore"
64
64
  - ".rspec"
65
65
  - ".rubocop.yml"
@@ -96,9 +96,11 @@ files:
96
96
  - lib/tttls1.3/message/certificate_verify.rb
97
97
  - lib/tttls1.3/message/change_cipher_spec.rb
98
98
  - lib/tttls1.3/message/client_hello.rb
99
+ - lib/tttls1.3/message/compressed_certificate.rb
99
100
  - lib/tttls1.3/message/encrypted_extensions.rb
100
101
  - lib/tttls1.3/message/end_of_early_data.rb
101
102
  - lib/tttls1.3/message/extension/alpn.rb
103
+ - lib/tttls1.3/message/extension/compress_certificate.rb
102
104
  - lib/tttls1.3/message/extension/cookie.rb
103
105
  - lib/tttls1.3/message/extension/early_data_indication.rb
104
106
  - lib/tttls1.3/message/extension/key_share.rb
@@ -134,6 +136,7 @@ files:
134
136
  - spec/cipher_suites_spec.rb
135
137
  - spec/client_hello_spec.rb
136
138
  - spec/client_spec.rb
139
+ - spec/compress_certificate_spec.rb
137
140
  - spec/connection_spec.rb
138
141
  - spec/cookie_spec.rb
139
142
  - spec/early_data_indication_spec.rb
@@ -179,7 +182,7 @@ homepage: https://github.com/thekuwayama/tttls1.3
179
182
  licenses:
180
183
  - MIT
181
184
  metadata: {}
182
- post_install_message:
185
+ post_install_message:
183
186
  rdoc_options: []
184
187
  require_paths:
185
188
  - lib
@@ -194,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
197
  - !ruby/object:Gem::Version
195
198
  version: '0'
196
199
  requirements: []
197
- rubygems_version: 3.0.3
198
- signing_key:
200
+ rubygems_version: 3.2.22
201
+ signing_key:
199
202
  specification_version: 4
200
203
  summary: TLS 1.3 implementation in Ruby (Tiny Trial TLS1.3 aka tttls1.3)
201
204
  test_files:
@@ -209,6 +212,7 @@ test_files:
209
212
  - spec/cipher_suites_spec.rb
210
213
  - spec/client_hello_spec.rb
211
214
  - spec/client_spec.rb
215
+ - spec/compress_certificate_spec.rb
212
216
  - spec/connection_spec.rb
213
217
  - spec/cookie_spec.rb
214
218
  - spec/early_data_indication_spec.rb
@@ -1,25 +0,0 @@
1
- name: workflow
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- pull_request:
8
- branches:
9
- - '*'
10
-
11
- jobs:
12
- ci:
13
- runs-on: ubuntu-latest
14
- steps:
15
- - uses: actions/checkout@v1
16
- - uses: actions/setup-ruby@v1
17
- - uses: thekuwayama/openssl@master
18
- with:
19
- ruby-version: '2.6.x'
20
- - run: gem install bundler
21
- - run: bundle install
22
- - run: docker pull thekuwayama/openssl
23
- - run: bundle exec rake
24
- - run: bundle exec rake interop:client
25
- - run: bundle exec rake interop:server