dnsruby 1.61.3 → 1.61.4
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/.travis.yml +3 -4
- data/.yardopts +7 -0
- data/Gemfile +0 -2
- data/README.md +1 -0
- data/RELEASE_NOTES.md +15 -1
- data/dnsruby.gemspec +12 -6
- data/lib/dnsruby/dnssec.rb +1 -0
- data/lib/dnsruby/name.rb +12 -14
- data/lib/dnsruby/resource/DNSKEY.rb +18 -0
- data/lib/dnsruby/single_verifier.rb +13 -0
- data/lib/dnsruby/validator_thread.rb +4 -4
- data/lib/dnsruby/version.rb +1 -1
- data/test/tc_caa.rb +0 -1
- data/test/tc_dnskey.rb +29 -0
- data/test/tc_name.rb +19 -0
- data/test/tc_verifier.rb +15 -0
- metadata +32 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0af7c6de9311c48936130f68339d222dc18675d7ad52db92eec7474bae5ee05c
|
4
|
+
data.tar.gz: cc926e5123a7e691b88261d93891b7f28efbc54d01ca549e1fdabc6d9ee62f1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c09d09948564591075f2caccc23d0592ec04644d592815400cc78e1664354af47e9185276fce7c64fb81a18ef4fbbfd53520314419e5085a879dd8df0565527f
|
7
|
+
data.tar.gz: 535c00b339938ffe3e1479286477889398dc1154f43a2eae4defcb7e08a0a04d23033b501163f3815e2793af67d9445448170bfbd516d34702a5df93f4a22b4d
|
data/.travis.yml
CHANGED
data/.yardopts
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/RELEASE_NOTES.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
-
##v1.61.
|
3
|
+
## v1.61.4
|
4
|
+
|
5
|
+
* Dnsruby::Name : document .punycode
|
6
|
+
* gemspec enhancement
|
7
|
+
* add yard build file
|
8
|
+
* fix create name include url special characters
|
9
|
+
* Fix uninitialized constant error when using via Rails
|
10
|
+
* Implement ECDSAP256SHA256 (13) / ECDSAP384SHA384 (14) algorithms for DNSKEY
|
11
|
+
* Reinitialize all IANA TAR keys with Dnssec.reset
|
12
|
+
|
13
|
+
## v1.61.3
|
14
|
+
|
15
|
+
* TCP timeout and port changes
|
16
|
+
|
17
|
+
## v1.61.2
|
4
18
|
|
5
19
|
* Add new root key
|
6
20
|
|
data/dnsruby.gemspec
CHANGED
@@ -15,6 +15,7 @@ SPEC = Gem::Specification.new do |s|
|
|
15
15
|
stub resolver. It aims to comply with all DNS RFCs, including
|
16
16
|
DNSSEC NSEC3 support.'
|
17
17
|
s.license = "Apache License, Version 2.0"
|
18
|
+
|
18
19
|
s.files = `git ls-files -z`.split("\x0")
|
19
20
|
|
20
21
|
s.post_install_message = \
|
@@ -25,21 +26,26 @@ DNSSEC NSEC3 support.'
|
|
25
26
|
s.test_file = "test/ts_offline.rb"
|
26
27
|
s.extra_rdoc_files = ["DNSSEC", "EXAMPLES", "README.md", "EVENTMACHINE"]
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
s.metadata = {
|
30
|
+
'yard.run' => 'yard',
|
31
|
+
'bug_tracker_uri' => 'https://github.com/alexdalitz/dnsruby/issues',
|
32
|
+
'changelog_uri' => 'https://github.com/alexdalitz/dnsruby/blob/master/RELEASE_NOTES.md',
|
33
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/dnsruby/',
|
34
|
+
'homepage_uri' => 'https://github.com/alexdalitz/dnsruby',
|
35
|
+
'source_code_uri' => 'https://github.com/alexdalitz/dnsruby',
|
36
|
+
}
|
32
37
|
|
33
|
-
s.add_development_dependency 'rake', '
|
38
|
+
s.add_development_dependency 'rake', '>= 12.3.3'
|
34
39
|
s.add_development_dependency 'minitest', '~> 5.4'
|
35
40
|
s.add_development_dependency 'rubydns', '~> 2.0.1'
|
36
41
|
s.add_development_dependency 'nio4r', '~> 2.0'
|
37
42
|
s.add_development_dependency 'minitest-display', '>= 0.3.0'
|
43
|
+
s.add_development_dependency('yard', '~> 0.9')
|
38
44
|
|
39
45
|
if RUBY_VERSION >= "1.9.3"
|
40
46
|
s.add_development_dependency 'coveralls', '~> 0.7'
|
41
47
|
end
|
42
48
|
|
43
|
-
s.add_runtime_dependency '
|
49
|
+
s.add_runtime_dependency 'simpleidn', '~> 0.1'
|
44
50
|
end
|
45
51
|
|
data/lib/dnsruby/dnssec.rb
CHANGED
@@ -128,6 +128,7 @@ module Dnsruby
|
|
128
128
|
@@validation_policy = ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT
|
129
129
|
@@root_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ROOT)
|
130
130
|
@@root_verifier.add_root_ds(@@root_key)
|
131
|
+
@@root_verifier.add_root_ds(@@root_key_new)
|
131
132
|
|
132
133
|
@@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
|
133
134
|
|
data/lib/dnsruby/name.rb
CHANGED
@@ -27,7 +27,7 @@ module Dnsruby
|
|
27
27
|
# * Name#subdomain_of?(other)
|
28
28
|
# * Name#labels
|
29
29
|
#
|
30
|
-
require '
|
30
|
+
require 'simpleidn'
|
31
31
|
class Name
|
32
32
|
include Comparable
|
33
33
|
MaxNameLength=255
|
@@ -63,20 +63,18 @@ module Dnsruby
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
+
# Convert IDN domain from Unicode UTF-8 to ASCII punycode
|
67
|
+
# @param [Object|String] d Unicode domain with emoji inside
|
68
|
+
# @return [String] ASCII punycode domain
|
69
|
+
# @example
|
70
|
+
# Dnsruby::Name.punycode('🏳.cf')
|
71
|
+
# => "xn--en8h.cf"
|
66
72
|
def self.punycode(d)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
if (!ret.end_with?".")
|
74
|
-
return ret + "."
|
75
|
-
end
|
76
|
-
return ret
|
77
|
-
rescue Exception => e
|
78
|
-
return d
|
79
|
-
end
|
73
|
+
begin
|
74
|
+
return SimpleIDN.to_ascii(d)
|
75
|
+
rescue
|
76
|
+
return d
|
77
|
+
end
|
80
78
|
end
|
81
79
|
|
82
80
|
def self.split_escaped(arg) #:nodoc: all
|
@@ -313,6 +313,8 @@ module Dnsruby
|
|
313
313
|
elsif [Algorithms.DSA,
|
314
314
|
Algorithms.DSA_NSEC3_SHA1].include?(@algorithm)
|
315
315
|
@public_key = dsa_key
|
316
|
+
elsif [Algorithms.ECDSAP256SHA256, Algorithms.ECDSAP384SHA384].include?(@algorithm)
|
317
|
+
@public_key = ec_key(Algorithms.ECDSAP256SHA256 == @algorithm ? 'prime256v1' : 'secp384r1')
|
316
318
|
end
|
317
319
|
end
|
318
320
|
# @TODO@ Support other key encodings!
|
@@ -377,6 +379,22 @@ module Dnsruby
|
|
377
379
|
|
378
380
|
pkey
|
379
381
|
end
|
382
|
+
|
383
|
+
# RFC6605, section 4
|
384
|
+
# ECDSA public keys consist of a single value, called "Q" in FIPS
|
385
|
+
# 186-3. In DNSSEC keys, Q is a simple bit string that represents the
|
386
|
+
# uncompressed form of a curve point, "x | y".
|
387
|
+
def ec_key(curve = 'prime256v1')
|
388
|
+
group = OpenSSL::PKey::EC::Group.new(curve)
|
389
|
+
pkey = OpenSSL::PKey::EC.new(group)
|
390
|
+
|
391
|
+
# DNSSEC pub does not have first octet that determines whether it's uncompressed
|
392
|
+
# 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
|
+
end
|
380
398
|
end
|
381
399
|
end
|
382
400
|
end
|
@@ -800,6 +800,19 @@ module Dnsruby
|
|
800
800
|
|
801
801
|
asn1 = OpenSSL::ASN1::Sequence.new([r_asn1, s_asn1]).to_der
|
802
802
|
verified = keyrec.public_key.verify(OpenSSL::Digest::DSS1.new, asn1, sig_data)
|
803
|
+
elsif [Algorithms.ECDSAP256SHA256, Algorithms.ECDSAP384SHA384].include?(sigrec.algorithm)
|
804
|
+
byte_size = (keyrec.public_key.group.degree + 7) / 8
|
805
|
+
sig_bytes = sigrec.signature[0..(byte_size - 1)]
|
806
|
+
sig_char = sigrec.signature[byte_size..-1] || ''
|
807
|
+
asn1 = OpenSSL::ASN1::Sequence.new([sig_bytes, sig_char].map { |int| OpenSSL::ASN1::Integer.new(OpenSSL::BN.new(int, 2)) }).to_der
|
808
|
+
|
809
|
+
digest_obj = if sigrec.algorithm == Algorithms.ECDSAP384SHA384
|
810
|
+
OpenSSL::Digest::SHA384.new
|
811
|
+
else
|
812
|
+
OpenSSL::Digest::SHA256.new
|
813
|
+
end
|
814
|
+
|
815
|
+
verified = keyrec.public_key.dsa_verify_asn1(digest_obj.digest(sig_data), asn1)
|
803
816
|
else
|
804
817
|
raise RuntimeError.new("Algorithm #{sigrec.algorithm.code} unsupported by Dnsruby")
|
805
818
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# --
|
2
2
|
# Copyright 2007 Nominet UK
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
6
6
|
# You may obtain a copy of the License at
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Unless required by applicable law or agreed to in writing, software
|
11
11
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
12
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -109,7 +109,7 @@ module Dnsruby
|
|
109
109
|
return true
|
110
110
|
rescue VerifyError => e
|
111
111
|
response.security_error = e
|
112
|
-
response.security_level = BOGUS
|
112
|
+
response.security_level = Message::SecurityLevel.BOGUS
|
113
113
|
# Response security_level should already be set
|
114
114
|
return false
|
115
115
|
end
|
data/lib/dnsruby/version.rb
CHANGED
data/test/tc_caa.rb
CHANGED
data/test/tc_dnskey.rb
CHANGED
@@ -85,4 +85,33 @@ class DnskeyTest < Minitest::Test
|
|
85
85
|
dnskey.protocol=3
|
86
86
|
|
87
87
|
end
|
88
|
+
|
89
|
+
def test_ecdsa_integrity
|
90
|
+
ecdsa_256_pub = 'example.com. 3600 IN DNSKEY 256 3 13 ( oJMRESz5E4gYzS/q6XD' +
|
91
|
+
'rvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA== )'
|
92
|
+
|
93
|
+
dnskey = Dnsruby::RR.create(ecdsa_256_pub)
|
94
|
+
assert_equal(3, dnskey.protocol)
|
95
|
+
assert_equal(256, dnskey.flags)
|
96
|
+
assert_equal(Dnsruby::Algorithms::ECDSAP256SHA256, dnskey.algorithm)
|
97
|
+
assert_equal(Dnsruby::RR::DNSKEY::ZONE_KEY, dnskey.flags & Dnsruby::RR::DNSKEY::ZONE_KEY)
|
98
|
+
assert_equal(0, dnskey.flags & Dnsruby::RR::DNSKEY::SEP_KEY)
|
99
|
+
|
100
|
+
dnskey2 = Dnsruby::RR.create(dnskey.to_s)
|
101
|
+
assert(dnskey2.to_s == dnskey.to_s, "#{dnskey} not equal to \n#{dnskey2}")
|
102
|
+
|
103
|
+
ecdsa_384_pub = 'example.com. 3600 IN DNSKEY 256 3 14 ( Bl2HDw98sGin4lNlx7n' +
|
104
|
+
'QX3w98jx6UhAgC73Jq+6LFlD12gnVTMHecM8Z GoTFSh+mV+qEPFZ5s3NbC4qvwUW0kkPb+0ip' +
|
105
|
+
'CuLRwZYhYKk7D+RDb+fX XozI9hhZrsXBcEhss )'
|
106
|
+
|
107
|
+
dnskey = Dnsruby::RR.create(ecdsa_384_pub)
|
108
|
+
assert_equal(3, dnskey.protocol)
|
109
|
+
assert_equal(256, dnskey.flags)
|
110
|
+
assert_equal(Dnsruby::Algorithms::ECDSAP384SHA384, dnskey.algorithm)
|
111
|
+
assert_equal(Dnsruby::RR::DNSKEY::ZONE_KEY, dnskey.flags & Dnsruby::RR::DNSKEY::ZONE_KEY)
|
112
|
+
assert_equal(0, dnskey.flags & Dnsruby::RR::DNSKEY::SEP_KEY)
|
113
|
+
|
114
|
+
dnskey2 = Dnsruby::RR.create(dnskey.to_s)
|
115
|
+
assert(dnskey2.to_s == dnskey.to_s, "#{dnskey} not equal to \n#{dnskey2}")
|
116
|
+
end
|
88
117
|
end
|
data/test/tc_name.rb
CHANGED
@@ -80,4 +80,23 @@ class TestName < Minitest::Test
|
|
80
80
|
n2 = Name.create("nall.all.")
|
81
81
|
assert(n1 == n2, n1.to_s)
|
82
82
|
end
|
83
|
+
|
84
|
+
def test_punycode
|
85
|
+
[
|
86
|
+
[
|
87
|
+
"møllerriis.com",
|
88
|
+
"xn--mllerriis-l8a.com"
|
89
|
+
],
|
90
|
+
[
|
91
|
+
"フガフガ。hogehoge.エグザンプル.JP",
|
92
|
+
"xn--mcka5jb.hogehoge.xn--ickqs6k2dyb.jp"
|
93
|
+
],
|
94
|
+
[
|
95
|
+
"フガ#フガ。hogehoge.エグザンプル.JP",
|
96
|
+
"xn--#-yeub5nc.hogehoge.xn--ickqs6k2dyb.jp"
|
97
|
+
]
|
98
|
+
].each do |tc|
|
99
|
+
assert_equal(Dnsruby::Name.create(tc[0]).to_s, tc[1])
|
100
|
+
end
|
101
|
+
end
|
83
102
|
end
|
data/test/tc_verifier.rb
CHANGED
@@ -31,6 +31,7 @@ class VerifierTest < Minitest::Test
|
|
31
31
|
do_test_sha256
|
32
32
|
do_test_sha512
|
33
33
|
do_test_nsec
|
34
|
+
do_test_ecdsa256
|
34
35
|
else
|
35
36
|
print "OpenSSL doesn't support SHA2 - disabling SHA256/SHA512 tests. DNSSEC validation will not work with these type of signatures.\n"
|
36
37
|
end
|
@@ -70,6 +71,20 @@ class VerifierTest < Minitest::Test
|
|
70
71
|
verifier.verify_rrset(rrset, key512)
|
71
72
|
end
|
72
73
|
|
74
|
+
def do_test_ecdsa256
|
75
|
+
Time.stub :now, Time.parse("Wed, 01 Jul 2020 11:54:04 EEST +03:00") do
|
76
|
+
ecdsa256 = Dnsruby::RR.create("rainiselevi.ee. 3600 IN DNSKEY 256 3 ECDSAP256SHA256 ( oJMRESz5E
|
77
|
+
4gYzS/q6XDrvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA== ) ; key_tag=34505")
|
78
|
+
a = Dnsruby::RR.create("rainiselevi.ee. 3600 IN A 35.228.30.236")
|
79
|
+
sig = Dnsruby::RR.create("rainiselevi.ee. 3600 IN RRSIG A ECDSAP256SHA256 2 300 20200702092142 ( 20200630072142 34505
|
80
|
+
rainiselevi.ee. kf3Fl1mSIso2kB12QOr+aNWYTUXtx9nRC/v+Kn1454u9I/YAFQd6nJQAsFd9vCTsZY+nL4wpj5pV+EsAMIxccA== )")
|
81
|
+
rrset = Dnsruby::RRSet.new(a)
|
82
|
+
rrset.add(sig)
|
83
|
+
verifier = Dnsruby::SingleVerifier.new(nil)
|
84
|
+
assert(verifier.verify_rrset(rrset, ecdsa256))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
73
88
|
def test_se_query
|
74
89
|
# Run some queries on the .se zone
|
75
90
|
Dnsruby::Dnssec.clear_trusted_keys
|
metadata
CHANGED
@@ -1,63 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnsruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.61.
|
4
|
+
version: 1.61.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Dalitz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: pry
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.10'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.10'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pry-byebug
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '2.0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: rake
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
44
16
|
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '10'
|
48
17
|
- - ">="
|
49
18
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
19
|
+
version: 12.3.3
|
51
20
|
type: :development
|
52
21
|
prerelease: false
|
53
22
|
version_requirements: !ruby/object:Gem::Requirement
|
54
23
|
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '10'
|
58
24
|
- - ">="
|
59
25
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
26
|
+
version: 12.3.3
|
61
27
|
- !ruby/object:Gem::Dependency
|
62
28
|
name: minitest
|
63
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +80,20 @@ dependencies:
|
|
114
80
|
- - ">="
|
115
81
|
- !ruby/object:Gem::Version
|
116
82
|
version: 0.3.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
117
97
|
- !ruby/object:Gem::Dependency
|
118
98
|
name: coveralls
|
119
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,19 +109,19 @@ dependencies:
|
|
129
109
|
- !ruby/object:Gem::Version
|
130
110
|
version: '0.7'
|
131
111
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
112
|
+
name: simpleidn
|
133
113
|
requirement: !ruby/object:Gem::Requirement
|
134
114
|
requirements:
|
135
115
|
- - "~>"
|
136
116
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
117
|
+
version: '0.1'
|
138
118
|
type: :runtime
|
139
119
|
prerelease: false
|
140
120
|
version_requirements: !ruby/object:Gem::Requirement
|
141
121
|
requirements:
|
142
122
|
- - "~>"
|
143
123
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
124
|
+
version: '0.1'
|
145
125
|
description: |-
|
146
126
|
Dnsruby is a pure Ruby DNS client library which implements a
|
147
127
|
stub resolver. It aims to comply with all DNS RFCs, including
|
@@ -158,6 +138,7 @@ files:
|
|
158
138
|
- ".coveralls.yml"
|
159
139
|
- ".gitignore"
|
160
140
|
- ".travis.yml"
|
141
|
+
- ".yardopts"
|
161
142
|
- DNSSEC
|
162
143
|
- EVENTMACHINE
|
163
144
|
- EXAMPLES
|
@@ -329,7 +310,13 @@ files:
|
|
329
310
|
homepage: https://github.com/alexdalitz/dnsruby
|
330
311
|
licenses:
|
331
312
|
- Apache License, Version 2.0
|
332
|
-
metadata:
|
313
|
+
metadata:
|
314
|
+
yard.run: yard
|
315
|
+
bug_tracker_uri: https://github.com/alexdalitz/dnsruby/issues
|
316
|
+
changelog_uri: https://github.com/alexdalitz/dnsruby/blob/master/RELEASE_NOTES.md
|
317
|
+
documentation_uri: https://www.rubydoc.info/gems/dnsruby/
|
318
|
+
homepage_uri: https://github.com/alexdalitz/dnsruby
|
319
|
+
source_code_uri: https://github.com/alexdalitz/dnsruby
|
333
320
|
post_install_message: |-
|
334
321
|
Installing dnsruby...
|
335
322
|
For issues and source code: https://github.com/alexdalitz/dnsruby
|
@@ -348,8 +335,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
348
335
|
- !ruby/object:Gem::Version
|
349
336
|
version: '0'
|
350
337
|
requirements: []
|
351
|
-
rubygems_version: 3.
|
352
|
-
signing_key:
|
338
|
+
rubygems_version: 3.1.2
|
339
|
+
signing_key:
|
353
340
|
specification_version: 4
|
354
341
|
summary: Ruby DNS(SEC) implementation
|
355
342
|
test_files:
|