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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d8c0f0a3a4d128e45cff220f8d4e7f230e3cbfb7afc9cca1bf9192e39224a64
4
- data.tar.gz: 0c10de227f96196783f95717bd141d1ede26a340525ef9af84ad0b6be1b6f6b1
3
+ metadata.gz: d88444a4aefeed764140eec7d91c56ee1461e982de65945402e31b5494bb16c5
4
+ data.tar.gz: 41b564c55684b3196f6e610236dff2647601baed54342eb0f512785011cd260b
5
5
  SHA512:
6
- metadata.gz: 36ead69d903139ea1618cb9cd105c8638f16b5c7ea4d5b5d168c785e87db085ede486d62f6f6be5d704e660d0f2a290ba4e7d8087facdc4a4da4a284aae806a6
7
- data.tar.gz: 72839111a9b18790c1dbcb8b9ac2136120317ea50f9352be7c0e676a1b7999cc789290ebb66430a1301052fd6bfba97d1b40dbc9f6e59955b595d784d380c240
6
+ metadata.gz: 696209ef1023a0261e8420a66287444b95406f2e5042c0831f4840f4e6733dd35bae60df6f6797c64e78ab8a902774d682d98683d87130bc49754225ae8bd3ad
7
+ data.tar.gz: a9b9f5f8e8b65018e3b0a1e9e0212b2d8032ddd8199de091c662ee9fd579d9f9f3f788d5a2f7d781ff3df05ceb623598b1b90830316243bab1d47341a8652895
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 4.0.0
1
+ 4.0.2
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TTTLS13
4
- VERSION = '0.3.6'
4
+ VERSION = '0.3.7'
5
5
  end
data/lib/tttls1.3.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'openssl'
4
+ require 'pp' # rubocop:disable Lint/RedundantRequireStatement
4
5
  require 'net/http'
5
6
  require 'logger'
6
7
 
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 = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
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.6
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: 4.0.3
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: []
@@ -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
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- Gemfile.lock
4
- .config
5
- .rvmrc
6
- /.bundle/
7
- /vendor/
8
- /lib/bundler/man/
9
- /pkg/
10
- /.yardoc/
11
- /_yardoc/
12
- /doc/
13
- /rdoc/
14
- /coverage/
15
- /spec/reports/
16
- /tmp/
17
- .DS_Store
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
@@ -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
@@ -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