dnsruby 1.61.9 → 1.71.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f1d44662973a06d7ff5296b1c49530b10e58a08ca5df87c893bb25e06e4bf7c
4
- data.tar.gz: b82b2920d6d24ff8907d2e9b776a53f7034c11610335626ea31ee1485ffb6dde
3
+ metadata.gz: 269c27f2434453482847eab90060c2de583ca876e9056b8acff0c9df23a64a84
4
+ data.tar.gz: 37c09c9a2c25f97cfd391ee8662de09b1698a44b189abe2cd75753579c87379a
5
5
  SHA512:
6
- metadata.gz: 02f7ac0626839e3faf33f72a2b98e620ca1ac9bb5d11c06299b403c79e0552c5b0160b40978ead7aba27d8801b2b339a1cdeb856772c0241883f06b68a42beb5
7
- data.tar.gz: bdc9cf4c7e89b11fb67871b480957f3f28bd29e472438490e918041f9e1d2682fa434ce6d66dff283843e7c67fc2f002482175e2a7c6b6a05106785b6f7797cb
6
+ metadata.gz: 6863374c8f220932c6aff08fce2a8afd1e38267f44f505121516580b69e4c5691a613d11b45e4227939586f6283743871834138bca06a8776a26f6b32c2141ad
7
+ data.tar.gz: e58edc0688147d6c8e6576bf6144469d52b09120da7a7d7d0c00fc962579e1c49e23962264caa448d1bb54c70559e25e4663a176d95fe5282a43dba631233035
@@ -7,7 +7,7 @@ jobs:
7
7
  runs-on: ubuntu-latest
8
8
  strategy:
9
9
  matrix:
10
- ruby: [ '2.5', '2.6', '2.7', '3.0', '3.1' ] # , 'ruby-head' ]
10
+ ruby: [ '3.1', '3.2', '3.3' ] # , 'ruby-head' ]
11
11
  name: Ruby ${{ matrix.ruby }} tests
12
12
  steps:
13
13
  - uses: actions/checkout@v2
data/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Release Notes
2
2
 
3
+ ## v.1.71.0
4
+
5
+ * Fix assigning public_key in ECDSA - thanks Jiří Kubíček!
6
+
7
+ ## v.1.70.0
8
+
9
+ * OpenSSL 3 support
10
+ * Resource record hashes no longer include the rdata
11
+ * Removed requite to title-cased Digest - thanks jhawthron
12
+
3
13
  ## v.1.61.9
4
14
 
5
15
  * Remove unused net-ftp dependency
data/Rakefile CHANGED
@@ -27,10 +27,10 @@ def create_task(task_name, test_suite_filespec)
27
27
  end
28
28
 
29
29
  create_task(:test, 'test/ts_dnsruby.rb')
30
+ create_task(:dnskey, 'test/tc_dnskey.rb')
30
31
  create_task(:test_offline, 'test/ts_offline.rb')
31
32
  create_task(:test_online, 'test/ts_online.rb')
32
33
  create_task(:soak, 'test/tc_soak.rb')
33
34
  create_task(:message, 'test/tc_message.rb')
34
35
  create_task(:cache, 'test/tc_cache.rb')
35
36
  create_task(:pipe, 'test/tc_tcp_pipelining.rb')
36
- create_task(:resolv, 'test/tc_resolv.rb')
data/dnsruby.gemspec CHANGED
@@ -36,15 +36,16 @@ DNSSEC NSEC3 support.'
36
36
  }
37
37
 
38
38
  s.add_development_dependency 'rake', '>= 13.0.6'
39
- s.add_development_dependency 'minitest', '~> 5.14.4'
40
- s.add_development_dependency 'rubydns', '~> 2.0.1'
41
- s.add_development_dependency 'nio4r', '~> 2.0'
39
+ s.add_development_dependency 'minitest', '~> 5.18.0'
40
+ s.add_development_dependency 'rubydns', '>= 2.0.2'
41
+ s.add_development_dependency 'nio4r', '>= 2.7.0'
42
42
  s.add_development_dependency 'minitest-display', '>= 0.3.1'
43
- s.add_development_dependency('yard', '~> 0.9')
43
+ s.add_development_dependency('yard', '>= 0.9')
44
+ # s.add_development_dependency('io-event', '>=1.1.7')
44
45
 
45
46
  if RUBY_VERSION >= "1.9.3"
46
- s.add_development_dependency 'coveralls', '~> 0.7'
47
+ s.add_development_dependency 'coveralls', '~> 0.8.23'
47
48
  end
48
49
 
49
- s.add_runtime_dependency 'simpleidn', '~> 0.1'
50
+ s.add_runtime_dependency 'simpleidn', '~> 0.2.1'
50
51
  end
@@ -294,11 +294,11 @@ module Dnsruby
294
294
  begin
295
295
  key_text.gsub!(/\n/, "")
296
296
  key_text.gsub!(/ /, "")
297
- # @key=Base64.decode64(key_text)
298
- @key=key_text.unpack("m*")[0]
297
+ @key=Base64.decode64(key_text)
299
298
  public_key
300
299
  get_new_key_tag
301
- rescue Exception
300
+ rescue Exception => e
301
+ Dnsruby.log.error(e)
302
302
  raise ArgumentError.new("Key #{key_text} invalid")
303
303
  end
304
304
  end
@@ -341,13 +341,12 @@ module Dnsruby
341
341
  modulus = RR::get_num(@key[pos, @key.length])
342
342
  @key_length = (@key.length - pos) * 8
343
343
 
344
- pkey = OpenSSL::PKey::RSA.new
345
- begin
346
- pkey.set_key(modulus, exponent, nil) # use set_key, present in later versions of openssl gem
347
- rescue NoMethodError
348
- pkey.e = exponent # set_key not available in earlier versions, use this approach instead
349
- pkey.n = modulus
350
- end
344
+ data_sequence = OpenSSL::ASN1::Sequence([
345
+ OpenSSL::ASN1::Integer(modulus),
346
+ OpenSSL::ASN1::Integer(exponent)
347
+ ])
348
+ asn1 = OpenSSL::ASN1::Sequence(data_sequence)
349
+ pkey = OpenSSL::PKey::RSA.new(asn1.to_der)
351
350
  return pkey
352
351
  end
353
352
 
@@ -366,18 +365,25 @@ module Dnsruby
366
365
  pos += pgy_len
367
366
  @key_length = (pgy_len * 8)
368
367
 
369
- pkey = OpenSSL::PKey::DSA.new
370
- begin
371
- pkey.set_pgq(p,g,q)
372
- pkey.set_key(y, nil) # use set_pgq and set_key, present in later versions of openssl gem
373
- rescue NoMethodError
374
- pkey.p = p # set_key not available in earlier versions, use this approach instead
375
- pkey.q = q
376
- pkey.g = g
377
- pkey.pub_key = y
378
- end
379
-
380
- pkey
368
+ asn1 = OpenSSL::ASN1::Sequence.new(
369
+ [
370
+ OpenSSL::ASN1::Sequence.new(
371
+ [
372
+ OpenSSL::ASN1::ObjectId.new('DSA'),
373
+ OpenSSL::ASN1::Sequence.new(
374
+ [
375
+ OpenSSL::ASN1::Integer.new(p),
376
+ OpenSSL::ASN1::Integer.new(q),
377
+ OpenSSL::ASN1::Integer.new(g)
378
+ ]
379
+ )
380
+ ]
381
+ ),
382
+ OpenSSL::ASN1::BitString.new(OpenSSL::ASN1::Integer.new(y).to_der)
383
+ ]
384
+ )
385
+
386
+ pkey = OpenSSL::PKey::DSA.new(asn1.to_der)
381
387
  end
382
388
 
383
389
  # RFC6605, section 4
@@ -386,15 +392,22 @@ module Dnsruby
386
392
  # uncompressed form of a curve point, "x | y".
387
393
  def ec_key(curve = 'prime256v1')
388
394
  group = OpenSSL::PKey::EC::Group.new(curve)
389
- pkey = OpenSSL::PKey::EC.new(group)
390
-
391
395
  # DNSSEC pub does not have first octet that determines whether it's uncompressed
392
396
  # or compressed form, but it's required by OpenSSL to parse EC point correctly
393
- point_from_pub = "\x04" + @key.to_s # octet string, \x04 prefix determines uncompressed
394
- pkey.public_key = OpenSSL::PKey::EC::Point.new(group, point_from_pub)
395
-
396
- pkey
397
+ dnskey_bn = OpenSSL::BN.new("\x04" + @key, 2)
398
+ key_point = OpenSSL::PKey::EC::Point.new(group, dnskey_bn)
399
+
400
+ asn1 = OpenSSL::ASN1::Sequence.new(
401
+ [
402
+ OpenSSL::ASN1::Sequence.new([
403
+ OpenSSL::ASN1::ObjectId.new("id-ecPublicKey"),
404
+ OpenSSL::ASN1::ObjectId.new(group.curve_name)
405
+ ]),
406
+ OpenSSL::ASN1::BitString.new(key_point.to_octet_string(:uncompressed))
407
+ ]
408
+ )
409
+ OpenSSL::PKey::EC.new(asn1.to_der)
397
410
  end
398
411
  end
399
412
  end
400
- end
413
+ end
@@ -14,11 +14,8 @@
14
14
  # limitations under the License.
15
15
  # ++
16
16
  require 'base64'
17
- begin
18
- require 'Digest/sha2'
19
- rescue LoadError
20
- require 'digest/sha2'
21
- end
17
+ require 'digest/sha2'
18
+
22
19
  module Dnsruby
23
20
  class RR
24
21
  # RFC4034, section 4
@@ -350,7 +350,7 @@ class RR
350
350
  end
351
351
 
352
352
  def hash # :nodoc:
353
- vars = (self.instance_variables - [:@ttl]).sort
353
+ vars = (self.instance_variables - [:@ttl, :@rdata]).sort
354
354
  vars.inject(0) do |hash_value, var_name|
355
355
  hash_value ^ self.instance_variable_get(var_name).hash
356
356
  end
@@ -234,7 +234,7 @@ module Dnsruby
234
234
  def verify_common(response)#:nodoc: all
235
235
  tsig_rr = response.tsig
236
236
 
237
- if (!tsig_rr)
237
+ if (!tsig_rr)
238
238
  response.tsigerror = RCode.FORMERR
239
239
  response.tsigstate = :Failed
240
240
  return false
@@ -1,3 +1,3 @@
1
1
  module Dnsruby
2
- VERSION = '1.61.9'
2
+ VERSION = '1.71.0'
3
3
  end
@@ -138,7 +138,7 @@ module Dnsruby
138
138
  send_message(socket, msg)
139
139
  next
140
140
  end
141
- raise ResolvError.new(rcode.string);
141
+ raise ResolvError.new(rcode.string)
142
142
  end
143
143
 
144
144
  if (response.question[0].qtype != @transfer_type)
data/test/tc_dns.rb CHANGED
@@ -25,7 +25,7 @@ class TestDNS < Minitest::Test
25
25
  end
26
26
 
27
27
  def test_ipv4_address
28
- Dnsruby::DNS.open { |dns| dns.getnames(Dnsruby::IPv4.create("221.186.184.68")) }
28
+ Dnsruby::DNS.open { |dns| dns.getnames(Dnsruby::IPv4.create("8.8.8.8")) }
29
29
  end
30
30
 
31
31
  # def test_resolv_rb_api
data/test/tc_ecdsa.rb ADDED
@@ -0,0 +1,27 @@
1
+ require_relative 'spec_helper'
2
+
3
+ Dnsruby::TheLog.level = Logger::DEBUG
4
+
5
+ class VerifierTest < Minitest::Test
6
+
7
+ def test_ecdsa
8
+ inner_resolver = Dnsruby::Resolver.new
9
+ inner_resolver.do_validation = true
10
+ inner_resolver.dnssec = true
11
+ resolver = Dnsruby::Recursor.new(inner_resolver)
12
+ resolver.dnssec = true
13
+
14
+ # Dnsruby::TheLog.level=Logger::DEBUG
15
+
16
+ name = 'carlgo11.com'
17
+ type = 'A'
18
+ klass = 'IN'
19
+
20
+ begin
21
+ answer = resolver.query(name, type, klass)
22
+ print answer
23
+ rescue Exception => e
24
+ fatal_error("query failed: #{e}")
25
+ end
26
+ end
27
+ end
data/test/tc_res_file.rb CHANGED
@@ -21,12 +21,6 @@ class TestAResolverFile < Minitest::Test
21
21
  Dnsruby::Config.reset
22
22
  end
23
23
 
24
- # def test_bad_resFile
25
- # res = Dnsruby::DNS.new("test/resolv.conf.bad")
26
- # res.getaddress("bbc.co.uk")
27
- # assert_nil res
28
- # end
29
-
30
24
  def test_resFile
31
25
  res = Dnsruby::DNS.new("test/resolv.conf")
32
26
 
data/test/ts_offline.rb CHANGED
@@ -62,14 +62,14 @@ TESTS.each { |test| require_relative "tc_#{test}.rb" }
62
62
 
63
63
  def have_open_ssl?
64
64
  have_open_ssl = true
65
- # begin
66
- # require "openssl"
67
- # OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
68
- # key = OpenSSL::PKey::RSA.new
69
- # key.e = 111
70
- # rescue
71
- # have_open_ssl = false
72
- # end
65
+ begin
66
+ require "openssl"
67
+ OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
68
+ key = OpenSSL::PKey::RSA.new
69
+ key.e = 111
70
+ rescue
71
+ have_open_ssl = false
72
+ end
73
73
  have_open_ssl
74
74
  end
75
75
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.61.9
4
+ version: 1.71.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dalitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2024-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 5.14.4
33
+ version: 5.18.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 5.14.4
40
+ version: 5.18.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubydns
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.0.1
47
+ version: 2.0.2
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 2.0.1
54
+ version: 2.0.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nio4r
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: 2.7.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: 2.7.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest-display
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,14 +84,14 @@ dependencies:
84
84
  name: yard
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.9'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.9'
97
97
  - !ruby/object:Gem::Dependency
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.7'
103
+ version: 0.8.23
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.7'
110
+ version: 0.8.23
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: simpleidn
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.1'
117
+ version: 0.2.1
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0.1'
124
+ version: 0.2.1
125
125
  description: |-
126
126
  Dnsruby is a pure Ruby DNS client library which implements a
127
127
  stub resolver. It aims to comply with all DNS RFCs, including
@@ -254,6 +254,7 @@ files:
254
254
  - test/tc_dns.rb
255
255
  - test/tc_dnskey.rb
256
256
  - test/tc_ds.rb
257
+ - test/tc_ecdsa.rb
257
258
  - test/tc_encoding.rb
258
259
  - test/tc_escapedchars.rb
259
260
  - test/tc_gpos.rb
@@ -335,7 +336,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
336
  - !ruby/object:Gem::Version
336
337
  version: '0'
337
338
  requirements: []
338
- rubygems_version: 3.2.30
339
+ rubygems_version: 3.5.3
339
340
  signing_key:
340
341
  specification_version: 4
341
342
  summary: Ruby DNS(SEC) implementation