tttls1.3 0.3.5 → 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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +1 -1
  5. data/lib/tttls1.3/client.rb +11 -5
  6. data/lib/tttls1.3/ech.rb +31 -90
  7. data/lib/tttls1.3/message/alert.rb +1 -0
  8. data/lib/tttls1.3/sslkeylogfile.rb +22 -0
  9. data/lib/tttls1.3/version.rb +1 -1
  10. data/lib/tttls1.3.rb +1 -0
  11. data/tttls1.3.gemspec +7 -4
  12. metadata +11 -121
  13. data/.github/workflows/ci.yml +0 -39
  14. data/.gitignore +0 -17
  15. data/spec/aead_spec.rb +0 -95
  16. data/spec/alert_spec.rb +0 -54
  17. data/spec/alpn_spec.rb +0 -55
  18. data/spec/application_data_spec.rb +0 -26
  19. data/spec/certificate_spec.rb +0 -82
  20. data/spec/certificate_verify_spec.rb +0 -51
  21. data/spec/change_cipher_spec_spec.rb +0 -26
  22. data/spec/cipher_suites_spec.rb +0 -39
  23. data/spec/client_hello_spec.rb +0 -105
  24. data/spec/client_spec.rb +0 -274
  25. data/spec/compress_certificate_spec.rb +0 -54
  26. data/spec/cookie_spec.rb +0 -98
  27. data/spec/early_data_indication_spec.rb +0 -64
  28. data/spec/ech_outer_extensions_spec.rb +0 -42
  29. data/spec/ech_spec.rb +0 -122
  30. data/spec/encrypted_extensions_spec.rb +0 -94
  31. data/spec/end_of_early_data_spec.rb +0 -28
  32. data/spec/endpoint_spec.rb +0 -167
  33. data/spec/error_spec.rb +0 -18
  34. data/spec/extensions_spec.rb +0 -250
  35. data/spec/finished_spec.rb +0 -55
  36. data/spec/fixtures/rsa_ca.crt +0 -18
  37. data/spec/fixtures/rsa_ca.key +0 -27
  38. data/spec/fixtures/rsa_rsa.crt +0 -18
  39. data/spec/fixtures/rsa_rsa.key +0 -27
  40. data/spec/fixtures/rsa_rsa_ocsp.crt +0 -18
  41. data/spec/fixtures/rsa_rsa_ocsp.key +0 -27
  42. data/spec/fixtures/rsa_rsassaPss.crt +0 -20
  43. data/spec/fixtures/rsa_rsassaPss.key +0 -27
  44. data/spec/fixtures/rsa_secp256r1.crt +0 -14
  45. data/spec/fixtures/rsa_secp256r1.key +0 -5
  46. data/spec/fixtures/rsa_secp384r1.crt +0 -14
  47. data/spec/fixtures/rsa_secp384r1.key +0 -6
  48. data/spec/fixtures/rsa_secp521r1.crt +0 -15
  49. data/spec/fixtures/rsa_secp521r1.key +0 -7
  50. data/spec/key_schedule_spec.rb +0 -221
  51. data/spec/key_share_spec.rb +0 -199
  52. data/spec/new_session_ticket_spec.rb +0 -80
  53. data/spec/pre_shared_key_spec.rb +0 -167
  54. data/spec/psk_key_exchange_modes_spec.rb +0 -45
  55. data/spec/record_size_limit_spec.rb +0 -61
  56. data/spec/record_spec.rb +0 -105
  57. data/spec/server_hello_spec.rb +0 -200
  58. data/spec/server_name_spec.rb +0 -110
  59. data/spec/server_spec.rb +0 -232
  60. data/spec/signature_algorithms_cert_spec.rb +0 -77
  61. data/spec/signature_algorithms_spec.rb +0 -104
  62. data/spec/spec_helper.rb +0 -990
  63. data/spec/status_request_spec.rb +0 -140
  64. data/spec/supported_groups_spec.rb +0 -79
  65. data/spec/supported_versions_spec.rb +0 -136
  66. data/spec/transcript_spec.rb +0 -83
  67. data/spec/unknown_extension_spec.rb +0 -90
  68. data/spec/utils_spec.rb +0 -235
@@ -1,94 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe EncryptedExtensions do
8
- context 'valid encrypted_extensions' do
9
- let(:server_name) do
10
- ServerName.new('')
11
- end
12
-
13
- let(:supported_groups) do
14
- SupportedGroups.new(
15
- [
16
- NamedGroup::SECP256R1,
17
- NamedGroup::SECP384R1,
18
- NamedGroup::SECP521R1
19
- ]
20
- )
21
- end
22
-
23
- let(:extensions) do
24
- Extensions.new([server_name, supported_groups])
25
- end
26
-
27
- let(:message) do
28
- EncryptedExtensions.new(extensions)
29
- end
30
-
31
- it 'should be generated' do
32
- expect(message.msg_type).to eq HandshakeType::ENCRYPTED_EXTENSIONS
33
- expect(message.extensions).to eq extensions
34
- expect(message.appearable_extensions?).to be true
35
- end
36
-
37
- it 'should be serialized' do
38
- expect(message.serialize)
39
- .to eq HandshakeType::ENCRYPTED_EXTENSIONS \
40
- + extensions.serialize.prefix_uint24_length
41
- end
42
- end
43
-
44
- context 'invalid encrypted_extensions, including forbidden extension type,' do
45
- let(:extensions) do
46
- signature_algorithms \
47
- = SignatureAlgorithms.new([SignatureScheme::ECDSA_SECP256R1_SHA256])
48
- Extensions.new([signature_algorithms])
49
- end
50
-
51
- let(:message) do
52
- EncryptedExtensions.new(extensions)
53
- end
54
-
55
- it 'should be generated' do
56
- expect(message.msg_type).to eq HandshakeType::ENCRYPTED_EXTENSIONS
57
- expect(message.extensions).to eq extensions
58
- expect(message.appearable_extensions?).to be false
59
- end
60
- end
61
-
62
- context 'valid encrypted_extensions, nil argument,' do
63
- let(:message) do
64
- EncryptedExtensions.new(nil)
65
- end
66
-
67
- it 'should be generated' do
68
- expect(message.msg_type).to eq HandshakeType::ENCRYPTED_EXTENSIONS
69
- expect(message.extensions).to eq Extensions.new
70
- expect(message.appearable_extensions?).to be true
71
- end
72
-
73
- it 'should be serialized' do
74
- expect(message.serialize)
75
- .to eq HandshakeType::ENCRYPTED_EXTENSIONS \
76
- + Extensions.new.serialize.prefix_uint24_length
77
- end
78
- end
79
-
80
- context 'valid encrypted_extensions binary' do
81
- let(:message) do
82
- EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
83
- end
84
-
85
- it 'should generate valid object' do
86
- expect(message.msg_type).to eq HandshakeType::ENCRYPTED_EXTENSIONS
87
- expect(message.appearable_extensions?).to be true
88
- end
89
-
90
- it 'should generate valid serializable object' do
91
- expect(message.serialize).to eq TESTBINARY_ENCRYPTED_EXTENSIONS
92
- end
93
- end
94
- end
@@ -1,28 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe EndOfEarlyData do
8
- context 'end_of_early_data' do
9
- let(:message) do
10
- EndOfEarlyData.new
11
- end
12
-
13
- it 'should be serialized' do
14
- expect(message.serialize).to eq HandshakeType::END_OF_EARLY_DATA \
15
- + ''.prefix_uint24_length
16
- end
17
- end
18
-
19
- context 'valid end_of_early_data binary' do
20
- let(:message) do
21
- EndOfEarlyData.deserialize(TESTBINARY_0_RTT_END_OF_EARLY_DATA)
22
- end
23
-
24
- it 'should generate valid serializable object' do
25
- expect(message.serialize).to eq TESTBINARY_0_RTT_END_OF_EARLY_DATA
26
- end
27
- end
28
- end
@@ -1,167 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
-
6
- RSpec.describe Endpoint do
7
- context 'endpoint, Simple 1-RTT Handshake,' do
8
- let(:key) do
9
- n = OpenSSL::BN.new(TESTBINARY_PKEY_MODULUS, 2)
10
- e = OpenSSL::BN.new(TESTBINARY_PKEY_PUBLIC_EXPONENT, 2)
11
- d = OpenSSL::BN.new(TESTBINARY_PKEY_PRIVATE_EXPONENT, 2)
12
- p = OpenSSL::BN.new(TESTBINARY_PKEY_PRIME1, 2)
13
- q = OpenSSL::BN.new(TESTBINARY_PKEY_PRIME2, 2)
14
- dmp1 = d % (p - 1.to_bn)
15
- dmq1 = d % (q - 1.to_bn)
16
- iqmp = q**-1.to_bn % p
17
- asn1 = OpenSSL::ASN1::Sequence(
18
- [
19
- OpenSSL::ASN1::Integer(0),
20
- OpenSSL::ASN1::Integer(n),
21
- OpenSSL::ASN1::Integer(e),
22
- OpenSSL::ASN1::Integer(d),
23
- OpenSSL::ASN1::Integer(p),
24
- OpenSSL::ASN1::Integer(q),
25
- OpenSSL::ASN1::Integer(dmp1),
26
- OpenSSL::ASN1::Integer(dmq1),
27
- OpenSSL::ASN1::Integer(iqmp)
28
- ]
29
- )
30
- OpenSSL::PKey::RSA.new(asn1)
31
- end
32
-
33
- let(:ct) do
34
- Certificate.deserialize(TESTBINARY_CERTIFICATE)
35
- end
36
-
37
- let(:cv) do
38
- CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
39
- end
40
-
41
- let(:cf) do
42
- Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
43
- end
44
-
45
- let(:sf) do
46
- Finished.deserialize(TESTBINARY_SERVER_FINISHED)
47
- end
48
-
49
- let(:transcript) do
50
- ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
51
- sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
52
- ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
53
- transcript = Transcript.new
54
- transcript.merge!(
55
- CH => [ch, TESTBINARY_CLIENT_HELLO],
56
- SH => [sh, TESTBINARY_SERVER_HELLO],
57
- EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
58
- CT => [ct, TESTBINARY_CERTIFICATE],
59
- CV => [cv, TESTBINARY_CERTIFICATE_VERIFY],
60
- CF => [cf, TESTBINARY_CLIENT_FINISHED],
61
- SF => [sf, TESTBINARY_SERVER_FINISHED]
62
- )
63
- end
64
-
65
- let(:digest) do
66
- CipherSuite.digest(CipherSuite::TLS_AES_128_GCM_SHA256)
67
- end
68
-
69
- it 'should verify server CertificateVerify.signature' do
70
- public_key = ct.certificate_list.first.cert_data.public_key
71
- signature_scheme = cv.signature_scheme
72
- signature = cv.signature
73
-
74
- expect(Endpoint.verified_certificate_verify?(
75
- public_key:,
76
- signature_scheme:,
77
- signature:,
78
- context: 'TLS 1.3, server CertificateVerify',
79
- hash: transcript.hash(digest, CT)
80
- )).to be true
81
- end
82
-
83
- it 'should sign client Finished.verify_data' do
84
- expect(Endpoint.sign_finished(
85
- digest: 'SHA256',
86
- finished_key: TESTBINARY_CLIENT_FINISHED_KEY,
87
- hash: transcript.hash(digest, EOED)
88
- )).to eq cf.verify_data
89
- end
90
-
91
- it 'should verify server Finished.verify_data' do
92
- expect(Endpoint.verified_finished?(
93
- finished: sf,
94
- digest: 'SHA256',
95
- finished_key: TESTBINARY_SERVER_FINISHED_KEY,
96
- hash: transcript.hash(digest, CV)
97
- )).to be true
98
- end
99
-
100
- it 'should sign server CertificateVerify.signature' do
101
- public_key = ct.certificate_list.first.cert_data.public_key
102
- signature_scheme = cv.signature_scheme
103
-
104
- # used RSASSA-PSS signature_scheme, salt is a random sequence.
105
- # CertificateVerify.signature is random.
106
- signature = Endpoint.sign_certificate_verify(
107
- key:,
108
- signature_scheme:,
109
- context: 'TLS 1.3, server CertificateVerify',
110
- hash: transcript.hash(digest, CT)
111
- )
112
- expect(Endpoint.verified_certificate_verify?(
113
- public_key:,
114
- signature_scheme:,
115
- signature:,
116
- context: 'TLS 1.3, server CertificateVerify',
117
- hash: transcript.hash(digest, CT)
118
- )).to be true
119
- end
120
- end
121
-
122
- context 'endpoint, HelloRetryRequest,' do
123
- let(:ct) do
124
- Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE)
125
- end
126
-
127
- let(:cv) do
128
- CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY)
129
- end
130
-
131
- let(:transcript) do
132
- ch1 = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1)
133
- hrr = ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST)
134
- ch = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO)
135
- sh = ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO)
136
- ee = EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS)
137
- transcript = Transcript.new
138
- transcript.merge!(
139
- CH1 => [ch1, TESTBINARY_HRR_CLIENT_HELLO1],
140
- HRR => [hrr, TESTBINARY_HRR_HELLO_RETRY_REQUEST],
141
- CH => [ch, TESTBINARY_HRR_CLIENT_HELLO],
142
- SH => [sh, TESTBINARY_HRR_SERVER_HELLO],
143
- EE => [ee, TESTBINARY_HRR_ENCRYPTED_EXTENSIONS],
144
- CT => [ct, TESTBINARY_HRR_CERTIFICATE],
145
- CV => [cv, TESTBINARY_HRR_CERTIFICATE_VERIFY]
146
- )
147
- end
148
-
149
- let(:digest) do
150
- CipherSuite.digest(CipherSuite::TLS_AES_128_GCM_SHA256)
151
- end
152
-
153
- it 'should verify server CertificateVerify.signature' do
154
- public_key = ct.certificate_list.first.cert_data.public_key
155
- signature_scheme = cv.signature_scheme
156
- signature = cv.signature
157
-
158
- expect(Endpoint.verified_certificate_verify?(
159
- public_key:,
160
- signature_scheme:,
161
- signature:,
162
- context: 'TLS 1.3, server CertificateVerify',
163
- hash: transcript.hash(digest, CT)
164
- )).to be true
165
- end
166
- end
167
- end
data/spec/error_spec.rb DELETED
@@ -1,18 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
-
6
- RSpec.describe ErrorAlerts do
7
- let(:error) do
8
- ErrorAlerts.new('unexpected_message')
9
- end
10
-
11
- let(:alert) do
12
- Alert.new(description: ALERT_DESCRIPTION[:unexpected_message])
13
- end
14
-
15
- it 'should return alert' do
16
- expect(error.to_alert.serialize).to eq alert.serialize
17
- end
18
- end
@@ -1,250 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe Extensions do
8
- context 'empty extensions' do
9
- let(:extensions) do
10
- Extensions.new
11
- end
12
-
13
- it 'should be generated' do
14
- expect(extensions).to be_empty
15
- end
16
-
17
- it 'should be serialized' do
18
- expect(extensions.serialize).to eq "\x00\x00"
19
- end
20
- end
21
-
22
- let(:supported_versions) do
23
- SupportedVersions.new(
24
- msg_type: HandshakeType::CLIENT_HELLO,
25
- versions: [ProtocolVersion::TLS_1_3]
26
- )
27
- end
28
-
29
- let(:signature_algorithms) do
30
- SignatureAlgorithms.new([SignatureScheme::RSA_PSS_RSAE_SHA256])
31
- end
32
-
33
- let(:supported_groups) do
34
- SupportedGroups.new([NamedGroup::SECP256R1])
35
- end
36
-
37
- let(:key_share) do
38
- ec = OpenSSL::PKey::EC.generate('prime256v1')
39
- KeyShare.new(
40
- msg_type: HandshakeType::CLIENT_HELLO,
41
- key_share_entry: [
42
- KeyShareEntry.new(
43
- group: NamedGroup::SECP256R1,
44
- key_exchange: ec.public_key.to_octet_string(:uncompressed)
45
- )
46
- ]
47
- )
48
- end
49
-
50
- let(:server_name) do
51
- ServerName.new('example.com')
52
- end
53
-
54
- let(:base_exs) do
55
- [
56
- supported_versions,
57
- signature_algorithms,
58
- supported_groups,
59
- key_share,
60
- server_name
61
- ]
62
- end
63
-
64
- context 'client_hello base extensions' do
65
- let(:extensions) do
66
- Extensions.new(base_exs)
67
- end
68
-
69
- it 'should be generated' do
70
- expect(extensions)
71
- .to include ExtensionType::SUPPORTED_VERSIONS => supported_versions
72
- expect(extensions)
73
- .to include ExtensionType::SIGNATURE_ALGORITHMS => signature_algorithms
74
- expect(extensions)
75
- .to include ExtensionType::SUPPORTED_GROUPS => supported_groups
76
- expect(extensions)
77
- .to include ExtensionType::KEY_SHARE => key_share
78
- expect(extensions)
79
- .to include ExtensionType::SERVER_NAME => server_name
80
- end
81
- end
82
-
83
- context 'extensions that include pre_shared_key' do
84
- let(:pre_shared_key) do
85
- PreSharedKey.deserialize(TESTBINARY_PRE_SHARED_KEY_CH,
86
- HandshakeType::CLIENT_HELLO)
87
- end
88
-
89
- let(:extensions) do
90
- exs = [pre_shared_key] + base_exs
91
- Extensions.new(exs)
92
- end
93
-
94
- it 'should be generated' do
95
- expect(extensions)
96
- .to include ExtensionType::SUPPORTED_VERSIONS => supported_versions
97
- expect(extensions)
98
- .to include ExtensionType::SIGNATURE_ALGORITHMS => signature_algorithms
99
- expect(extensions)
100
- .to include ExtensionType::SUPPORTED_GROUPS => supported_groups
101
- expect(extensions)
102
- .to include ExtensionType::KEY_SHARE => key_share
103
- expect(extensions)
104
- .to include ExtensionType::SERVER_NAME => server_name
105
- expect(extensions)
106
- .to include ExtensionType::PRE_SHARED_KEY => pre_shared_key
107
- end
108
-
109
- it 'should be serialized end with pre_shared_key' do
110
- expect(extensions.serialize).to end_with TESTBINARY_PRE_SHARED_KEY_CH
111
- end
112
- end
113
-
114
- context 'extensions that include GREASE' do
115
- let(:unknown_exs_key_aa) do
116
- "\xaa\xaa"
117
- end
118
-
119
- let(:unknown_exs_key_bb) do
120
- "\xbb\xbb"
121
- end
122
-
123
- let(:grease_aa) do
124
- UnknownExtension.new(extension_type: unknown_exs_key_aa,
125
- extension_data: '')
126
- end
127
-
128
- let(:grease_bb) do
129
- UnknownExtension.new(extension_type: unknown_exs_key_bb,
130
- extension_data: "\x00")
131
- end
132
-
133
- let(:extensions) do
134
- exs = [grease_aa] + base_exs + [grease_bb]
135
- Extensions.new(exs)
136
- end
137
-
138
- it 'should be generated' do
139
- expect(extensions)
140
- .to include ExtensionType::SUPPORTED_VERSIONS => supported_versions
141
- expect(extensions)
142
- .to include ExtensionType::SIGNATURE_ALGORITHMS => signature_algorithms
143
- expect(extensions)
144
- .to include ExtensionType::SUPPORTED_GROUPS => supported_groups
145
- expect(extensions)
146
- .to include ExtensionType::KEY_SHARE => key_share
147
- expect(extensions)
148
- .to include ExtensionType::SERVER_NAME => server_name
149
- # ignore UnknownExtension, so return nil
150
- expect(extensions).to include unknown_exs_key_aa => nil
151
- expect(extensions).to include unknown_exs_key_bb => nil
152
- end
153
- end
154
-
155
- context 'extensions binary' do
156
- let(:extensions) do
157
- Extensions.deserialize(TESTBINARY_EXTENSIONS,
158
- HandshakeType::CLIENT_HELLO)
159
- end
160
-
161
- it 'should generate object' do
162
- expect(extensions).to include ExtensionType::SUPPORTED_GROUPS
163
- expect(extensions).to include ExtensionType::KEY_SHARE
164
- expect(extensions).to include ExtensionType::SUPPORTED_VERSIONS
165
- expect(extensions).to include ExtensionType::SIGNATURE_ALGORITHMS
166
- expect(extensions).to include ExtensionType::PSK_KEY_EXCHANGE_MODES
167
- expect(extensions).to include ExtensionType::RECORD_SIZE_LIMIT
168
- end
169
- end
170
-
171
- context 'duplicated extension_type' do
172
- let(:server_name) do
173
- ServerName.new('example.com')
174
- end
175
-
176
- let(:testbinary) do
177
- server_name.serialize * 2
178
- end
179
-
180
- it 'should raise error, if extension_type get duplicated' do
181
- expect { Extensions.deserialize(testbinary, HandshakeType::CLIENT_HELLO) }
182
- .to raise_error(ErrorAlerts)
183
- end
184
- end
185
-
186
- context 'removing and replacing extensions from EncodedClientHelloInner' do
187
- let(:extensions) do
188
- extensions, = Client.new(nil, 'localhost').send(:gen_ch_extensions)
189
- extensions
190
- end
191
-
192
- let(:no_key_share_exs) do
193
- Extensions.new(
194
- extensions.filter { |k, _| k != ExtensionType::KEY_SHARE }.values
195
- )
196
- end
197
-
198
- it 'should be equal remove_and_replace! with []' do
199
- expected = extensions.clone
200
- got = extensions.remove_and_replace!([])
201
-
202
- expect(got.keys).to eq expected.keys
203
- expect(got[ExtensionType::ECH_OUTER_EXTENSIONS]).to eq nil
204
- expect(extensions.keys - got.keys).to eq []
205
- end
206
-
207
- it 'should be equal remove_and_replace! with [key_share]' do
208
- expected = extensions.filter { |k, _| k != ExtensionType::KEY_SHARE }
209
- expected[ExtensionType::ECH_OUTER_EXTENSIONS] = \
210
- Extension::ECHOuterExtensions.new([ExtensionType::KEY_SHARE])
211
- got = extensions.remove_and_replace!([ExtensionType::KEY_SHARE])
212
-
213
- expect(got.keys).to eq expected.keys
214
- expect(got[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions)
215
- .to eq expected[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions
216
- expect(extensions.keys - got.keys)
217
- .to eq expected[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions
218
- end
219
-
220
- it 'should be equal remove_and_replace! with' \
221
- ' [key_share,supported_versions]' do
222
- outer_extensions = [
223
- ExtensionType::KEY_SHARE,
224
- ExtensionType::SUPPORTED_VERSIONS
225
- ]
226
- expected = extensions.filter { |k, _| !outer_extensions.include?(k) }
227
- expected[ExtensionType::ECH_OUTER_EXTENSIONS] = \
228
- Extension::ECHOuterExtensions.new(
229
- extensions.filter { |k, _| outer_extensions.include?(k) }.keys
230
- )
231
- got = extensions.remove_and_replace!(outer_extensions)
232
-
233
- expect(got.keys).to eq expected.keys
234
- expect(got[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions)
235
- .to eq expected[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions
236
- expect(extensions.keys - got.keys)
237
- .to eq expected[ExtensionType::ECH_OUTER_EXTENSIONS].outer_extensions
238
- end
239
-
240
- it 'should be equal remove_and_replace! with no key_share extensions' \
241
- ' & [key_share]' do
242
- expected = no_key_share_exs.clone
243
- got = no_key_share_exs.remove_and_replace!([ExtensionType::KEY_SHARE])
244
-
245
- expect(got).to eq expected
246
- expect(got[ExtensionType::ECH_OUTER_EXTENSIONS]).to eq nil
247
- expect(no_key_share_exs.keys - got.keys).to eq []
248
- end
249
- end
250
- end
@@ -1,55 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe Finished do
8
- context 'valid finished' do
9
- let(:verify_data) do
10
- OpenSSL::Random.random_bytes(128)
11
- end
12
-
13
- let(:message) do
14
- Finished.new(verify_data)
15
- end
16
-
17
- it 'should be generated' do
18
- expect(message.msg_type).to eq HandshakeType::FINISHED
19
- expect(message.verify_data).to eq verify_data
20
- end
21
-
22
- it 'should be serialized' do
23
- expect(message.serialize).to eq HandshakeType::FINISHED \
24
- + verify_data.prefix_uint24_length
25
- end
26
- end
27
-
28
- context 'valid finished binary' do
29
- let(:message) do
30
- Finished.deserialize(TESTBINARY_SERVER_FINISHED)
31
- end
32
-
33
- it 'should generate valid object' do
34
- expect(message.msg_type).to eq HandshakeType::FINISHED
35
- end
36
-
37
- it 'should generate serializable object' do
38
- expect(message.serialize).to eq TESTBINARY_SERVER_FINISHED
39
- end
40
- end
41
-
42
- context 'valid finished binary' do
43
- let(:message) do
44
- Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
45
- end
46
-
47
- it 'should generate valid object' do
48
- expect(message.msg_type).to eq HandshakeType::FINISHED
49
- end
50
-
51
- it 'should generate serializable object' do
52
- expect(message.serialize).to eq TESTBINARY_CLIENT_FINISHED
53
- end
54
- end
55
- end
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC6TCCAdGgAwIBAgIJAPCDjtGMCXxLMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
3
- BAMMB3Rlc3QtY2EwHhcNMTkwNTI1MDEyOTA1WhcNMjkwNTIyMDEyOTA1WjASMRAw
4
- DgYDVQQDDAd0ZXN0LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
5
- uL67dHTIZa/Lv+q/k2cTdXUyARn8EjKYWyWCSlJ9ixm9og5OudrqtjncVEf7m8N4
6
- cZ4BRztZjHnhFSmaezw79siK1e8/ZtNcKy6cQ6CirmZ7JgHhUTJTWVWqW2k3xp10
7
- Ur+fAUqOqV+v1iYlznbZSFyV9jkOKQd/kJwUSCpcd1KNDgTjeRI7h47ppAss5QdF
8
- 8GSRnqa+z4yar4cc6zEEHFyvO/MES0rGN+wQ/aZ2Q5RC5tOACLsEndyWjiwnUSYX
9
- IpivEAb/MUoSsNN3okhBL9VUzIyhy3oLUcvEzUXrdHgXjkimISE74kOSIEqD/Mgh
10
- YbBOa/7ZZZeXjGu4tfoWpQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
11
- AQH/BAUwAwEB/zAdBgNVHQ4EFgQUrMJjif5NxggfH013nhJ6vzK21hIwDQYJKoZI
12
- hvcNAQELBQADggEBAHNSeg80fBBbFmNQaRDCmAratdBVgXPfTwH2LF7OUZh2JJGA
13
- n/H0m3mLFgfunQhYgWh5/6T71xWx/A0pAI73WDA/v2UnMUkNcJ6DttUEcRmhZJ7+
14
- nmu2Ym4LN3dTvMtNe0/6Yph+6PR8cP56HvSu1vIxQTjN3Dadjop92k98hxbX5iVp
15
- I74YZcLyOYqWWp1id3lF0ro7uyW6dcxUJTf53LXHlGNrIiUj07ThX/wCKBS0yw/H
16
- +TCUdykUoiBCwgrl+RAn9EE1Hjt4D3q/vlZwzzddFds3kvP97CdjyP2M/60Ff9po
17
- Bdrqsa1vegwvAk+hRgocvrH3TPJslfycAada1zw=
18
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEAuL67dHTIZa/Lv+q/k2cTdXUyARn8EjKYWyWCSlJ9ixm9og5O
3
- udrqtjncVEf7m8N4cZ4BRztZjHnhFSmaezw79siK1e8/ZtNcKy6cQ6CirmZ7JgHh
4
- UTJTWVWqW2k3xp10Ur+fAUqOqV+v1iYlznbZSFyV9jkOKQd/kJwUSCpcd1KNDgTj
5
- eRI7h47ppAss5QdF8GSRnqa+z4yar4cc6zEEHFyvO/MES0rGN+wQ/aZ2Q5RC5tOA
6
- CLsEndyWjiwnUSYXIpivEAb/MUoSsNN3okhBL9VUzIyhy3oLUcvEzUXrdHgXjkim
7
- ISE74kOSIEqD/MghYbBOa/7ZZZeXjGu4tfoWpQIDAQABAoIBAFlvC/QubKy9U5dO
8
- nvtOlN7xowlheOOeVp8ZI1+zW08xYNnIr1fNoH4iuIScbDNVh0MJSHkhRBJ7FflW
9
- sJAj8qtfHca/ESRIAYBuCfu7EcX3mnolwtu5zxuaGuQxpWyi4KMGXIUVgMaBqe+z
10
- e+3dHwamu3n82NwH4zswM6lTyHuCScvLr0d/Bbjq6v1pNfRhU58L3RNKDrhETrSA
11
- aQNEb7Z185q/B/dbDB810pcLaZ5ALbrM89sr7wD4ULPiAgDI7fX/0tK1/Dg4nQzJ
12
- 6j3qrPoR6KdMmiTdtd2/jc3sRbNCBvzsakcGH/8V/47+8ysYGey4T7zBruvJlqY6
13
- tNkGEGkCgYEA61TM5paQhtzP62cK3b68KhBXFqxov0uV4kVuQFK5jBVVslpExnWl
14
- Zi+/YXJOOMt8oXkkWeyR2GmBl5BYYiUYfwZHkVWyImDfkYA5dyIpgoB6kGPANaqi
15
- 5J+NCdj3PKgdYSZ7HPnm/pTen9m3Q/Dv5hjMj50Dd+CkJP7qKBavUDcCgYEAyPiM
16
- k1TgIvSvoVxCXi1yyuxOQgiiAaCBACiEyBpJYu13lVl4H9ziRMnhsXUv22ZsMd+Z
17
- HW05gMsn+EKifDBWnQqZT8ziRiFXoPylHOOOYbDVBjYMyTOT+ma9OZhJbL+bfTyC
18
- SjPkiZgIkPRUtqEYsgXZhrQd1qux03rrjUSGCgMCgYBWM3vSwzgxjlTC/72lOCao
19
- qc+cyI6d88v1VEVsXmEFBROc/x/OKm3pnnfV9A7fEvqWE0/TeKp7wTntELyvRrNQ
20
- ZDZ28BMOMLn0DCoAj4zw9qrulPtlLRn58M+y2bzGhTYtzfCuzoNkoZdiqldNFcZq
21
- XI8h0/vfP3Qg8RdIk/anxQKBgG64UGpTFnDrsV8Kvx23mEiny62hp++Rh8CYkh7U
22
- LJ4uCfXkJsQXIymWt5rW3xjW4sDPWUHXDRkh09F4lKAq2W0Hi9NlIzxT3j05M5Yo
23
- 4CZ+D76uRHkMy3fm5lU2yyz4mydyEK3kzQHpGr8RfSJounxJsL//t3ivevbx/5gC
24
- qn4VAoGBAIX4k2ugHMPs2R7XVeieURm+otH9QJX81CgVyiLTN67je/0h3bVzmqcI
25
- SinujOpR6x+Xvc1fMfLEhDkKfO9L+iBAdIb7kd8lQXAdIrgUGhORmvAl99aRFLCC
26
- 1FxaU9P9lk/WMXhuIkq1DmUAHzZGAz+/JzPiXezdo6POcPLoRri4
27
- -----END RSA PRIVATE KEY-----
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC2TCCAcGgAwIBAgIJALo0YKZBVqYnMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
3
- BAMMB3Rlc3QtY2EwHhcNMjAwNzE1MTU0NTE4WhcNMzAwNzEzMTU0NTE4WjAUMRIw
4
- EAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
5
- AQC65xzvPQrsXXRVsQ4rcrmvOF0gdWV38JKlhHUrS50//T0S55FUSBkuVXUDCZDx
6
- dOf0y/5HaMb3hm68+ld5B/oNtoPlJWW6Sgc8OLERQy9qGpwR0mXND4SnZ9or7RDV
7
- 8tAEg/Hzq5rm6Xy2WClSR+nHg2tVh2Szde39j7o8ivJpHPzfEyZh37y9oIiY2/FP
8
- QpbAe8n3Ses04D3jhZRoysdcuneWuG3h5DJ9X4IhZUBM54nEO5IQElyYnF6xY/Lt
9
- Gykf8+ydiuAZpZF5FGGfoiKB7XdIwhSlK1XRFeBbHRqyAFjpSNtqy6RPdJINLseb
10
- wG6DNSxcLm91C6ZJaaqu7Qp1AgMBAAGjMDAuMAkGA1UdEwQCMAAwCwYDVR0PBAQD
11
- AgWgMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEALqaQ
12
- J5H9jB2VmIEDxhXAQTeqW1Hmp0oHhL1XcAvNS+JILjFfAdjMe/3Kei3hQJv8j8sE
13
- uck3o7iA4kcE0ydUzO7TM7efjqcksyZrmWSB0xj+NHjcybwhD4Selr1vBSCU0IHN
14
- Ap+zYbBX7eQawm2lIzniBvS6MmP+dgZjhy73FVQ4oSz+wTcg1iPkhulYL4iV/HSG
15
- fND5gUvlRbLHGTETpCdq7iJNOpNl/OYboJLPvVpx8H7Jc+L2bQl05fj/koO35xaL
16
- JuZGj5aVOKw45WvqERpe1RI3077dWE6bAr9DzrW13IqmFMbPD817pcB6+ILZnMAF
17
- RhobWRU6PA4TdDP8bg==
18
- -----END CERTIFICATE-----