dnsruby 1.61.9 → 1.71.0
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/.github/workflows/ci.yml +1 -1
- data/RELEASE_NOTES.md +10 -0
- data/Rakefile +1 -1
- data/dnsruby.gemspec +7 -6
- data/lib/dnsruby/resource/DNSKEY.rb +42 -29
- data/lib/dnsruby/resource/DS.rb +2 -5
- data/lib/dnsruby/resource/RR.rb +1 -1
- data/lib/dnsruby/resource/TSIG.rb +1 -1
- data/lib/dnsruby/version.rb +1 -1
- data/lib/dnsruby/zone_transfer.rb +1 -1
- data/test/tc_dns.rb +1 -1
- data/test/tc_ecdsa.rb +27 -0
- data/test/tc_res_file.rb +0 -6
- data/test/ts_offline.rb +8 -8
- metadata +20 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 269c27f2434453482847eab90060c2de583ca876e9056b8acff0c9df23a64a84
|
4
|
+
data.tar.gz: 37c09c9a2c25f97cfd391ee8662de09b1698a44b189abe2cd75753579c87379a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6863374c8f220932c6aff08fce2a8afd1e38267f44f505121516580b69e4c5691a613d11b45e4227939586f6283743871834138bca06a8776a26f6b32c2141ad
|
7
|
+
data.tar.gz: e58edc0688147d6c8e6576bf6144469d52b09120da7a7d7d0c00fc962579e1c49e23962264caa448d1bb54c70559e25e4663a176d95fe5282a43dba631233035
|
data/.github/workflows/ci.yml
CHANGED
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.
|
40
|
-
s.add_development_dependency 'rubydns', '
|
41
|
-
s.add_development_dependency 'nio4r', '
|
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', '
|
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.
|
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
|
-
|
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
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
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
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
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
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
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
|
data/lib/dnsruby/resource/DS.rb
CHANGED
data/lib/dnsruby/resource/RR.rb
CHANGED
@@ -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
|
data/lib/dnsruby/version.rb
CHANGED
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("
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
339
|
+
rubygems_version: 3.5.3
|
339
340
|
signing_key:
|
340
341
|
specification_version: 4
|
341
342
|
summary: Ruby DNS(SEC) implementation
|