tttls1.3 0.3.6 → 0.3.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/lib/tttls1.3/version.rb +1 -1
  4. data/lib/tttls1.3.rb +1 -0
  5. data/tttls1.3.gemspec +5 -2
  6. metadata +3 -113
  7. data/.github/workflows/ci.yml +0 -39
  8. data/.gitignore +0 -17
  9. data/spec/aead_spec.rb +0 -95
  10. data/spec/alert_spec.rb +0 -54
  11. data/spec/alpn_spec.rb +0 -55
  12. data/spec/application_data_spec.rb +0 -26
  13. data/spec/certificate_spec.rb +0 -82
  14. data/spec/certificate_verify_spec.rb +0 -51
  15. data/spec/change_cipher_spec_spec.rb +0 -26
  16. data/spec/cipher_suites_spec.rb +0 -39
  17. data/spec/client_hello_spec.rb +0 -105
  18. data/spec/client_spec.rb +0 -274
  19. data/spec/compress_certificate_spec.rb +0 -54
  20. data/spec/cookie_spec.rb +0 -98
  21. data/spec/early_data_indication_spec.rb +0 -64
  22. data/spec/ech_outer_extensions_spec.rb +0 -42
  23. data/spec/ech_spec.rb +0 -122
  24. data/spec/encrypted_extensions_spec.rb +0 -94
  25. data/spec/end_of_early_data_spec.rb +0 -28
  26. data/spec/endpoint_spec.rb +0 -167
  27. data/spec/error_spec.rb +0 -18
  28. data/spec/extensions_spec.rb +0 -250
  29. data/spec/finished_spec.rb +0 -55
  30. data/spec/fixtures/rsa_ca.crt +0 -18
  31. data/spec/fixtures/rsa_ca.key +0 -27
  32. data/spec/fixtures/rsa_rsa.crt +0 -18
  33. data/spec/fixtures/rsa_rsa.key +0 -27
  34. data/spec/fixtures/rsa_rsa_ocsp.crt +0 -18
  35. data/spec/fixtures/rsa_rsa_ocsp.key +0 -27
  36. data/spec/fixtures/rsa_rsassaPss.crt +0 -20
  37. data/spec/fixtures/rsa_rsassaPss.key +0 -27
  38. data/spec/fixtures/rsa_secp256r1.crt +0 -14
  39. data/spec/fixtures/rsa_secp256r1.key +0 -5
  40. data/spec/fixtures/rsa_secp384r1.crt +0 -14
  41. data/spec/fixtures/rsa_secp384r1.key +0 -6
  42. data/spec/fixtures/rsa_secp521r1.crt +0 -15
  43. data/spec/fixtures/rsa_secp521r1.key +0 -7
  44. data/spec/key_schedule_spec.rb +0 -221
  45. data/spec/key_share_spec.rb +0 -199
  46. data/spec/new_session_ticket_spec.rb +0 -80
  47. data/spec/pre_shared_key_spec.rb +0 -167
  48. data/spec/psk_key_exchange_modes_spec.rb +0 -45
  49. data/spec/record_size_limit_spec.rb +0 -61
  50. data/spec/record_spec.rb +0 -105
  51. data/spec/server_hello_spec.rb +0 -200
  52. data/spec/server_name_spec.rb +0 -110
  53. data/spec/server_spec.rb +0 -232
  54. data/spec/signature_algorithms_cert_spec.rb +0 -77
  55. data/spec/signature_algorithms_spec.rb +0 -104
  56. data/spec/spec_helper.rb +0 -990
  57. data/spec/status_request_spec.rb +0 -140
  58. data/spec/supported_groups_spec.rb +0 -79
  59. data/spec/supported_versions_spec.rb +0 -136
  60. data/spec/transcript_spec.rb +0 -83
  61. data/spec/unknown_extension_spec.rb +0 -90
  62. data/spec/utils_spec.rb +0 -235
@@ -1,105 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe ClientHello do
8
- context 'default client_hello' do
9
- let(:random) do
10
- OpenSSL::Random.random_bytes(32)
11
- end
12
-
13
- let(:legacy_session_id) do
14
- Array.new(32, 0).map(&:chr).join
15
- end
16
-
17
- let(:cipher_suites) do
18
- CipherSuites.new([TLS_AES_256_GCM_SHA384,
19
- TLS_CHACHA20_POLY1305_SHA256,
20
- TLS_AES_128_GCM_SHA256])
21
- end
22
-
23
- let(:message) do
24
- ClientHello.new(random:,
25
- legacy_session_id:,
26
- cipher_suites:)
27
- end
28
-
29
- it 'should be generated' do
30
- expect(message.msg_type).to eq HandshakeType::CLIENT_HELLO
31
- expect(message.legacy_version).to eq ProtocolVersion::TLS_1_2
32
- expect(message.random).to eq random
33
- expect(message.legacy_session_id).to eq legacy_session_id
34
- expect(message.cipher_suites).to eq [TLS_AES_256_GCM_SHA384,
35
- TLS_CHACHA20_POLY1305_SHA256,
36
- TLS_AES_128_GCM_SHA256]
37
- expect(message.legacy_compression_methods).to eq ["\x00"]
38
- expect(message.extensions).to be_empty
39
- expect(message.negotiated_tls_1_3?).to be false
40
- expect(message.ch_inner?).to be false
41
- end
42
-
43
- it 'should be serialized' do
44
- expect(message.serialize).to eq HandshakeType::CLIENT_HELLO \
45
- + 79.to_uint24 \
46
- + ProtocolVersion::TLS_1_2 \
47
- + random \
48
- + legacy_session_id.length.to_uint8 \
49
- + legacy_session_id \
50
- + cipher_suites.serialize \
51
- + "\x01\x00" \
52
- + Extensions.new.serialize
53
- end
54
- end
55
-
56
- context 'valid client_hello binary' do
57
- let(:message) do
58
- ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
59
- end
60
-
61
- it 'should generate valid object' do
62
- expect(message.msg_type).to eq HandshakeType::CLIENT_HELLO
63
- expect(message.legacy_version).to eq ProtocolVersion::TLS_1_2
64
- expect(message.negotiated_tls_1_3?).to be true
65
- end
66
-
67
- it 'should generate valid serializable object' do
68
- expect(message.serialize).to eq TESTBINARY_CLIENT_HELLO
69
- end
70
- end
71
-
72
- context 'valid client_hello binary, 0-RTT,' do
73
- let(:message) do
74
- ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
75
- end
76
-
77
- it 'should generate valid object' do
78
- expect(message.msg_type).to eq HandshakeType::CLIENT_HELLO
79
- expect(message.legacy_version).to eq ProtocolVersion::TLS_1_2
80
- expect(message.negotiated_tls_1_3?).to be true
81
- end
82
-
83
- it 'should generate valid serializable object' do
84
- expect(message.serialize).to eq TESTBINARY_0_RTT_CLIENT_HELLO
85
- end
86
- end
87
-
88
- context 'valid inner client_hello' do
89
- let(:message) do
90
- cipher_suites = CipherSuites.new([TLS_AES_256_GCM_SHA384,
91
- TLS_CHACHA20_POLY1305_SHA256,
92
- TLS_AES_128_GCM_SHA256])
93
- ch = ClientHello.new(random: OpenSSL::Random.random_bytes(32),
94
- legacy_session_id: Array.new(32, 0).map(&:chr).join,
95
- cipher_suites:)
96
- ch.extensions[Message::ExtensionType::ENCRYPTED_CLIENT_HELLO] \
97
- = Message::Extension::ECHClientHello.new_inner
98
- ch
99
- end
100
-
101
- it 'should generate ClientHelloInner' do
102
- expect(message.ch_inner?).to be true
103
- end
104
- end
105
- end
data/spec/client_spec.rb DELETED
@@ -1,274 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe Client do
8
- context 'client' do
9
- let(:record) do
10
- mock_socket = SimpleStream.new
11
- client = Client.new(mock_socket, 'localhost')
12
- extensions, _priv_keys = client.send(:gen_ch_extensions)
13
- client.send(:send_client_hello, extensions)
14
- Record.deserialize(mock_socket.read, Cryptograph::Passer.new).first
15
- end
16
-
17
- it 'should send default ClientHello' do
18
- expect(record.type).to eq ContentType::HANDSHAKE
19
-
20
- message = record.messages.first
21
- expect(message.msg_type).to eq HandshakeType::CLIENT_HELLO
22
- expect(message.legacy_version).to eq ProtocolVersion::TLS_1_2
23
- expect(message.cipher_suites)
24
- .to eq [CipherSuite::TLS_AES_256_GCM_SHA384,
25
- CipherSuite::TLS_CHACHA20_POLY1305_SHA256,
26
- CipherSuite::TLS_AES_128_GCM_SHA256]
27
- expect(message.legacy_compression_methods).to eq ["\x00"]
28
- end
29
- end
30
-
31
- context 'client' do
32
- let(:message) do
33
- msg_len = TESTBINARY_SERVER_HELLO.length
34
- mock_socket = SimpleStream.new
35
- mock_socket.write(ContentType::HANDSHAKE \
36
- + ProtocolVersion::TLS_1_2 \
37
- + msg_len.to_uint16 \
38
- + TESTBINARY_SERVER_HELLO)
39
- client = Client.new(mock_socket, 'localhost')
40
- client.send(:recv_server_hello).first
41
- end
42
-
43
- it 'should receive ServerHello' do
44
- expect(message.msg_type).to eq HandshakeType::SERVER_HELLO
45
- expect(message.legacy_version).to eq ProtocolVersion::TLS_1_2
46
- expect(message.cipher_suite).to eq CipherSuite::TLS_AES_128_GCM_SHA256
47
- expect(message.legacy_compression_method).to eq "\x00"
48
- end
49
- end
50
-
51
- context 'client' do
52
- let(:client) do
53
- mock_socket = SimpleStream.new
54
- mock_socket.write(TESTBINARY_SERVER_PARAMETERS_RECORD)
55
- Client.new(mock_socket, 'localhost')
56
- end
57
-
58
- let(:cipher) do
59
- Cryptograph::Aead.new(
60
- cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
61
- write_key: TESTBINARY_SERVER_PARAMETERS_WRITE_KEY,
62
- write_iv: TESTBINARY_SERVER_PARAMETERS_WRITE_IV,
63
- sequence_number: SequenceNumber.new
64
- )
65
- end
66
-
67
- it 'should receive EncryptedExtensions' do
68
- message, = client.send(:recv_encrypted_extensions, cipher)
69
- expect(message.msg_type).to eq HandshakeType::ENCRYPTED_EXTENSIONS
70
- end
71
-
72
- it 'should receive Certificate' do
73
- client.send(:recv_encrypted_extensions, cipher) # to skip
74
- message, = client.send(:recv_certificate, cipher)
75
- expect(message.msg_type).to eq HandshakeType::CERTIFICATE
76
- end
77
-
78
- it 'should receive CertificateVerify' do
79
- client.send(:recv_encrypted_extensions, cipher) # to skip
80
- client.send(:recv_certificate, cipher) # to skip
81
- message, = client.send(:recv_certificate_verify, cipher)
82
- expect(message.msg_type).to eq HandshakeType::CERTIFICATE_VERIFY
83
- end
84
-
85
- it 'should receive Finished' do
86
- client.send(:recv_encrypted_extensions, cipher) # to skip
87
- client.send(:recv_certificate, cipher) # to skip
88
- client.send(:recv_certificate_verify, cipher) # to skip
89
- message, = client.send(:recv_finished, cipher)
90
- expect(message.msg_type).to eq HandshakeType::FINISHED
91
- end
92
- end
93
-
94
- context 'client' do
95
- let(:cipher_suite) do
96
- CipherSuite::TLS_AES_128_GCM_SHA256
97
- end
98
-
99
- let(:transcript) do
100
- ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
101
- sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
102
- ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
103
- ct = Certificate.deserialize(TESTBINARY_CERTIFICATE)
104
- cv = CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
105
- sf = Finished.deserialize(TESTBINARY_SERVER_FINISHED)
106
- transcript = Transcript.new
107
- transcript.merge!(
108
- CH => [ch, TESTBINARY_CLIENT_HELLO],
109
- SH => [sh, TESTBINARY_SERVER_HELLO],
110
- EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
111
- CT => [ct, TESTBINARY_CERTIFICATE],
112
- CV => [cv, TESTBINARY_CERTIFICATE_VERIFY],
113
- SF => [sf, TESTBINARY_SERVER_FINISHED]
114
- )
115
- transcript
116
- end
117
-
118
- let(:finished_key) do
119
- key_schedule = KeySchedule.new(
120
- shared_secret: TESTBINARY_SHARED_SECRET,
121
- cipher_suite:,
122
- transcript:
123
- )
124
- key_schedule.client_finished_key
125
- end
126
-
127
- let(:record) do
128
- mock_socket = SimpleStream.new
129
- client = Client.new(mock_socket, 'localhost')
130
- digest = CipherSuite.digest(cipher_suite)
131
- hash = transcript.hash(digest, EOED)
132
- signature = Endpoint.sign_finished(
133
- digest:,
134
- finished_key:,
135
- hash:
136
- )
137
- hs_wcipher = Cryptograph::Aead.new(
138
- cipher_suite:,
139
- write_key: TESTBINARY_CLIENT_FINISHED_WRITE_KEY,
140
- write_iv: TESTBINARY_CLIENT_FINISHED_WRITE_IV,
141
- sequence_number: SequenceNumber.new
142
- )
143
- client.send(:send_finished, signature, hs_wcipher)
144
- hs_rcipher = Cryptograph::Aead.new(
145
- cipher_suite:,
146
- write_key: TESTBINARY_CLIENT_FINISHED_WRITE_KEY,
147
- write_iv: TESTBINARY_CLIENT_FINISHED_WRITE_IV,
148
- sequence_number: SequenceNumber.new
149
- )
150
- Record.deserialize(mock_socket.read, hs_rcipher).first
151
- end
152
-
153
- it 'should send Finished' do
154
- expect(record.type).to eq ContentType::APPLICATION_DATA
155
-
156
- message = record.messages.first
157
- expect(message.msg_type).to eq HandshakeType::FINISHED
158
- expect(message.serialize).to eq TESTBINARY_CLIENT_FINISHED
159
- end
160
- end
161
-
162
- context 'client' do
163
- let(:cipher_suite) do
164
- CipherSuite::TLS_AES_128_GCM_SHA256
165
- end
166
-
167
- let(:ct) do
168
- Certificate.deserialize(TESTBINARY_CERTIFICATE)
169
- end
170
-
171
- let(:cv) do
172
- CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
173
- end
174
-
175
- let(:sf) do
176
- Finished.deserialize(TESTBINARY_SERVER_FINISHED)
177
- end
178
-
179
- let(:transcript) do
180
- ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
181
- sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
182
- ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
183
- transcript = Transcript.new
184
- transcript.merge!(
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],
190
- SF => [sf, TESTBINARY_SERVER_FINISHED]
191
- )
192
- end
193
-
194
- let(:key_schedule) do
195
- KeySchedule.new(
196
- shared_secret: TESTBINARY_SHARED_SECRET,
197
- cipher_suite:,
198
- transcript:
199
- )
200
- end
201
-
202
- let(:client) do
203
- Client.new(nil, 'localhost')
204
- end
205
-
206
- let(:cf) do
207
- Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
208
- end
209
-
210
- it 'should verify server CertificateVerify' do
211
- hash = transcript.hash(CipherSuite.digest(cipher_suite), CT)
212
- expect(client.send(:verified_certificate_verify?, ct, cv, hash))
213
- .to be true
214
- end
215
-
216
- it 'should verify server Finished' do
217
- digest = CipherSuite.digest(cipher_suite)
218
- hash = transcript.hash(digest, CV)
219
- expect(Endpoint.verified_finished?(
220
- finished: sf,
221
- digest:,
222
- finished_key: key_schedule.server_finished_key,
223
- hash:
224
- )).to be true
225
- end
226
-
227
- it 'should sign client Finished' do
228
- digest = CipherSuite.digest(cipher_suite)
229
- hash = transcript.hash(digest, EOED)
230
- expect(Endpoint.sign_finished(
231
- digest:,
232
- finished_key: key_schedule.client_finished_key,
233
- hash:
234
- )).to eq cf.verify_data
235
- end
236
- end
237
-
238
- context 'client, received Certificate signed by private CA,' do
239
- let(:certificate) do
240
- server_crt = OpenSSL::X509::Certificate.new(
241
- File.read(__dir__ + '/fixtures/rsa_rsa.crt')
242
- )
243
- Certificate.new(certificate_list: [CertificateEntry.new(server_crt)])
244
- end
245
-
246
- it 'should not certify certificate' do
247
- expect(Endpoint.trusted_certificate?(certificate.certificate_list))
248
- .to be false
249
- end
250
-
251
- it 'should certify certificate, received path to private ca.crt' do
252
- expect(Endpoint.trusted_certificate?(
253
- certificate.certificate_list,
254
- __dir__ + '/fixtures/rsa_ca.crt'
255
- )).to be true
256
- end
257
- end
258
-
259
- context 'client using PSK' do
260
- let(:client) do
261
- Client.new(nil, 'localhost')
262
- end
263
-
264
- let(:ticket_nonce) do
265
- nst = NewSessionTicket.deserialize(TESTBINARY_NEW_SESSION_TICKET)
266
- nst.ticket_nonce
267
- end
268
-
269
- it 'should generate PSK from NewSessionTicket of previous handshake' do
270
- expect(client.send(:gen_psk_from_nst, TESTBINARY_RES_MASTER, ticket_nonce,
271
- 'SHA256')).to eq TESTBINARY_0_RTT_PSK
272
- end
273
- end
274
- end
@@ -1,54 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe Alpn do
8
- context 'valid compress_certificate' do
9
- let(:algorithms) do
10
- [CertificateCompressionAlgorithm::ZLIB]
11
- end
12
-
13
- let(:extension) do
14
- CompressCertificate.new(algorithms)
15
- end
16
-
17
- it 'should be generated' do
18
- expect(extension.extension_type)
19
- .to eq ExtensionType::COMPRESS_CERTIFICATE
20
- expect(extension.algorithms).to eq algorithms
21
- end
22
-
23
- it 'should be serialized' do
24
- expect(extension.serialize)
25
- .to eq ExtensionType::COMPRESS_CERTIFICATE \
26
- + 3.to_uint16 \
27
- + 2.to_uint8 \
28
- + "\x00\x01"
29
- end
30
- end
31
-
32
- context 'invalid compress_certificate, empty,' do
33
- let(:extension) do
34
- CompressCertificate.new([])
35
- end
36
-
37
- it 'should not be generated' do
38
- expect { extension }.to raise_error(ErrorAlerts)
39
- end
40
- end
41
-
42
- context 'valid compress_certificate binary' do
43
- let(:extension) do
44
- CompressCertificate.deserialize(TESTBINARY_COMPRESS_CERTIFICATE)
45
- end
46
-
47
- it 'should generate valid object' do
48
- expect(extension.extension_type)
49
- .to eq ExtensionType::COMPRESS_CERTIFICATE
50
- expect(extension.algorithms)
51
- .to eq [CertificateCompressionAlgorithm::ZLIB]
52
- end
53
- end
54
- end
data/spec/cookie_spec.rb DELETED
@@ -1,98 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe Cookie do
8
- context 'valid cookie' do
9
- let(:cookie) do
10
- OpenSSL::Random.random_bytes(2**16 - 3)
11
- end
12
-
13
- let(:extension) do
14
- Cookie.new(cookie)
15
- end
16
-
17
- it 'should be generated' do
18
- expect(extension.extension_type).to eq ExtensionType::COOKIE
19
- expect(extension.cookie).to eq cookie
20
- end
21
-
22
- it 'should be serialized' do
23
- expect(extension.serialize).to eq ExtensionType::COOKIE \
24
- + (2**16 - 1).to_uint16 \
25
- + (2**16 - 3).to_uint16 \
26
- + cookie
27
- end
28
- end
29
-
30
- context 'ignored cookie, empty,' do
31
- let(:extension) do
32
- Cookie.new('')
33
- end
34
-
35
- it 'should be generated' do
36
- expect(extension.extension_type).to eq ExtensionType::COOKIE
37
- expect(extension.cookie).to eq ''
38
- end
39
- end
40
-
41
- context 'ignored cookie, nil,' do
42
- let(:extension) do
43
- Cookie.new(nil)
44
- end
45
-
46
- it 'should not be generated' do
47
- expect(extension.extension_type).to eq ExtensionType::COOKIE
48
- expect(extension.cookie).to eq ''
49
- end
50
- end
51
-
52
- context 'invalid cookie, too long,' do
53
- let(:extension) do
54
- Cookie.new('a' * (2**16 - 2))
55
- end
56
-
57
- it 'should not be generated' do
58
- expect { extension }.to raise_error(ErrorAlerts)
59
- end
60
- end
61
-
62
- context 'valid cookie binary' do
63
- let(:extension) do
64
- Cookie.deserialize(TESTBINARY_COOKIE)
65
- end
66
-
67
- it 'should generate object' do
68
- expect(extension.extension_type).to eq ExtensionType::COOKIE
69
- expect(extension.cookie).to eq TESTBINARY_COOKIE[2..]
70
- end
71
-
72
- it 'should generate serializable object' do
73
- expect(extension.serialize).to eq ExtensionType::COOKIE \
74
- + TESTBINARY_COOKIE.prefix_uint16_length
75
- end
76
- end
77
-
78
- context 'cookie binary, empty,' do
79
- let(:extension) do
80
- Cookie.deserialize("\x00\x00")
81
- end
82
-
83
- it 'should generat object' do
84
- expect(extension.extension_type).to eq ExtensionType::COOKIE
85
- expect(extension.cookie).to eq ''
86
- end
87
- end
88
-
89
- context 'invalid cookie binary, malformed binary,' do
90
- let(:extension) do
91
- Cookie.deserialize(TESTBINARY_COOKIE[0...-1])
92
- end
93
-
94
- it 'should return nil' do
95
- expect(extension).to be nil
96
- end
97
- end
98
- end
@@ -1,64 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe EarlyDataIndication do
8
- context 'valid early_data_indication, NewSessionTicket,' do
9
- let(:extension) do
10
- EarlyDataIndication.new(2**32 - 1)
11
- end
12
-
13
- it 'should be generated' do
14
- expect(extension.extension_type).to eq ExtensionType::EARLY_DATA
15
- expect(extension.max_early_data_size).to eq 2**32 - 1
16
- end
17
-
18
- it 'should be serialized' do
19
- expect(extension.serialize).to eq ExtensionType::EARLY_DATA \
20
- + 4.to_uint16 \
21
- + (2**32 - 1).to_uint32
22
- end
23
- end
24
-
25
- context 'valid early_data_indication, ClientHello or EncryptedExtensions,' do
26
- let(:extension) do
27
- EarlyDataIndication.new(nil)
28
- end
29
-
30
- it 'should be generated' do
31
- expect(extension.extension_type).to eq ExtensionType::EARLY_DATA
32
- expect(extension.max_early_data_size).to be nil
33
- end
34
-
35
- it 'should be serialized' do
36
- expect(extension.serialize).to eq ExtensionType::EARLY_DATA \
37
- + 0.to_uint16
38
- end
39
- end
40
-
41
- context 'valid early_data_indication binary, NewSessionTicket,' do
42
- let(:extension) do
43
- EarlyDataIndication.deserialize(TESTBINARY_EARLY_DATA_INDICATION_NST,
44
- HandshakeType::NEW_SESSION_TICKET)
45
- end
46
-
47
- it 'should generate valid object' do
48
- expect(extension.extension_type).to eq ExtensionType::EARLY_DATA
49
- expect(extension.max_early_data_size).to eq 1024
50
- end
51
- end
52
-
53
- context 'valid early_data_indication binary, ClientHello,' do
54
- let(:extension) do
55
- EarlyDataIndication.deserialize(TESTBINARY_EARLY_DATA_INDICATION_CH,
56
- HandshakeType::CLIENT_HELLO)
57
- end
58
-
59
- it 'should generate valid object' do
60
- expect(extension.extension_type).to eq ExtensionType::EARLY_DATA
61
- expect(extension.max_early_data_size).to be nil
62
- end
63
- end
64
- end
@@ -1,42 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe ECHOuterExtensions do
8
- context 'valid ech_outer_extensions, [key_share]' do
9
- let(:extension) do
10
- ECHOuterExtensions.new([ExtensionType::KEY_SHARE])
11
- end
12
-
13
- it 'should be generated' do
14
- expect(extension.extension_type).to eq ExtensionType::ECH_OUTER_EXTENSIONS
15
- expect(extension.outer_extensions).to eq [ExtensionType::KEY_SHARE]
16
- end
17
-
18
- it 'should be serialized' do
19
- expect(extension.serialize).to eq ExtensionType::ECH_OUTER_EXTENSIONS \
20
- + 3.to_uint16 \
21
- + 2.to_uint8 \
22
- + ExtensionType::KEY_SHARE
23
- end
24
- end
25
-
26
- context 'valid ech_outer_extensions binary' do
27
- let(:extension) do
28
- ECHOuterExtensions.deserialize(TESTBINARY_ECH_OUTER_EXTENSIONS)
29
- end
30
-
31
- it 'should generate valid object' do
32
- expect(extension.extension_type).to be ExtensionType::ECH_OUTER_EXTENSIONS
33
- expect(extension.outer_extensions).to eq [ExtensionType::KEY_SHARE]
34
- end
35
-
36
- it 'should generate serializable object' do
37
- expect(extension.serialize)
38
- .to eq ExtensionType::ECH_OUTER_EXTENSIONS \
39
- + TESTBINARY_ECH_OUTER_EXTENSIONS.prefix_uint16_length
40
- end
41
- end
42
- end