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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/README.md +1 -1
- data/lib/tttls1.3/client.rb +11 -5
- data/lib/tttls1.3/ech.rb +31 -90
- data/lib/tttls1.3/message/alert.rb +1 -0
- data/lib/tttls1.3/sslkeylogfile.rb +22 -0
- data/lib/tttls1.3/version.rb +1 -1
- data/lib/tttls1.3.rb +1 -0
- data/tttls1.3.gemspec +7 -4
- metadata +11 -121
- 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
|
-
|
|
1
|
+
4.0.2
|
data/Gemfile
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
|
|
5
5
|
gem 'ech_config', '~> 0.0.3'
|
|
6
|
-
gem 'hpke'
|
|
6
|
+
gem 'hpke', '~> 1.0.0'
|
|
7
7
|
gem 'logger'
|
|
8
8
|
gem 'openssl'
|
|
9
9
|
|
|
@@ -12,7 +12,7 @@ group :development do
|
|
|
12
12
|
gem 'byebug'
|
|
13
13
|
gem 'http_parser.rb'
|
|
14
14
|
gem 'rake'
|
|
15
|
-
gem 'resolv', '
|
|
15
|
+
gem 'resolv', '>= 0.6.2'
|
|
16
16
|
gem 'rspec'
|
|
17
17
|
gem 'rubocop', '1.62.0'
|
|
18
18
|
gem 'webrick'
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/rb/tttls1.3)
|
|
4
4
|
[](https://github.com/thekuwayama/tttls1.3/actions?workflow=CI)
|
|
5
|
-
[](https://qlty.sh/gh/thekuwayama/projects/tttls1.3)
|
|
6
6
|
|
|
7
7
|
tttls1.3 is Ruby implementation of [TLS 1.3](https://datatracker.ietf.org/doc/rfc8446/) protocol.
|
|
8
8
|
|
data/lib/tttls1.3/client.rb
CHANGED
|
@@ -79,10 +79,10 @@ module TTTLS13
|
|
|
79
79
|
STANDARD_CLIENT_ECH_HPKE_SYMMETRIC_CIPHER_SUITES = [
|
|
80
80
|
HpkeSymmetricCipherSuite.new(
|
|
81
81
|
HpkeSymmetricCipherSuite::HpkeKdfId.new(
|
|
82
|
-
|
|
82
|
+
HPKE::HKDF_SHA256
|
|
83
83
|
),
|
|
84
84
|
HpkeSymmetricCipherSuite::HpkeAeadId.new(
|
|
85
|
-
|
|
85
|
+
HPKE::AES_128_GCM
|
|
86
86
|
)
|
|
87
87
|
)
|
|
88
88
|
].freeze
|
|
@@ -192,7 +192,12 @@ module TTTLS13
|
|
|
192
192
|
|
|
193
193
|
extensions, shared_secret = gen_ch_extensions
|
|
194
194
|
binder_key = (use_psk? ? key_schedule.binder_key_res : nil)
|
|
195
|
-
ch, inner, ech_state = send_client_hello(extensions, binder_key)
|
|
195
|
+
ch, inner, ech_state, ech_secret = send_client_hello(extensions, binder_key)
|
|
196
|
+
unless ech_secret.nil?
|
|
197
|
+
sslkeylogfile&.write_ech_secret(ch.random, ech_secret)
|
|
198
|
+
sslkeylogfile&.write_ech_config(ch.random, @settings[:ech_config].encode)
|
|
199
|
+
end
|
|
200
|
+
|
|
196
201
|
ch_outer = ch
|
|
197
202
|
# use ClientHelloInner messages for the transcript hash
|
|
198
203
|
ch = inner.nil? ? ch : inner
|
|
@@ -828,6 +833,7 @@ module TTTLS13
|
|
|
828
833
|
# @return [TTTLS13::Message::ClientHello] outer
|
|
829
834
|
# @return [TTTLS13::Message::ClientHello] inner
|
|
830
835
|
# @return [TTTLS13::EchState]
|
|
836
|
+
# @return [String]
|
|
831
837
|
# rubocop: disable Metrics/MethodLength
|
|
832
838
|
def send_client_hello(extensions, binder_key = nil)
|
|
833
839
|
ch = Message::ClientHello.new(
|
|
@@ -842,7 +848,7 @@ module TTTLS13
|
|
|
842
848
|
inner_ech = Message::Extension::ECHClientHello.new_inner
|
|
843
849
|
inner.extensions[Message::ExtensionType::ENCRYPTED_CLIENT_HELLO] \
|
|
844
850
|
= inner_ech
|
|
845
|
-
ch, inner, ech_state = Ech.offer_ech(
|
|
851
|
+
ch, inner, ech_state, ech_secret = Ech.offer_ech(
|
|
846
852
|
inner,
|
|
847
853
|
@settings[:ech_config],
|
|
848
854
|
method(:select_ech_hpke_cipher_suite)
|
|
@@ -880,7 +886,7 @@ module TTTLS13
|
|
|
880
886
|
@connection.send_handshakes(Message::ContentType::HANDSHAKE, [ch],
|
|
881
887
|
Cryptograph::Passer.new)
|
|
882
888
|
|
|
883
|
-
[ch, inner, ech_state]
|
|
889
|
+
[ch, inner, ech_state, ech_secret]
|
|
884
890
|
end
|
|
885
891
|
# rubocop: enable Metrics/MethodLength
|
|
886
892
|
|
data/lib/tttls1.3/ech.rb
CHANGED
|
@@ -21,18 +21,19 @@ module TTTLS13
|
|
|
21
21
|
# @return [TTTLS13::Message::ClientHello]
|
|
22
22
|
# @return [TTTLS13::Message::ClientHello] ClientHelloInner
|
|
23
23
|
# @return [TTTLS13::EchState]
|
|
24
|
+
# @return [String]
|
|
24
25
|
# rubocop: disable Metrics/AbcSize
|
|
25
26
|
def self.offer_ech(inner, ech_config, hpke_cipher_suite_selector)
|
|
26
|
-
return [new_greased_ch(inner, new_grease_ech), nil, nil] \
|
|
27
|
+
return [new_greased_ch(inner, new_grease_ech), nil, nil, nil] \
|
|
27
28
|
if ech_config.nil? ||
|
|
28
29
|
!SUPPORTED_ECHCONFIG_VERSIONS.include?(ech_config.version)
|
|
29
30
|
|
|
30
31
|
# Encrypted ClientHello Configuration
|
|
31
|
-
ech_state, enc = encrypted_ech_config(
|
|
32
|
+
ech_state, enc, ech_secret = encrypted_ech_config(
|
|
32
33
|
ech_config,
|
|
33
34
|
hpke_cipher_suite_selector
|
|
34
35
|
)
|
|
35
|
-
return [new_greased_ch(inner, new_grease_ech), nil, nil] \
|
|
36
|
+
return [new_greased_ch(inner, new_grease_ech), nil, nil, nil] \
|
|
36
37
|
if ech_state.nil? || enc.nil?
|
|
37
38
|
|
|
38
39
|
# for ech_outer_extensions
|
|
@@ -62,7 +63,7 @@ module TTTLS13
|
|
|
62
63
|
ech_state.ctx.seal(aad.serialize[4..], encoded)
|
|
63
64
|
)
|
|
64
65
|
|
|
65
|
-
[outer, inner, ech_state]
|
|
66
|
+
[outer, inner, ech_state, ech_secret]
|
|
66
67
|
end
|
|
67
68
|
# rubocop: enable Metrics/AbcSize
|
|
68
69
|
|
|
@@ -71,6 +72,7 @@ module TTTLS13
|
|
|
71
72
|
#
|
|
72
73
|
# @return [TTTLS13::EchState or nil]
|
|
73
74
|
# @return [String or nil]
|
|
75
|
+
# @return [String or nil]
|
|
74
76
|
# rubocop: disable Metrics/AbcSize
|
|
75
77
|
def self.encrypted_ech_config(ech_config, hpke_cipher_suite_selector)
|
|
76
78
|
public_name = ech_config.echconfig_contents.public_name
|
|
@@ -79,20 +81,19 @@ module TTTLS13
|
|
|
79
81
|
kem_id = key_config&.kem_id&.uint16
|
|
80
82
|
config_id = key_config.config_id
|
|
81
83
|
cipher_suite = hpke_cipher_suite_selector.call(key_config)
|
|
82
|
-
aead_cipher =
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if [kem_id, aead_cipher, kdf_hash].any?(&:nil?)
|
|
84
|
+
aead_cipher = cipher_suite&.aead_id&.uint16
|
|
85
|
+
return [nil, nil, nil] \
|
|
86
|
+
if [kem_id, aead_cipher].any?(&:nil?)
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return [nil, nil] if pkr.nil?
|
|
88
|
+
kem_curve, hash = kem_id2dhkem(kem_id)
|
|
89
|
+
pkr = kem_curve&.new(hash)&.deserialize_public_key(public_key)
|
|
90
|
+
return [nil, nil, nil] if pkr.nil?
|
|
91
91
|
|
|
92
|
-
hpke = HPKE.new(
|
|
92
|
+
hpke = HPKE.new(kem_id, hash, aead_cipher)
|
|
93
93
|
base_s = hpke.setup_base_s(pkr, "tls ech\x00" + ech_config.encode)
|
|
94
94
|
enc = base_s[:enc]
|
|
95
95
|
ctx = base_s[:context_s]
|
|
96
|
+
ech_secret = base_s[:shared_secret]
|
|
96
97
|
mnl = ech_config.echconfig_contents.maximum_name_length
|
|
97
98
|
ech_state = EchState.new(
|
|
98
99
|
mnl,
|
|
@@ -102,7 +103,7 @@ module TTTLS13
|
|
|
102
103
|
ctx
|
|
103
104
|
)
|
|
104
105
|
|
|
105
|
-
[ech_state, enc]
|
|
106
|
+
[ech_state, enc, ech_secret]
|
|
106
107
|
end
|
|
107
108
|
# rubocop: enable Metrics/AbcSize
|
|
108
109
|
|
|
@@ -259,10 +260,10 @@ module TTTLS13
|
|
|
259
260
|
# https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-17#name-compliance-requirements
|
|
260
261
|
cipher_suite = HpkeSymmetricCipherSuite.new(
|
|
261
262
|
HpkeSymmetricCipherSuite::HpkeKdfId.new(
|
|
262
|
-
|
|
263
|
+
HPKE::HKDF_SHA256
|
|
263
264
|
),
|
|
264
265
|
HpkeSymmetricCipherSuite::HpkeAeadId.new(
|
|
265
|
-
|
|
266
|
+
HPKE::AES_128_GCM
|
|
266
267
|
)
|
|
267
268
|
)
|
|
268
269
|
# Set the enc field to a randomly-generated valid encapsulated public key
|
|
@@ -272,7 +273,7 @@ module TTTLS13
|
|
|
272
273
|
public_key = OpenSSL::PKey.read(
|
|
273
274
|
OpenSSL::PKey.generate_key('X25519').public_to_pem
|
|
274
275
|
)
|
|
275
|
-
hpke = HPKE.new(
|
|
276
|
+
hpke = HPKE.new(HPKE::DHKEM_X25519_HKDF_SHA256, HPKE::HKDF_SHA256, HPKE::AES_128_GCM)
|
|
276
277
|
enc = hpke.setup_base_s(public_key, '')[:enc]
|
|
277
278
|
# Set the payload field to a randomly-generated string of L+C bytes, where
|
|
278
279
|
# C is the ciphertext expansion of the selected AEAD scheme and L is the
|
|
@@ -281,7 +282,7 @@ module TTTLS13
|
|
|
281
282
|
#
|
|
282
283
|
# https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-17#section-6.2-2.4.1
|
|
283
284
|
payload_len = placeholder_encoded_ch_inner_len \
|
|
284
|
-
+ aead_id2overhead_len(
|
|
285
|
+
+ aead_id2overhead_len(HPKE::AES_128_GCM)
|
|
285
286
|
|
|
286
287
|
Message::Extension::ECHClientHello.new_outer(
|
|
287
288
|
cipher_suite:,
|
|
@@ -313,89 +314,29 @@ module TTTLS13
|
|
|
313
314
|
)
|
|
314
315
|
end
|
|
315
316
|
|
|
316
|
-
module KemId
|
|
317
|
-
# https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-kem-ids
|
|
318
|
-
P_256_SHA256 = 0x0010
|
|
319
|
-
P_384_SHA384 = 0x0011
|
|
320
|
-
P_521_SHA512 = 0x0012
|
|
321
|
-
X25519_SHA256 = 0x0020
|
|
322
|
-
X448_SHA512 = 0x0021
|
|
323
|
-
end
|
|
324
|
-
|
|
325
317
|
def self.kem_id2dhkem(kem_id)
|
|
326
318
|
case kem_id
|
|
327
|
-
when
|
|
328
|
-
|
|
329
|
-
when
|
|
330
|
-
|
|
331
|
-
when
|
|
332
|
-
|
|
333
|
-
when
|
|
334
|
-
|
|
335
|
-
when
|
|
336
|
-
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
def self.kem_curve_name2dhkem(kem_curve_name)
|
|
341
|
-
case kem_curve_name
|
|
342
|
-
when :p_256
|
|
343
|
-
HPKE::DHKEM::EC::P_256
|
|
344
|
-
when :p_384
|
|
345
|
-
HPKE::DHKEM::EC::P_384
|
|
346
|
-
when :p_521
|
|
347
|
-
HPKE::DHKEM::EC::P_521
|
|
348
|
-
when :x25519
|
|
349
|
-
HPKE::DHKEM::X25519
|
|
350
|
-
when :x448
|
|
351
|
-
HPKE::DHKEM::X448
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
module KdfId
|
|
356
|
-
# https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-kdf-ids
|
|
357
|
-
HKDF_SHA256 = 0x0001
|
|
358
|
-
HKDF_SHA384 = 0x0002
|
|
359
|
-
HKDF_SHA512 = 0x0003
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
def self.kdf_id2kdf_hash(kdf_id)
|
|
363
|
-
case kdf_id
|
|
364
|
-
when KdfId::HKDF_SHA256
|
|
365
|
-
:sha256
|
|
366
|
-
when KdfId::HKDF_SHA384
|
|
367
|
-
:sha384
|
|
368
|
-
when KdfId::HKDF_SHA512
|
|
369
|
-
:sha512
|
|
319
|
+
when HPKE::DHKEM_P256_HKDF_SHA256
|
|
320
|
+
[HPKE::DHKEM::EC::P_256, HPKE::HKDF_SHA256]
|
|
321
|
+
when HPKE::DHKEM_P384_HKDF_SHA384
|
|
322
|
+
[HPKE::DHKEM::EC::P_384, HPKE::HKDF_SHA384]
|
|
323
|
+
when HPKE::DHKEM_P521_HKDF_SHA512
|
|
324
|
+
[HPKE::DHKEM::EC::P_521, HPKE::HKDF_SHA512]
|
|
325
|
+
when HPKE::DHKEM_X25519_HKDF_SHA256
|
|
326
|
+
[HPKE::DHKEM::X25519, HPKE::HKDF_SHA256]
|
|
327
|
+
when HPKE::DHKEM_X448_HKDF_SHA512
|
|
328
|
+
[HPKE::DHKEM::X448, HPKE::HKDF_SHA512]
|
|
370
329
|
end
|
|
371
330
|
end
|
|
372
331
|
|
|
373
|
-
module AeadId
|
|
374
|
-
# https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-aead-ids
|
|
375
|
-
AES_128_GCM = 0x0001
|
|
376
|
-
AES_256_GCM = 0x0002
|
|
377
|
-
CHACHA20_POLY1305 = 0x0003
|
|
378
|
-
end
|
|
379
|
-
|
|
380
332
|
def self.aead_id2overhead_len(aead_id)
|
|
381
333
|
case aead_id
|
|
382
|
-
when
|
|
334
|
+
when HPKE::AES_128_GCM, HPKE::CHACHA20_POLY1305
|
|
383
335
|
16
|
|
384
|
-
when
|
|
336
|
+
when HPKE::AES_256_GCM
|
|
385
337
|
32
|
|
386
338
|
end
|
|
387
339
|
end
|
|
388
|
-
|
|
389
|
-
def self.aead_id2aead_cipher(aead_id)
|
|
390
|
-
case aead_id
|
|
391
|
-
when AeadId::AES_128_GCM
|
|
392
|
-
:aes_128_gcm
|
|
393
|
-
when AeadId::AES_256_GCM
|
|
394
|
-
:aes_256_gcm
|
|
395
|
-
when AeadId::CHACHA20_POLY1305
|
|
396
|
-
:chacha20_poly1305
|
|
397
|
-
end
|
|
398
|
-
end
|
|
399
340
|
end
|
|
400
341
|
|
|
401
342
|
class EchState
|
|
@@ -9,6 +9,8 @@ module TTTLS13
|
|
|
9
9
|
SERVER_HANDSHAKE_TRAFFIC_SECRET = 'SERVER_HANDSHAKE_TRAFFIC_SECRET'
|
|
10
10
|
CLIENT_TRAFFIC_SECRET_0 = 'CLIENT_TRAFFIC_SECRET_0'
|
|
11
11
|
SERVER_TRAFFIC_SECRET_0 = 'SERVER_TRAFFIC_SECRET_0'
|
|
12
|
+
ECH_SECRET = 'ECH_SECRET'
|
|
13
|
+
ECH_CONFIG = 'ECH_CONFIG'
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
class Writer
|
|
@@ -69,6 +71,26 @@ module TTTLS13
|
|
|
69
71
|
)
|
|
70
72
|
end
|
|
71
73
|
|
|
74
|
+
# @param client_random [String]
|
|
75
|
+
# @param ech_secret [String]
|
|
76
|
+
def write_ech_secret(client_random, ech_secret)
|
|
77
|
+
write_key_log(
|
|
78
|
+
Label::ECH_SECRET,
|
|
79
|
+
client_random,
|
|
80
|
+
ech_secret
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# @param client_random [String]
|
|
85
|
+
# @param ech_config [String]
|
|
86
|
+
def write_ech_config(client_random, ech_config)
|
|
87
|
+
write_key_log(
|
|
88
|
+
Label::ECH_CONFIG,
|
|
89
|
+
client_random,
|
|
90
|
+
ech_config
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
72
94
|
def close
|
|
73
95
|
@file&.close
|
|
74
96
|
end
|
data/lib/tttls1.3/version.rb
CHANGED
data/lib/tttls1.3.rb
CHANGED
data/tttls1.3.gemspec
CHANGED
|
@@ -15,13 +15,16 @@ 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
|
-
spec.add_development_dependency 'bundler'
|
|
25
|
+
spec.add_development_dependency 'bundler'
|
|
23
26
|
spec.add_dependency 'ech_config', '~> 0.0.3'
|
|
24
|
-
spec.add_dependency 'hpke'
|
|
27
|
+
spec.add_dependency 'hpke', '~> 1.0.0'
|
|
25
28
|
spec.add_dependency 'logger'
|
|
26
29
|
spec.add_dependency 'openssl', '>= 3'
|
|
27
30
|
end
|
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
|
|
@@ -13,16 +13,16 @@ dependencies:
|
|
|
13
13
|
name: bundler
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
18
|
+
version: '0'
|
|
19
19
|
type: :development
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
25
|
+
version: '0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: ech_config
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -41,16 +41,16 @@ dependencies:
|
|
|
41
41
|
name: hpke
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
|
-
- - "
|
|
44
|
+
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version:
|
|
46
|
+
version: 1.0.0
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
|
-
- - "
|
|
51
|
+
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version:
|
|
53
|
+
version: 1.0.0
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: logger
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -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: 3.6.
|
|
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.1', '3.2', '3.3']
|
|
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@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c # v1.237.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
|