tttls1.3 0.2.18 → 0.2.19

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a07aded25aecad8bd61ff9fd49a70df15c8abf356d4747891486dd81386b68d
4
- data.tar.gz: 4637b3288dab22caae951cc43c283057fd3ed215fc5fa86e318becc3369ac7b2
3
+ metadata.gz: 60aaa0dddc8e01d6ee1c89a81de02e7cd9e05e0169e11381ebb68aa919644f11
4
+ data.tar.gz: 974b5c89009c2a63a6d99a608b32463cb0b6dc4bb0ed9e915cd03cca45ce2ea9
5
5
  SHA512:
6
- metadata.gz: 621a8f82c99e21e964cfb6defe14e2f8864f1c42cc94c9af725de2ff73929226d99a694c893ada3fc44c5224be70ec87bfcb291eceab271b33e4759c6c900cd8
7
- data.tar.gz: 9088db06f998013577eb647d064e97035047a2cef7799010bc91f18384787bdf158357fd33c296b92ec1bc07a2ad1b307c98d0217735dfef5c6acf565f3c9433
6
+ metadata.gz: b9ab939f9010481de463c2fbf81dc230cdd653dac47286e1fd61f8820da796a09b0675837dc119ebd8f1ddd137383ccc87aec18edd4945312cb0923ebbe77e52
7
+ data.tar.gz: 74d0635bba0274cfaf9ed980d2f0cef3351ab1f820a17720424dececaeb86c6ea36d6f9c3d7b69c8e81b52c4790b1796ba59d02a95a30d4afe90bad35767d442
@@ -27,8 +27,11 @@ jobs:
27
27
  gem install bundler
28
28
  bundle --version
29
29
  bundle install
30
- - name: Run test
31
- run: |
32
- bundle exec rake
33
- bundle exec rake interop:client
34
- bundle exec rake interop:server
30
+ - name: Run rubocop
31
+ run: bundle exec rake rubocop
32
+ - name: Run rspec
33
+ run: bundle exec rake spec
34
+ - name: Run interop client
35
+ run: bundle exec rake interop:client
36
+ - name: Run interop server
37
+ run: bundle exec rake interop:server
data/README.md CHANGED
@@ -92,9 +92,9 @@ tttls1.3 client is configurable using keyword arguments.
92
92
  | `:supported_groups` | Array of TTTLS13::NamedGroup constant | `SECP256R1`, `SECP384R1`, `SECP521R1` | List of named groups offered in ClientHello extensions. |
93
93
  | `:key_share_groups` | Array of TTTLS13::NamedGroup constant | nil | List of named groups offered in KeyShareClientHello. In default, KeyShareClientHello has only a KeyShareEntry of most preferred named group in `:supported_groups`. You can set this to send KeyShareClientHello that has multiple KeyShareEntry. |
94
94
  | `:alpn` | Array of String | nil | List of application protocols offered in ClientHello extensions. If not needed to be present, set nil. |
95
- | `:process_new_session_ticket` | Proc | nil | Proc that processes received NewSessionTicket. Its 3 arguments are TTTLS13::Message::NewSessionTicket, resumption master secret and cipher suite. If not needed to process NewSessionTicket, set nil. |
95
+ | `:process_new_session_ticket` | Proc | nil | Proc that processes received NewSessionTicket. Its 3 arguments are TTTLS13::Message::NewSessionTicket, resumption main secret and cipher suite. If not needed to process NewSessionTicket, set nil. |
96
96
  | `:ticket` | String | nil | The ticket for PSK. |
97
- | `:resumption_master_secret` | String | nil | The resumption master secret. |
97
+ | `:resumption_secret` | String | nil | The resumption main secret. |
98
98
  | `:psk_cipher_suite` | TTTLS13::CipherSuite constant | nil | The cipher suite for PSK. |
99
99
  | `:ticket_nonce` | String | nil | The ticket\_nonce for PSK. |
100
100
  | `:ticket_age_add` | String | nil | The ticket\_age\_add for PSK. |
@@ -15,7 +15,7 @@ process_new_session_ticket = lambda do |nst, rms, cs|
15
15
  return if Time.now.to_i - nst.timestamp > nst.ticket_lifetime
16
16
 
17
17
  settings_2nd[:ticket] = nst.ticket
18
- settings_2nd[:resumption_master_secret] = rms
18
+ settings_2nd[:resumption_main_secret] = rms
19
19
  settings_2nd[:psk_cipher_suite] = cs
20
20
  settings_2nd[:ticket_nonce] = nst.ticket_nonce
21
21
  settings_2nd[:ticket_age_add] = nst.ticket_age_add
@@ -16,7 +16,7 @@ process_new_session_ticket = lambda do |nst, rms, cs|
16
16
 
17
17
  settings_2nd[:key_share_groups] = [] # empty KeyShareClientHello.client_shares
18
18
  settings_2nd[:ticket] = nst.ticket
19
- settings_2nd[:resumption_master_secret] = rms
19
+ settings_2nd[:resumption_main_secret] = rms
20
20
  settings_2nd[:psk_cipher_suite] = cs
21
21
  settings_2nd[:ticket_nonce] = nst.ticket_nonce
22
22
  settings_2nd[:ticket_age_add] = nst.ticket_age_add
@@ -15,7 +15,7 @@ process_new_session_ticket = lambda do |nst, rms, cs|
15
15
  return if Time.now.to_i - nst.timestamp > nst.ticket_lifetime
16
16
 
17
17
  settings_2nd[:ticket] = nst.ticket
18
- settings_2nd[:resumption_master_secret] = rms
18
+ settings_2nd[:resumption_main_secret] = rms
19
19
  settings_2nd[:psk_cipher_suite] = cs
20
20
  settings_2nd[:ticket_nonce] = nst.ticket_nonce
21
21
  settings_2nd[:ticket_age_add] = nst.ticket_age_add
@@ -1,10 +1,10 @@
1
1
  # encoding: ascii-8bit
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative 'helper'
4
+ require_relative 'spec_helper'
5
5
 
6
6
  FIXTURES_DIR = __dir__ + '/../spec/fixtures'
7
- PORT = 4433
7
+ PORT = 14433
8
8
 
9
9
  RSpec.describe Client do
10
10
  # normal [Boolean] Is this nominal scenarios?
@@ -173,6 +173,7 @@ RSpec.describe Client do
173
173
  + '-tls1_3 ' \
174
174
  + '-www ' \
175
175
  + '-quiet ' \
176
+ + "-accept #{PORT} " \
176
177
  + opt
177
178
  pid = spawn('docker run ' \
178
179
  + "--volume #{FIXTURES_DIR}:/tmp " \
@@ -1,7 +1,7 @@
1
1
  # encoding: ascii-8bit
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative 'helper'
4
+ require_relative 'spec_helper'
5
5
 
6
6
  FIXTURES_DIR = __dir__ + '/../spec/fixtures'
7
7
  PORT = 4433
@@ -187,8 +187,6 @@ RSpec.describe Server do
187
187
 
188
188
  let(:client) do
189
189
  ip = Socket.ip_address_list.find(&:ipv4_private?).ip_address
190
- wait_to_listen(ip, PORT)
191
-
192
190
  cmd = 'echo -n ping | openssl s_client ' \
193
191
  + "-connect local:#{PORT} " \
194
192
  + '-tls1_3 ' \
@@ -13,13 +13,20 @@ include TTTLS13::Error
13
13
  # rubocop: enable Style/MixinUsage
14
14
 
15
15
  def wait_to_listen(host, port)
16
- loop do
17
- s = TCPSocket.open(host, port) # check by TCP handshake
18
- rescue # rubocop: disable Style/RescueStandardError
19
- sleep(0.2)
16
+ 10.times do
17
+ soc = TCPSocket.open(host, port)
18
+ ctx = OpenSSL::SSL::SSLContext.new
19
+ ctx.max_version = OpenSSL::SSL::TLS1_3_VERSION
20
+ ssl = OpenSSL::SSL::SSLSocket.new(soc, ctx)
21
+ ssl.sync_close = true
22
+ ssl.connect
23
+ rescue => e # rubocop: disable Style/RescueStandardError
24
+ p e
25
+ soc&.close
26
+ sleep(0.5)
20
27
  next
21
28
  else
22
- s.close
29
+ ssl.close
23
30
  break
24
31
  end
25
32
  end
@@ -58,7 +58,9 @@ module TTTLS13
58
58
  alpn: nil,
59
59
  process_new_session_ticket: nil,
60
60
  ticket: nil,
61
+ # @deprecated Please use `resumption_secret` instead
61
62
  resumption_master_secret: nil,
63
+ resumption_secret: nil,
62
64
  psk_cipher_suite: nil,
63
65
  ticket_nonce: nil,
64
66
  ticket_age_add: nil,
@@ -84,6 +86,15 @@ module TTTLS13
84
86
  @endpoint = :client
85
87
  @hostname = hostname
86
88
  @settings = DEFAULT_CLIENT_SETTINGS.merge(settings)
89
+ # NOTE: backward compatibility
90
+ if @settings[:resumption_secret].nil? &&
91
+ !@settings[:resumption_master_secret].nil?
92
+ @settings[:resumption_secret] =
93
+ @settings.delete(:resumption_master_secret) \
94
+ end
95
+ raise Error::ConfigError if @settings[:resumption_secret] !=
96
+ @settings[:resumption_master_secret]
97
+
87
98
  logger.level = @settings[:loglevel]
88
99
 
89
100
  @early_data = ''
@@ -137,7 +148,7 @@ module TTTLS13
137
148
  priv_keys = {} # Hash of NamedGroup => OpenSSL::PKey::$Object
138
149
  if use_psk?
139
150
  psk = gen_psk_from_nst(
140
- @settings[:resumption_master_secret],
151
+ @settings[:resumption_secret],
141
152
  @settings[:ticket_nonce],
142
153
  CipherSuite.digest(@settings[:psk_cipher_suite])
143
154
  )
@@ -423,8 +434,8 @@ module TTTLS13
423
434
  transcript[CH].first.random,
424
435
  key_schedule.server_application_traffic_secret
425
436
  )
426
- @exporter_master_secret = key_schedule.exporter_master_secret
427
- @resumption_master_secret = key_schedule.resumption_master_secret
437
+ @exporter_secret = key_schedule.exporter_secret
438
+ @resumption_secret = key_schedule.resumption_secret
428
439
  @state = ClientState::CONNECTED
429
440
  when ClientState::CONNECTED
430
441
  logger.debug('ClientState::CONNECTED')
@@ -544,7 +555,7 @@ module TTTLS13
544
555
  # @return [Boolean]
545
556
  def use_psk?
546
557
  !@settings[:ticket].nil? &&
547
- !@settings[:resumption_master_secret].nil? &&
558
+ !@settings[:resumption_secret].nil? &&
548
559
  !@settings[:psk_cipher_suite].nil? &&
549
560
  !@settings[:ticket_nonce].nil? &&
550
561
  !@settings[:ticket_age_add].nil? &&
@@ -568,14 +579,14 @@ module TTTLS13
568
579
  send_record(ap_record)
569
580
  end
570
581
 
571
- # @param resumption_master_secret [String]
582
+ # @param resumption_secret [String]
572
583
  # @param ticket_nonce [String]
573
584
  # @param digest [String] name of digest algorithm
574
585
  #
575
586
  # @return [String]
576
- def gen_psk_from_nst(resumption_master_secret, ticket_nonce, digest)
587
+ def gen_psk_from_nst(resumption_secret, ticket_nonce, digest)
577
588
  hash_len = OpenSSL::Digest.new(digest).digest_length
578
- KeySchedule.hkdf_expand_label(resumption_master_secret, 'resumption',
589
+ KeySchedule.hkdf_expand_label(resumption_secret, 'resumption',
579
590
  ticket_nonce, hash_len, digest)
580
591
  end
581
592
 
@@ -949,7 +960,7 @@ module TTTLS13
949
960
  def process_new_session_ticket(nst)
950
961
  super(nst)
951
962
 
952
- rms = @resumption_master_secret
963
+ rms = @resumption_secret
953
964
  cs = @cipher_suite
954
965
  @settings[:process_new_session_ticket]&.call(nst, rms, cs)
955
966
  end
@@ -25,7 +25,7 @@ module TTTLS13
25
25
  @send_record_size = Message::DEFAULT_RECORD_SIZE_LIMIT
26
26
  @recv_record_size = Message::DEFAULT_RECORD_SIZE_LIMIT
27
27
  @alpn = nil # String
28
- @exporter_master_secret = nil # String
28
+ @exporter_secret = nil # String
29
29
  end
30
30
 
31
31
  # @raise [TTTLS13::Error::ConfigError]
@@ -109,15 +109,15 @@ module TTTLS13
109
109
  #
110
110
  # @return [String, nil]
111
111
  def exporter(label, context, key_length)
112
- return nil if @exporter_master_secret.nil? || @cipher_suite.nil?
112
+ return nil if @exporter_secret.nil? || @cipher_suite.nil?
113
113
 
114
114
  digest = CipherSuite.digest(@cipher_suite)
115
- do_exporter(@exporter_master_secret, digest, label, context, key_length)
115
+ do_exporter(@exporter_secret, digest, label, context, key_length)
116
116
  end
117
117
 
118
118
  private
119
119
 
120
- # @param secret [String] (early_)exporter_master_secret
120
+ # @param secret [String] (early_)exporter_secret
121
121
  # @param digest [String] name of digest algorithm
122
122
  # @param label [String]
123
123
  # @param context [String]
@@ -517,10 +517,8 @@ module TTTLS13
517
517
  #
518
518
  # @return [Array of TTTLS13::Message::Extension::SignatureAlgorithms]
519
519
  def do_select_signature_algorithms(signature_algorithms, crt)
520
- spki = OpenSSL::Netscape::SPKI.new
521
- spki.public_key = crt.public_key
522
- pka = OpenSSL::ASN1.decode(spki.to_der)
523
- .value.first.value.first.value.first.value.first.value
520
+ pka = OpenSSL::ASN1.decode(crt.public_key.to_der)
521
+ .value.first.value.first.value
524
522
  signature_algorithms.select do |sa|
525
523
  case sa
526
524
  when SignatureScheme::ECDSA_SECP256R1_SHA256,
@@ -61,8 +61,15 @@ module TTTLS13
61
61
  self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
62
62
  end
63
63
 
64
+ # @deprecated Please use `early_exporter_secret` instead
65
+ #
64
66
  # @return [String]
65
67
  def early_exporter_master_secret
68
+ early_exporter_secret
69
+ end
70
+
71
+ # @return [String]
72
+ def early_exporter_secret
66
73
  hash = OpenSSL::Digest.digest(@digest, '')
67
74
  derive_secret(early_secret, 'e exp master', hash)
68
75
  end
@@ -126,22 +133,36 @@ module TTTLS13
126
133
  self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
127
134
  end
128
135
 
136
+ # @deprecated Please use `main_salt` instead
137
+ #
129
138
  # @return [String]
130
139
  def master_salt
140
+ main_salt
141
+ end
142
+
143
+ # @return [String]
144
+ def main_salt
131
145
  hash = OpenSSL::Digest.digest(@digest, '')
132
146
  derive_secret(handshake_secret, 'derived', hash)
133
147
  end
134
148
 
149
+ # @deprecated Please use `main_secret` instead
150
+ #
135
151
  # @return [String]
136
152
  def master_secret
153
+ main_secret
154
+ end
155
+
156
+ # @return [String]
157
+ def main_secret
137
158
  ikm = "\x00" * @hash_len
138
- hkdf_extract(ikm, master_salt)
159
+ hkdf_extract(ikm, main_salt)
139
160
  end
140
161
 
141
162
  # @return [String]
142
163
  def client_application_traffic_secret
143
164
  hash = @transcript.hash(@digest, SF)
144
- derive_secret(master_secret, 'c ap traffic', hash)
165
+ derive_secret(main_secret, 'c ap traffic', hash)
145
166
  end
146
167
 
147
168
  # @return [String]
@@ -159,7 +180,7 @@ module TTTLS13
159
180
  # @return [String]
160
181
  def server_application_traffic_secret
161
182
  hash = @transcript.hash(@digest, SF)
162
- derive_secret(master_secret, 's ap traffic', hash)
183
+ derive_secret(main_secret, 's ap traffic', hash)
163
184
  end
164
185
 
165
186
  # @return [String]
@@ -174,16 +195,30 @@ module TTTLS13
174
195
  self.class.hkdf_expand_label(secret, 'iv', '', @iv_len, @digest)
175
196
  end
176
197
 
198
+ # @deprecated Please use `exporter_secret` instead
199
+ #
177
200
  # @return [String]
178
201
  def exporter_master_secret
202
+ exporter_secret
203
+ end
204
+
205
+ # @return [String]
206
+ def exporter_secret
179
207
  hash = @transcript.hash(@digest, SF)
180
- derive_secret(master_secret, 'exp master', hash)
208
+ derive_secret(main_secret, 'exp master', hash)
181
209
  end
182
210
 
211
+ # @deprecated Please use `resumption_secret` instead
212
+ #
183
213
  # @return [String]
184
214
  def resumption_master_secret
215
+ resumption_secret
216
+ end
217
+
218
+ # @return [String]
219
+ def resumption_secret
185
220
  hash = @transcript.hash(@digest, CF)
186
- derive_secret(master_secret, 'res master', hash)
221
+ derive_secret(main_secret, 'res master', hash)
187
222
  end
188
223
 
189
224
  # @param ikm [String]
@@ -91,8 +91,7 @@ module TTTLS13
91
91
  priv_keys = {}
92
92
  kse = groups.map do |group|
93
93
  curve = NamedGroup.curve_name(group)
94
- ec = OpenSSL::PKey::EC.new(curve)
95
- ec.generate_key!
94
+ ec = OpenSSL::PKey::EC.generate(curve)
96
95
  # store private key to do the key-exchange
97
96
  priv_keys.store(group, ec)
98
97
  KeyShareEntry.new(
@@ -115,8 +114,7 @@ module TTTLS13
115
114
  # @return [OpenSSL::PKey::EC.$Object]
116
115
  def self.gen_sh_key_share(group)
117
116
  curve = NamedGroup.curve_name(group)
118
- ec = OpenSSL::PKey::EC.new(curve)
119
- ec.generate_key!
117
+ ec = OpenSSL::PKey::EC.generate(curve)
120
118
 
121
119
  key_share = KeyShare.new(
122
120
  msg_type: HandshakeType::SERVER_HELLO,
@@ -323,7 +323,7 @@ module TTTLS13
323
323
  transcript[CH].first.random,
324
324
  key_schedule.client_application_traffic_secret
325
325
  )
326
- @exporter_master_secret = key_schedule.exporter_master_secret
326
+ @exporter_secret = key_schedule.exporter_secret
327
327
  @state = ServerState::CONNECTED
328
328
  when ServerState::CONNECTED
329
329
  logger.debug('ServerState::CONNECTED')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TTTLS13
4
- VERSION = '0.2.18'
4
+ VERSION = '0.2.19'
5
5
  end
@@ -6,13 +6,28 @@ require_relative 'spec_helper'
6
6
  RSpec.describe Connection do
7
7
  context 'connection, Simple 1-RTT Handshake,' do
8
8
  let(:key) do
9
- rsa = OpenSSL::PKey::RSA.new
10
- rsa.set_key(OpenSSL::BN.new(TESTBINARY_PKEY_MODULUS, 2),
11
- OpenSSL::BN.new(TESTBINARY_PKEY_PUBLIC_EXPONENT, 2),
12
- OpenSSL::BN.new(TESTBINARY_PKEY_PRIVATE_EXPONENT, 2))
13
- rsa.set_factors(OpenSSL::BN.new(TESTBINARY_PKEY_PRIME1, 2),
14
- OpenSSL::BN.new(TESTBINARY_PKEY_PRIME2, 2))
15
- rsa
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)
16
31
  end
17
32
 
18
33
  let(:ct) do
@@ -35,8 +35,7 @@ RSpec.describe Extensions do
35
35
  end
36
36
 
37
37
  let(:key_share) do
38
- ec = OpenSSL::PKey::EC.new('prime256v1')
39
- ec.generate_key!
38
+ ec = OpenSSL::PKey::EC.generate('prime256v1')
40
39
  KeyShare.new(
41
40
  msg_type: HandshakeType::CLIENT_HELLO,
42
41
  key_share_entry: [
@@ -37,9 +37,9 @@ RSpec.describe KeySchedule do
37
37
  .to eq TESTBINARY_C_AP_TRAFFIC
38
38
  expect(key_schedule.server_application_traffic_secret)
39
39
  .to eq TESTBINARY_S_AP_TRAFFIC
40
- expect(key_schedule.exporter_master_secret)
40
+ expect(key_schedule.exporter_secret)
41
41
  .to eq TESTBINARY_EXP_MASTER
42
- expect(key_schedule.resumption_master_secret)
42
+ expect(key_schedule.resumption_secret)
43
43
  .to eq TESTBINARY_RES_MASTER
44
44
  end
45
45
 
data/spec/server_spec.rb CHANGED
@@ -109,13 +109,28 @@ RSpec.describe Server do
109
109
 
110
110
  context 'server' do
111
111
  let(:key) do
112
- rsa = OpenSSL::PKey::RSA.new
113
- rsa.set_key(OpenSSL::BN.new(TESTBINARY_PKEY_MODULUS, 2),
114
- OpenSSL::BN.new(TESTBINARY_PKEY_PUBLIC_EXPONENT, 2),
115
- OpenSSL::BN.new(TESTBINARY_PKEY_PRIVATE_EXPONENT, 2))
116
- rsa.set_factors(OpenSSL::BN.new(TESTBINARY_PKEY_PRIME1, 2),
117
- OpenSSL::BN.new(TESTBINARY_PKEY_PRIME2, 2))
118
- rsa
112
+ n = OpenSSL::BN.new(TESTBINARY_PKEY_MODULUS, 2)
113
+ e = OpenSSL::BN.new(TESTBINARY_PKEY_PUBLIC_EXPONENT, 2)
114
+ d = OpenSSL::BN.new(TESTBINARY_PKEY_PRIVATE_EXPONENT, 2)
115
+ p = OpenSSL::BN.new(TESTBINARY_PKEY_PRIME1, 2)
116
+ q = OpenSSL::BN.new(TESTBINARY_PKEY_PRIME2, 2)
117
+ dmp1 = d % (p - 1.to_bn)
118
+ dmq1 = d % (q - 1.to_bn)
119
+ iqmp = q**-1.to_bn % p
120
+ asn1 = OpenSSL::ASN1::Sequence(
121
+ [
122
+ OpenSSL::ASN1::Integer(0),
123
+ OpenSSL::ASN1::Integer(n),
124
+ OpenSSL::ASN1::Integer(e),
125
+ OpenSSL::ASN1::Integer(d),
126
+ OpenSSL::ASN1::Integer(p),
127
+ OpenSSL::ASN1::Integer(q),
128
+ OpenSSL::ASN1::Integer(dmp1),
129
+ OpenSSL::ASN1::Integer(dmq1),
130
+ OpenSSL::ASN1::Integer(iqmp)
131
+ ]
132
+ )
133
+ OpenSSL::PKey::RSA.new(asn1)
119
134
  end
120
135
 
121
136
  let(:ct) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tttls1.3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.18
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekuwayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-18 00:00:00.000000000 Z
11
+ date: 2023-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,8 +78,8 @@ files:
78
78
  - example/https_client_using_ticket.rb
79
79
  - example/https_server.rb
80
80
  - interop/client_spec.rb
81
- - interop/helper.rb
82
81
  - interop/server_spec.rb
82
+ - interop/spec_helper.rb
83
83
  - lib/tttls1.3.rb
84
84
  - lib/tttls1.3/cipher_suites.rb
85
85
  - lib/tttls1.3/client.rb