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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/lib/tttls1.3/version.rb +1 -1
- data/lib/tttls1.3.rb +1 -0
- data/tttls1.3.gemspec +5 -2
- metadata +3 -113
- data/.github/workflows/ci.yml +0 -39
- data/.gitignore +0 -17
- data/spec/aead_spec.rb +0 -95
- data/spec/alert_spec.rb +0 -54
- data/spec/alpn_spec.rb +0 -55
- data/spec/application_data_spec.rb +0 -26
- data/spec/certificate_spec.rb +0 -82
- data/spec/certificate_verify_spec.rb +0 -51
- data/spec/change_cipher_spec_spec.rb +0 -26
- data/spec/cipher_suites_spec.rb +0 -39
- data/spec/client_hello_spec.rb +0 -105
- data/spec/client_spec.rb +0 -274
- data/spec/compress_certificate_spec.rb +0 -54
- data/spec/cookie_spec.rb +0 -98
- data/spec/early_data_indication_spec.rb +0 -64
- data/spec/ech_outer_extensions_spec.rb +0 -42
- data/spec/ech_spec.rb +0 -122
- data/spec/encrypted_extensions_spec.rb +0 -94
- data/spec/end_of_early_data_spec.rb +0 -28
- data/spec/endpoint_spec.rb +0 -167
- data/spec/error_spec.rb +0 -18
- data/spec/extensions_spec.rb +0 -250
- data/spec/finished_spec.rb +0 -55
- data/spec/fixtures/rsa_ca.crt +0 -18
- data/spec/fixtures/rsa_ca.key +0 -27
- data/spec/fixtures/rsa_rsa.crt +0 -18
- data/spec/fixtures/rsa_rsa.key +0 -27
- data/spec/fixtures/rsa_rsa_ocsp.crt +0 -18
- data/spec/fixtures/rsa_rsa_ocsp.key +0 -27
- data/spec/fixtures/rsa_rsassaPss.crt +0 -20
- data/spec/fixtures/rsa_rsassaPss.key +0 -27
- data/spec/fixtures/rsa_secp256r1.crt +0 -14
- data/spec/fixtures/rsa_secp256r1.key +0 -5
- data/spec/fixtures/rsa_secp384r1.crt +0 -14
- data/spec/fixtures/rsa_secp384r1.key +0 -6
- data/spec/fixtures/rsa_secp521r1.crt +0 -15
- data/spec/fixtures/rsa_secp521r1.key +0 -7
- data/spec/key_schedule_spec.rb +0 -221
- data/spec/key_share_spec.rb +0 -199
- data/spec/new_session_ticket_spec.rb +0 -80
- data/spec/pre_shared_key_spec.rb +0 -167
- data/spec/psk_key_exchange_modes_spec.rb +0 -45
- data/spec/record_size_limit_spec.rb +0 -61
- data/spec/record_spec.rb +0 -105
- data/spec/server_hello_spec.rb +0 -200
- data/spec/server_name_spec.rb +0 -110
- data/spec/server_spec.rb +0 -232
- data/spec/signature_algorithms_cert_spec.rb +0 -77
- data/spec/signature_algorithms_spec.rb +0 -104
- data/spec/spec_helper.rb +0 -990
- data/spec/status_request_spec.rb +0 -140
- data/spec/supported_groups_spec.rb +0 -79
- data/spec/supported_versions_spec.rb +0 -136
- data/spec/transcript_spec.rb +0 -83
- data/spec/unknown_extension_spec.rb +0 -90
- data/spec/utils_spec.rb +0 -235
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d88444a4aefeed764140eec7d91c56ee1461e982de65945402e31b5494bb16c5
|
|
4
|
+
data.tar.gz: 41b564c55684b3196f6e610236dff2647601baed54342eb0f512785011cd260b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 696209ef1023a0261e8420a66287444b95406f2e5042c0831f4840f4e6733dd35bae60df6f6797c64e78ab8a902774d682d98683d87130bc49754225ae8bd3ad
|
|
7
|
+
data.tar.gz: a9b9f5f8e8b65018e3b0a1e9e0212b2d8032ddd8199de091c662ee9fd579d9f9f3f788d5a2f7d781ff3df05ceb623598b1b90830316243bab1d47341a8652895
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.0.
|
|
1
|
+
4.0.2
|
data/lib/tttls1.3/version.rb
CHANGED
data/lib/tttls1.3.rb
CHANGED
data/tttls1.3.gemspec
CHANGED
|
@@ -15,8 +15,11 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
spec.license = 'MIT'
|
|
16
16
|
spec.required_ruby_version = '>= 3.1.0'
|
|
17
17
|
|
|
18
|
-
spec.files
|
|
19
|
-
|
|
18
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
19
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
20
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
21
|
+
end
|
|
22
|
+
end
|
|
20
23
|
spec.require_paths = ['lib']
|
|
21
24
|
|
|
22
25
|
spec.add_development_dependency 'bundler'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tttls1.3
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- thekuwayama
|
|
@@ -86,8 +86,6 @@ executables: []
|
|
|
86
86
|
extensions: []
|
|
87
87
|
extra_rdoc_files: []
|
|
88
88
|
files:
|
|
89
|
-
- ".github/workflows/ci.yml"
|
|
90
|
-
- ".gitignore"
|
|
91
89
|
- ".rspec"
|
|
92
90
|
- ".rubocop.yml"
|
|
93
91
|
- ".ruby-version"
|
|
@@ -164,60 +162,6 @@ files:
|
|
|
164
162
|
- lib/tttls1.3/transcript.rb
|
|
165
163
|
- lib/tttls1.3/utils.rb
|
|
166
164
|
- lib/tttls1.3/version.rb
|
|
167
|
-
- spec/aead_spec.rb
|
|
168
|
-
- spec/alert_spec.rb
|
|
169
|
-
- spec/alpn_spec.rb
|
|
170
|
-
- spec/application_data_spec.rb
|
|
171
|
-
- spec/certificate_spec.rb
|
|
172
|
-
- spec/certificate_verify_spec.rb
|
|
173
|
-
- spec/change_cipher_spec_spec.rb
|
|
174
|
-
- spec/cipher_suites_spec.rb
|
|
175
|
-
- spec/client_hello_spec.rb
|
|
176
|
-
- spec/client_spec.rb
|
|
177
|
-
- spec/compress_certificate_spec.rb
|
|
178
|
-
- spec/cookie_spec.rb
|
|
179
|
-
- spec/early_data_indication_spec.rb
|
|
180
|
-
- spec/ech_outer_extensions_spec.rb
|
|
181
|
-
- spec/ech_spec.rb
|
|
182
|
-
- spec/encrypted_extensions_spec.rb
|
|
183
|
-
- spec/end_of_early_data_spec.rb
|
|
184
|
-
- spec/endpoint_spec.rb
|
|
185
|
-
- spec/error_spec.rb
|
|
186
|
-
- spec/extensions_spec.rb
|
|
187
|
-
- spec/finished_spec.rb
|
|
188
|
-
- spec/fixtures/rsa_ca.crt
|
|
189
|
-
- spec/fixtures/rsa_ca.key
|
|
190
|
-
- spec/fixtures/rsa_rsa.crt
|
|
191
|
-
- spec/fixtures/rsa_rsa.key
|
|
192
|
-
- spec/fixtures/rsa_rsa_ocsp.crt
|
|
193
|
-
- spec/fixtures/rsa_rsa_ocsp.key
|
|
194
|
-
- spec/fixtures/rsa_rsassaPss.crt
|
|
195
|
-
- spec/fixtures/rsa_rsassaPss.key
|
|
196
|
-
- spec/fixtures/rsa_secp256r1.crt
|
|
197
|
-
- spec/fixtures/rsa_secp256r1.key
|
|
198
|
-
- spec/fixtures/rsa_secp384r1.crt
|
|
199
|
-
- spec/fixtures/rsa_secp384r1.key
|
|
200
|
-
- spec/fixtures/rsa_secp521r1.crt
|
|
201
|
-
- spec/fixtures/rsa_secp521r1.key
|
|
202
|
-
- spec/key_schedule_spec.rb
|
|
203
|
-
- spec/key_share_spec.rb
|
|
204
|
-
- spec/new_session_ticket_spec.rb
|
|
205
|
-
- spec/pre_shared_key_spec.rb
|
|
206
|
-
- spec/psk_key_exchange_modes_spec.rb
|
|
207
|
-
- spec/record_size_limit_spec.rb
|
|
208
|
-
- spec/record_spec.rb
|
|
209
|
-
- spec/server_hello_spec.rb
|
|
210
|
-
- spec/server_name_spec.rb
|
|
211
|
-
- spec/server_spec.rb
|
|
212
|
-
- spec/signature_algorithms_cert_spec.rb
|
|
213
|
-
- spec/signature_algorithms_spec.rb
|
|
214
|
-
- spec/spec_helper.rb
|
|
215
|
-
- spec/status_request_spec.rb
|
|
216
|
-
- spec/supported_groups_spec.rb
|
|
217
|
-
- spec/supported_versions_spec.rb
|
|
218
|
-
- spec/transcript_spec.rb
|
|
219
|
-
- spec/unknown_extension_spec.rb
|
|
220
|
-
- spec/utils_spec.rb
|
|
221
165
|
- tttls1.3.gemspec
|
|
222
166
|
homepage: https://github.com/thekuwayama/tttls1.3
|
|
223
167
|
licenses:
|
|
@@ -237,61 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
237
181
|
- !ruby/object:Gem::Version
|
|
238
182
|
version: '0'
|
|
239
183
|
requirements: []
|
|
240
|
-
rubygems_version:
|
|
184
|
+
rubygems_version: 3.6.9
|
|
241
185
|
specification_version: 4
|
|
242
186
|
summary: TLS 1.3 implementation in Ruby (Tiny Trial TLS1.3 aka tttls1.3)
|
|
243
|
-
test_files:
|
|
244
|
-
- spec/aead_spec.rb
|
|
245
|
-
- spec/alert_spec.rb
|
|
246
|
-
- spec/alpn_spec.rb
|
|
247
|
-
- spec/application_data_spec.rb
|
|
248
|
-
- spec/certificate_spec.rb
|
|
249
|
-
- spec/certificate_verify_spec.rb
|
|
250
|
-
- spec/change_cipher_spec_spec.rb
|
|
251
|
-
- spec/cipher_suites_spec.rb
|
|
252
|
-
- spec/client_hello_spec.rb
|
|
253
|
-
- spec/client_spec.rb
|
|
254
|
-
- spec/compress_certificate_spec.rb
|
|
255
|
-
- spec/cookie_spec.rb
|
|
256
|
-
- spec/early_data_indication_spec.rb
|
|
257
|
-
- spec/ech_outer_extensions_spec.rb
|
|
258
|
-
- spec/ech_spec.rb
|
|
259
|
-
- spec/encrypted_extensions_spec.rb
|
|
260
|
-
- spec/end_of_early_data_spec.rb
|
|
261
|
-
- spec/endpoint_spec.rb
|
|
262
|
-
- spec/error_spec.rb
|
|
263
|
-
- spec/extensions_spec.rb
|
|
264
|
-
- spec/finished_spec.rb
|
|
265
|
-
- spec/fixtures/rsa_ca.crt
|
|
266
|
-
- spec/fixtures/rsa_ca.key
|
|
267
|
-
- spec/fixtures/rsa_rsa.crt
|
|
268
|
-
- spec/fixtures/rsa_rsa.key
|
|
269
|
-
- spec/fixtures/rsa_rsa_ocsp.crt
|
|
270
|
-
- spec/fixtures/rsa_rsa_ocsp.key
|
|
271
|
-
- spec/fixtures/rsa_rsassaPss.crt
|
|
272
|
-
- spec/fixtures/rsa_rsassaPss.key
|
|
273
|
-
- spec/fixtures/rsa_secp256r1.crt
|
|
274
|
-
- spec/fixtures/rsa_secp256r1.key
|
|
275
|
-
- spec/fixtures/rsa_secp384r1.crt
|
|
276
|
-
- spec/fixtures/rsa_secp384r1.key
|
|
277
|
-
- spec/fixtures/rsa_secp521r1.crt
|
|
278
|
-
- spec/fixtures/rsa_secp521r1.key
|
|
279
|
-
- spec/key_schedule_spec.rb
|
|
280
|
-
- spec/key_share_spec.rb
|
|
281
|
-
- spec/new_session_ticket_spec.rb
|
|
282
|
-
- spec/pre_shared_key_spec.rb
|
|
283
|
-
- spec/psk_key_exchange_modes_spec.rb
|
|
284
|
-
- spec/record_size_limit_spec.rb
|
|
285
|
-
- spec/record_spec.rb
|
|
286
|
-
- spec/server_hello_spec.rb
|
|
287
|
-
- spec/server_name_spec.rb
|
|
288
|
-
- spec/server_spec.rb
|
|
289
|
-
- spec/signature_algorithms_cert_spec.rb
|
|
290
|
-
- spec/signature_algorithms_spec.rb
|
|
291
|
-
- spec/spec_helper.rb
|
|
292
|
-
- spec/status_request_spec.rb
|
|
293
|
-
- spec/supported_groups_spec.rb
|
|
294
|
-
- spec/supported_versions_spec.rb
|
|
295
|
-
- spec/transcript_spec.rb
|
|
296
|
-
- spec/unknown_extension_spec.rb
|
|
297
|
-
- spec/utils_spec.rb
|
|
187
|
+
test_files: []
|
data/.github/workflows/ci.yml
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
pull_request:
|
|
8
|
-
branches:
|
|
9
|
-
- '*'
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
ci:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
strategy:
|
|
15
|
-
matrix:
|
|
16
|
-
ruby-version: ['3.3', '3.4', '4.0']
|
|
17
|
-
env:
|
|
18
|
-
SPEC_VERBOSE: true
|
|
19
|
-
steps:
|
|
20
|
-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
21
|
-
- uses: docker://thekuwayama/openssl:latest
|
|
22
|
-
- name: Set up Ruby
|
|
23
|
-
uses: ruby/setup-ruby@ae195bbe749a7cef685ac729197124a48305c1cb # v1.276.0
|
|
24
|
-
with:
|
|
25
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
26
|
-
- name: Install dependencies
|
|
27
|
-
run: |
|
|
28
|
-
gem --version
|
|
29
|
-
gem install bundler
|
|
30
|
-
bundle --version
|
|
31
|
-
bundle install
|
|
32
|
-
- name: Run rubocop
|
|
33
|
-
run: bundle exec rake rubocop
|
|
34
|
-
- name: Run rspec
|
|
35
|
-
run: bundle exec rake spec
|
|
36
|
-
- name: Run interop client
|
|
37
|
-
run: bundle exec rake interop:client
|
|
38
|
-
- name: Run interop server
|
|
39
|
-
run: bundle exec rake interop:server
|
data/.gitignore
DELETED
data/spec/aead_spec.rb
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
|
|
6
|
-
RSpec.describe Aead do
|
|
7
|
-
context 'aead using CipherSuite::TLS_AES_128_GCM_SHA256' do
|
|
8
|
-
let(:cipher) do
|
|
9
|
-
Aead.new(cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
|
|
10
|
-
write_key: TESTBINARY_SERVER_PARAMETERS_WRITE_KEY,
|
|
11
|
-
write_iv: TESTBINARY_SERVER_PARAMETERS_WRITE_IV,
|
|
12
|
-
sequence_number: SequenceNumber.new)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
let(:content) do
|
|
16
|
-
TESTBINARY_SERVER_PARAMETERS
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
let(:encrypted_record) do
|
|
20
|
-
TESTBINARY_SERVER_PARAMETERS_RECORD[5..]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
let(:record_header) do
|
|
24
|
-
TESTBINARY_SERVER_PARAMETERS_RECORD[0...5]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'should encrypt content of server parameters' do
|
|
28
|
-
expect(cipher.encrypt(content, ContentType::HANDSHAKE))
|
|
29
|
-
.to eq encrypted_record
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'should decrypt encrypted_record server parameters' do
|
|
33
|
-
expect(cipher.decrypt(encrypted_record, record_header))
|
|
34
|
-
.to eq [content, ContentType::HANDSHAKE]
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
context 'aead using CipherSuite::TLS_AES_128_GCM_SHA256' do
|
|
39
|
-
let(:cipher) do
|
|
40
|
-
Aead.new(cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
|
|
41
|
-
write_key: TESTBINARY_CLIENT_FINISHED_WRITE_KEY,
|
|
42
|
-
write_iv: TESTBINARY_CLIENT_FINISHED_WRITE_IV,
|
|
43
|
-
sequence_number: SequenceNumber.new)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
let(:content) do
|
|
47
|
-
TESTBINARY_CLIENT_FINISHED
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
let(:encrypted_record) do
|
|
51
|
-
TESTBINARY_CLIENT_FINISHED_RECORD[5..]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
let(:record_header) do
|
|
55
|
-
TESTBINARY_CLIENT_FINISHED_RECORD[0...5]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it 'should encrypt content of client finished' do
|
|
59
|
-
expect(cipher.encrypt(content, ContentType::HANDSHAKE))
|
|
60
|
-
.to eq encrypted_record
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it 'should decrypt encrypted_record client finished' do
|
|
64
|
-
expect(cipher.decrypt(encrypted_record, record_header))
|
|
65
|
-
.to eq [content, ContentType::HANDSHAKE]
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
context 'aead using CipherSuite::TLS_AES_128_GCM_SHA256, ' \
|
|
70
|
-
'HelloRetryRequest,' do
|
|
71
|
-
let(:cipher) do
|
|
72
|
-
Aead.new(cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
|
|
73
|
-
write_key: TESTBINARY_HRR_SERVER_PARAMETERS_WRITE_KEY,
|
|
74
|
-
write_iv: TESTBINARY_HRR_SERVER_PARAMETERS_WRITE_IV,
|
|
75
|
-
sequence_number: SequenceNumber.new)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
let(:content) do
|
|
79
|
-
TESTBINARY_HRR_SERVER_PARAMETERS
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
let(:encrypted_record) do
|
|
83
|
-
TESTBINARY_HRR_SERVER_PARAMETERS_RECORD[5..]
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
let(:record_header) do
|
|
87
|
-
TESTBINARY_HRR_SERVER_PARAMETERS_RECORD[0...5]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it 'should decrypt encrypted_record server parameters' do
|
|
91
|
-
expect(cipher.decrypt(encrypted_record, record_header))
|
|
92
|
-
.to eq [content, ContentType::HANDSHAKE]
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
end
|
data/spec/alert_spec.rb
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
|
|
6
|
-
RSpec.describe Alert do
|
|
7
|
-
context 'unexpected_message alert' do
|
|
8
|
-
let(:message) do
|
|
9
|
-
Alert.new(level: AlertLevel::FATAL,
|
|
10
|
-
description: ALERT_DESCRIPTION[:unexpected_message])
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'should be serialized' do
|
|
14
|
-
expect(message.serialize).to eq AlertLevel::FATAL \
|
|
15
|
-
+ ALERT_DESCRIPTION[:unexpected_message]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it 'should return error' do
|
|
19
|
-
expect(message.to_error).to be_a_kind_of(ErrorAlerts)
|
|
20
|
-
expect(message.to_error.message).to eq 'unexpected_message'
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context 'unexpected_message alert, not given level' do
|
|
25
|
-
let(:message) do
|
|
26
|
-
Alert.new(description: ALERT_DESCRIPTION[:unexpected_message])
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'should be serialized' do
|
|
30
|
-
expect(message.serialize).to eq AlertLevel::FATAL \
|
|
31
|
-
+ ALERT_DESCRIPTION[:unexpected_message]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'should return error' do
|
|
35
|
-
expect(message.to_error).to be_a_kind_of(ErrorAlerts)
|
|
36
|
-
expect(message.to_error.message).to eq 'unexpected_message'
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
context 'valid alert binary' do
|
|
41
|
-
let(:message) do
|
|
42
|
-
Alert.deserialize(TESTBINARY_ALERT)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it 'should generate object' do
|
|
46
|
-
expect(message.level).to eq AlertLevel::WARNING
|
|
47
|
-
expect(message.description).to eq ALERT_DESCRIPTION[:close_notify]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it 'should generate serializable object' do
|
|
51
|
-
expect(message.serialize).to eq TESTBINARY_ALERT
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
data/spec/alpn_spec.rb
DELETED
|
@@ -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 Alpn do
|
|
8
|
-
context 'valid alpn' do
|
|
9
|
-
let(:protocol_name_list) do
|
|
10
|
-
['h2', 'http/1.1', 'http/1.0']
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let(:extension) do
|
|
14
|
-
Alpn.new(protocol_name_list)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'should be generated' do
|
|
18
|
-
expect(extension.extension_type)
|
|
19
|
-
.to eq ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION
|
|
20
|
-
expect(extension.protocol_name_list).to eq protocol_name_list
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it 'should be serialized' do
|
|
24
|
-
expect(extension.serialize)
|
|
25
|
-
.to eq ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION \
|
|
26
|
-
+ 23.to_uint16 \
|
|
27
|
-
+ 21.to_uint16 \
|
|
28
|
-
+ 'h2'.prefix_uint8_length \
|
|
29
|
-
+ 'http/1.1'.prefix_uint8_length \
|
|
30
|
-
+ 'http/1.0'.prefix_uint8_length
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
context 'invalid alpn, empty,' do
|
|
35
|
-
let(:extension) do
|
|
36
|
-
Alpn.new([])
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'should not be generated' do
|
|
40
|
-
expect { extension }.to raise_error(ErrorAlerts)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
context 'valid alpn binary' do
|
|
45
|
-
let(:extension) do
|
|
46
|
-
Alpn.deserialize(TESTBINARY_ALPN)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it 'should generate valid object' do
|
|
50
|
-
expect(extension.extension_type)
|
|
51
|
-
.to eq ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION
|
|
52
|
-
expect(extension.protocol_name_list).to eq ['h2', 'http/1.1']
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
|
|
6
|
-
RSpec.describe ApplicationData do
|
|
7
|
-
context 'application_data' do
|
|
8
|
-
let(:message) do
|
|
9
|
-
ApplicationData.new(TESTBINARY_CLIENT_APPLICATION_DATA)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it 'should be serialized' do
|
|
13
|
-
expect(message.serialize).to eq TESTBINARY_CLIENT_APPLICATION_DATA
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
context 'valid application_data binary' do
|
|
18
|
-
let(:message) do
|
|
19
|
-
ApplicationData.deserialize(TESTBINARY_CLIENT_APPLICATION_DATA)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'should generate valid serializable object' do
|
|
23
|
-
expect(message.serialize).to eq TESTBINARY_CLIENT_APPLICATION_DATA
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
data/spec/certificate_spec.rb
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
using Refinements
|
|
6
|
-
|
|
7
|
-
RSpec.describe Certificate do
|
|
8
|
-
context 'valid certificate' do
|
|
9
|
-
let(:certificate) do
|
|
10
|
-
OpenSSL::X509::Certificate.new(
|
|
11
|
-
File.read(__dir__ + '/fixtures/rsa_rsa.crt')
|
|
12
|
-
)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
let(:message) do
|
|
16
|
-
Certificate.new(certificate_list: [CertificateEntry.new(certificate)])
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it 'should be generated' do
|
|
20
|
-
expect(message.msg_type).to eq HandshakeType::CERTIFICATE
|
|
21
|
-
expect(message.certificate_request_context).to be_empty
|
|
22
|
-
|
|
23
|
-
certificate_entry = message.certificate_list.first
|
|
24
|
-
expect(certificate_entry.cert_data.subject.to_s).to eq '/CN=localhost'
|
|
25
|
-
expect(certificate_entry.extensions).to be_empty
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it 'should be serialized' do
|
|
29
|
-
expect(message.serialize).to eq HandshakeType::CERTIFICATE \
|
|
30
|
-
+ 742.to_uint24 \
|
|
31
|
-
+ 0.to_uint8 \
|
|
32
|
-
+ 738.to_uint24 \
|
|
33
|
-
+ 733.to_uint24 \
|
|
34
|
-
+ certificate.to_der \
|
|
35
|
-
+ 0.to_uint16
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
context 'valid certificate binary' do
|
|
40
|
-
let(:message) do
|
|
41
|
-
Certificate.deserialize(TESTBINARY_CERTIFICATE)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'should generate valid object' do
|
|
45
|
-
expect(message.msg_type).to eq HandshakeType::CERTIFICATE
|
|
46
|
-
expect(message.certificate_request_context).to be_empty
|
|
47
|
-
|
|
48
|
-
certificate_entry = message.certificate_list.first
|
|
49
|
-
expect(certificate_entry.cert_data.subject.to_s).to eq '/CN=rsa'
|
|
50
|
-
expect(certificate_entry.extensions).to be_empty
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'should generate serializable object' do
|
|
54
|
-
expect(message.serialize).to eq TESTBINARY_CERTIFICATE
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context 'invalid certificate, including forbidden extension type,' do
|
|
59
|
-
let(:certificate) do
|
|
60
|
-
OpenSSL::X509::Certificate.new(
|
|
61
|
-
File.read(__dir__ + '/fixtures/rsa_rsa.crt')
|
|
62
|
-
)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
let(:server_name) do
|
|
66
|
-
ServerName.new('')
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
let(:message) do
|
|
70
|
-
Certificate.new(
|
|
71
|
-
certificate_list: [
|
|
72
|
-
CertificateEntry.new(certificate, Extensions.new([server_name]))
|
|
73
|
-
]
|
|
74
|
-
)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it 'should be generated' do
|
|
78
|
-
expect(message.msg_type).to eq HandshakeType::CERTIFICATE
|
|
79
|
-
expect(message.appearable_extensions?).to be false
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
using Refinements
|
|
6
|
-
|
|
7
|
-
RSpec.describe CertificateVerify do
|
|
8
|
-
context 'valid certificate_verify' do
|
|
9
|
-
let(:signature) do
|
|
10
|
-
OpenSSL::Random.random_bytes(128)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let(:message) do
|
|
14
|
-
CertificateVerify.new(
|
|
15
|
-
signature_scheme: SignatureScheme::RSA_PSS_RSAE_SHA256,
|
|
16
|
-
signature:
|
|
17
|
-
)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it 'should be generated' do
|
|
21
|
-
expect(message.msg_type).to eq HandshakeType::CERTIFICATE_VERIFY
|
|
22
|
-
expect(message.signature_scheme) \
|
|
23
|
-
.to eq SignatureScheme::RSA_PSS_RSAE_SHA256
|
|
24
|
-
expect(message.signature).to eq signature
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'should be serialized' do
|
|
28
|
-
expect(message.serialize).to eq HandshakeType::CERTIFICATE_VERIFY \
|
|
29
|
-
+ 132.to_uint24 \
|
|
30
|
-
+ SignatureScheme::RSA_PSS_RSAE_SHA256 \
|
|
31
|
-
+ signature.prefix_uint16_length
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
context 'valid certificate_verify binary' do
|
|
36
|
-
let(:message) do
|
|
37
|
-
CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'should generate valid object' do
|
|
41
|
-
expect(message.msg_type).to eq HandshakeType::CERTIFICATE_VERIFY
|
|
42
|
-
expect(message.signature_scheme) \
|
|
43
|
-
.to eq SignatureScheme::RSA_PSS_RSAE_SHA256
|
|
44
|
-
expect(message.signature.length).to eq 128
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'should generate serializable object' do
|
|
48
|
-
expect(message.serialize).to eq TESTBINARY_CERTIFICATE_VERIFY
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
|
|
6
|
-
RSpec.describe ChangeCipherSpec do
|
|
7
|
-
context 'change_cipher_spec' do
|
|
8
|
-
let(:message) do
|
|
9
|
-
ChangeCipherSpec.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it 'should be serialized' do
|
|
13
|
-
expect(message.serialize).to eq "\x01"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
context 'valid change_cipher_spec binary' do
|
|
18
|
-
let(:message) do
|
|
19
|
-
ChangeCipherSpec.deserialize(TESTBINARY_CHANGE_CIPHER_SPEC)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'should generate valid serializable object' do
|
|
23
|
-
expect(message.serialize).to eq "\x01"
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
data/spec/cipher_suites_spec.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require_relative 'spec_helper'
|
|
5
|
-
using Refinements
|
|
6
|
-
|
|
7
|
-
RSpec.describe CipherSuites do
|
|
8
|
-
context 'valid cipher suites binary' do
|
|
9
|
-
let(:cs) do
|
|
10
|
-
CipherSuites.deserialize(TESTBINARY_CIPHER_SUITES)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'should generate valid object' do
|
|
14
|
-
expect(cs).to eq [CipherSuite::TLS_AES_256_GCM_SHA384,
|
|
15
|
-
CipherSuite::TLS_CHACHA20_POLY1305_SHA256,
|
|
16
|
-
CipherSuite::TLS_AES_128_GCM_SHA256]
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
context 'invalid cipher suites binary, too short' do
|
|
21
|
-
let(:cs) do
|
|
22
|
-
CipherSuites.deserialize(TESTBINARY_CIPHER_SUITES[0...-1])
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it 'should not generate object' do
|
|
26
|
-
expect { cs }.to raise_error(ErrorAlerts)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context 'invalid cipher suites binary, binary is nil' do
|
|
31
|
-
let(:cs) do
|
|
32
|
-
CipherSuites.deserialize(nil)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it 'should not generate object' do
|
|
36
|
-
expect { cs }.to raise_error(ErrorAlerts)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|