dnsruby 1.55 → 1.56.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -0
  3. data/Rakefile +30 -29
  4. data/demo/axfr.rb +93 -93
  5. data/demo/check_soa.rb +99 -99
  6. data/demo/check_zone.rb +59 -59
  7. data/demo/digdlv.rb +43 -43
  8. data/demo/digroot.rb +34 -34
  9. data/demo/example_recurse.rb +14 -14
  10. data/demo/mresolv.rb +30 -30
  11. data/demo/mx.rb +31 -31
  12. data/demo/rubydig.rb +37 -37
  13. data/demo/to_resolve.txt +3088 -3088
  14. data/demo/trace_dns.rb +46 -46
  15. data/lib/dnsruby.rb +161 -526
  16. data/lib/dnsruby/DNS.rb +305 -0
  17. data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
  18. data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
  19. data/lib/dnsruby/code_mappers.rb +295 -0
  20. data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
  21. data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
  22. data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
  23. data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
  24. data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
  25. data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
  26. data/lib/dnsruby/message/decoder.rb +164 -0
  27. data/lib/dnsruby/message/encoder.rb +75 -0
  28. data/lib/dnsruby/message/header.rb +249 -0
  29. data/lib/dnsruby/message/message.rb +629 -0
  30. data/lib/dnsruby/message/question.rb +86 -0
  31. data/lib/dnsruby/message/section.rb +96 -0
  32. data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
  33. data/lib/dnsruby/packet_sender.rb +661 -0
  34. data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
  35. data/lib/dnsruby/resolv.rb +113 -0
  36. data/lib/dnsruby/resolver.rb +1192 -0
  37. data/lib/dnsruby/resource/A.rb +56 -0
  38. data/lib/dnsruby/resource/AAAA.rb +54 -0
  39. data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
  40. data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
  41. data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
  42. data/lib/dnsruby/resource/DLV.rb +27 -0
  43. data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
  44. data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
  45. data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
  46. data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
  47. data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
  48. data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
  49. data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
  50. data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
  51. data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
  52. data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
  53. data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
  54. data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
  55. data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
  56. data/lib/dnsruby/resource/NSEC.rb +275 -0
  57. data/lib/dnsruby/resource/NSEC3.rb +332 -0
  58. data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
  59. data/lib/dnsruby/resource/OPT.rb +272 -0
  60. data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
  61. data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
  62. data/lib/dnsruby/resource/RR.rb +421 -0
  63. data/lib/dnsruby/resource/RRSIG.rb +275 -0
  64. data/lib/dnsruby/resource/RRSet.rb +190 -0
  65. data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
  66. data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
  67. data/lib/dnsruby/resource/SPF.rb +29 -0
  68. data/lib/dnsruby/resource/SRV.rb +112 -0
  69. data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
  70. data/lib/dnsruby/resource/TKEY.rb +163 -0
  71. data/lib/dnsruby/resource/TSIG.rb +593 -0
  72. data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
  73. data/lib/dnsruby/resource/X25.rb +55 -0
  74. data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
  75. data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
  76. data/lib/dnsruby/resource/resource.rb +25 -0
  77. data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
  78. data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
  79. data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
  80. data/lib/dnsruby/the_log.rb +44 -0
  81. data/lib/dnsruby/update.rb +278 -0
  82. data/lib/dnsruby/validator_thread.rb +124 -0
  83. data/lib/dnsruby/version.rb +3 -0
  84. data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
  85. data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
  86. data/test/spec_helper.rb +16 -0
  87. data/test/tc_axfr.rb +31 -34
  88. data/test/tc_cache.rb +32 -32
  89. data/test/tc_dlv.rb +28 -28
  90. data/test/tc_dns.rb +73 -76
  91. data/test/tc_dnskey.rb +31 -32
  92. data/test/tc_dnsruby.rb +50 -44
  93. data/test/tc_ds.rb +36 -36
  94. data/test/tc_escapedchars.rb +252 -255
  95. data/test/tc_hash.rb +17 -21
  96. data/test/tc_header.rb +48 -57
  97. data/test/tc_hip.rb +19 -22
  98. data/test/tc_ipseckey.rb +18 -21
  99. data/test/tc_keith.rb +300 -0
  100. data/test/tc_message.rb +87 -0
  101. data/test/tc_misc.rb +83 -87
  102. data/test/tc_name.rb +81 -84
  103. data/test/tc_naptr.rb +18 -21
  104. data/test/tc_nsec.rb +55 -55
  105. data/test/tc_nsec3.rb +23 -24
  106. data/test/tc_nsec3param.rb +20 -21
  107. data/test/tc_packet.rb +90 -93
  108. data/test/tc_packet_unique_push.rb +48 -51
  109. data/test/tc_question.rb +30 -33
  110. data/test/tc_queue.rb +16 -17
  111. data/test/tc_recur.rb +16 -17
  112. data/test/tc_res_config.rb +38 -41
  113. data/test/tc_res_env.rb +29 -32
  114. data/test/tc_res_file.rb +26 -29
  115. data/test/tc_res_opt.rb +62 -65
  116. data/test/tc_resolver.rb +287 -242
  117. data/test/tc_rr-opt.rb +70 -63
  118. data/test/tc_rr-txt.rb +68 -71
  119. data/test/tc_rr-unknown.rb +45 -48
  120. data/test/tc_rr.rb +76 -70
  121. data/test/tc_rrset.rb +21 -22
  122. data/test/tc_rrsig.rb +19 -20
  123. data/test/tc_single_resolver.rb +294 -297
  124. data/test/tc_soak.rb +199 -202
  125. data/test/tc_soak_base.rb +29 -34
  126. data/test/tc_sshfp.rb +20 -23
  127. data/test/tc_tcp.rb +32 -35
  128. data/test/tc_tkey.rb +41 -44
  129. data/test/tc_tsig.rb +81 -84
  130. data/test/tc_update.rb +108 -111
  131. data/test/tc_validator.rb +29 -29
  132. data/test/tc_verifier.rb +81 -82
  133. data/test/ts_dnsruby.rb +16 -15
  134. data/test/ts_offline.rb +62 -63
  135. data/test/ts_online.rb +115 -115
  136. metadata +155 -90
  137. data/README +0 -59
  138. data/lib/Dnsruby/DNS.rb +0 -305
  139. data/lib/Dnsruby/PacketSender.rb +0 -656
  140. data/lib/Dnsruby/Resolver.rb +0 -1189
  141. data/lib/Dnsruby/TheLog.rb +0 -44
  142. data/lib/Dnsruby/message.rb +0 -1230
  143. data/lib/Dnsruby/resource/A.rb +0 -56
  144. data/lib/Dnsruby/resource/AAAA.rb +0 -54
  145. data/lib/Dnsruby/resource/DLV.rb +0 -27
  146. data/lib/Dnsruby/resource/NSEC.rb +0 -298
  147. data/lib/Dnsruby/resource/NSEC3.rb +0 -340
  148. data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
  149. data/lib/Dnsruby/resource/OPT.rb +0 -213
  150. data/lib/Dnsruby/resource/RRSIG.rb +0 -275
  151. data/lib/Dnsruby/resource/SPF.rb +0 -29
  152. data/lib/Dnsruby/resource/SRV.rb +0 -112
  153. data/lib/Dnsruby/resource/TKEY.rb +0 -163
  154. data/lib/Dnsruby/resource/TSIG.rb +0 -593
  155. data/lib/Dnsruby/resource/X25.rb +0 -55
  156. data/lib/Dnsruby/resource/resource.rb +0 -678
  157. data/lib/Dnsruby/update.rb +0 -278
  158. data/lib/Dnsruby/validator_thread.rb +0 -124
@@ -0,0 +1,56 @@
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ module IN
19
+ # Class for DNS Address (A) resource records.
20
+ #
21
+ # RFC 1035 Section 3.4.1
22
+ class A < RR
23
+ ClassHash[[TypeValue = Types::A, ClassValue = ClassValue]] = self #:nodoc: all
24
+
25
+ # The RR's (Resolv::IPv4) address field
26
+ attr_accessor :address
27
+
28
+ def from_data(data) #:nodoc: all
29
+ @address = IPv4.create(data)
30
+ end
31
+
32
+ # Create the RR from a hash
33
+ def from_hash(hash)
34
+ @address = IPv4.create(hash[:address])
35
+ end
36
+
37
+ # Create the RR from a standard string
38
+ def from_string(input)
39
+ @address = IPv4.create(input)
40
+ end
41
+
42
+ def rdata_to_string
43
+ return @address.to_s
44
+ end
45
+
46
+ def encode_rdata(msg, canonical=false) #:nodoc: all
47
+ msg.put_bytes(@address.address)
48
+ end
49
+
50
+ def self.decode_rdata(msg) #:nodoc: all
51
+ return self.new(IPv4.new(msg.get_bytes(4)))
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,54 @@
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ module IN
19
+ # Class for DNS IPv6 Address (AAAA) resource records.
20
+ #
21
+ # RFC 1886 Section 2, RFC 1884 Sections 2.2 & 2.4.4
22
+ class AAAA < RR
23
+ ClassHash[[TypeValue = Types::AAAA, ClassValue = ClassValue]] = self #:nodoc: all
24
+
25
+ # The RR's (Resolv::IPv6) address field
26
+ attr_accessor :address
27
+
28
+ def from_data(data) #:nodoc: all
29
+ @address = IPv6.create(data)
30
+ end
31
+
32
+ def from_hash(hash) #:nodoc: all
33
+ @address = IPv6.create(hash[:address])
34
+ end
35
+
36
+ def from_string(input) #:nodoc: all
37
+ @address = IPv6.create(input)
38
+ end
39
+
40
+ def rdata_to_string #:nodoc: all
41
+ return @address.to_s
42
+ end
43
+
44
+ def encode_rdata(msg, canonical=false) #:nodoc: all
45
+ msg.put_bytes(@address.address)
46
+ end
47
+
48
+ def self.decode_rdata(msg) #:nodoc: all
49
+ return self.new(IPv6.new(msg.get_bytes(16)))
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,68 +1,68 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- #Unless required by applicable law or agreed to in writing, software
11
- #distributed under the License is distributed on an "AS IS" BASIS,
12
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- #See the License for the specific language governing permissions and
14
- #limitations under the License.
15
- #++
16
- module Dnsruby
17
- class RR
18
- module IN
19
- #Class for DNS AFS Data Base (AFSDB) resource records.
20
- #
21
- #RFC 1183 Section 1
22
- class AFSDB < RR
23
- ClassHash[[TypeValue = Types::AFSDB, ClassValue = ClassValue]] = self #:nodoc: all
24
-
25
- #The RR's subtype field. See RFC 1183.
26
- attr_accessor :subtype
27
-
28
- #The RR's hostname field. See RFC 1183.
29
- attr_accessor :hostname
30
-
31
- def from_hash(hash) #:nodoc: all
32
- @subtype = hash[:subtype]
33
- @hostname = Name.create(hash[:hostname])
34
- end
35
-
36
- def from_data(data) #:nodoc: all
37
- @subtype, @hostname = data
38
- end
39
-
40
- def from_string(input) #:nodoc: all
41
- if (input!=nil && (input =~ /^(\d+)\s+(\S+)$/o))
42
- @subtype = $1;
43
- @hostname = Name.create($2)
44
- end
45
- end
46
-
47
- def rdata_to_string #:nodoc: all
48
- if defined?@subtype
49
- return "#{@subtype} #{@hostname.to_s(true)}"
50
- else
51
- return '';
52
- end
53
- end
54
-
55
- def encode_rdata(msg, canonical=false) #:nodoc: all
56
- msg.put_pack("n", @subtype.to_i)
57
- msg.put_name(@hostname, canonical)
58
- end
59
-
60
- def self.decode_rdata(msg) #:nodoc: all
61
- subtype, = msg.get_unpack("n")
62
- hostname = msg.get_name
63
- return self.new([subtype, hostname])
64
- end
65
- end
66
- end
67
- end
68
- end
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ module IN
19
+ # Class for DNS AFS Data Base (AFSDB) resource records.
20
+ #
21
+ # RFC 1183 Section 1
22
+ class AFSDB < RR
23
+ ClassHash[[TypeValue = Types::AFSDB, ClassValue = ClassValue]] = self #:nodoc: all
24
+
25
+ # The RR's subtype field. See RFC 1183.
26
+ attr_accessor :subtype
27
+
28
+ # The RR's hostname field. See RFC 1183.
29
+ attr_accessor :hostname
30
+
31
+ def from_hash(hash) #:nodoc: all
32
+ @subtype = hash[:subtype]
33
+ @hostname = Name.create(hash[:hostname])
34
+ end
35
+
36
+ def from_data(data) #:nodoc: all
37
+ @subtype, @hostname = data
38
+ end
39
+
40
+ def from_string(input) #:nodoc: all
41
+ if (input!=nil && (input =~ /^(\d+)\s+(\S+)$/o))
42
+ @subtype = $1;
43
+ @hostname = Name.create($2)
44
+ end
45
+ end
46
+
47
+ def rdata_to_string #:nodoc: all
48
+ if defined?@subtype
49
+ return "#{@subtype} #{@hostname.to_s(true)}"
50
+ else
51
+ return '';
52
+ end
53
+ end
54
+
55
+ def encode_rdata(msg, canonical=false) #:nodoc: all
56
+ msg.put_pack("n", @subtype.to_i)
57
+ msg.put_name(@hostname, canonical)
58
+ end
59
+
60
+ def self.decode_rdata(msg) #:nodoc: all
61
+ subtype, = msg.get_unpack("n")
62
+ hostname = msg.get_name
63
+ return self.new([subtype, hostname])
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,105 +1,105 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- #Unless required by applicable law or agreed to in writing, software
11
- #distributed under the License is distributed on an "AS IS" BASIS,
12
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- #See the License for the specific language governing permissions and
14
- #limitations under the License.
15
- #++
16
- module Dnsruby
17
- class RR
18
- #Class for DNS Certificate (CERT) resource records. (see RFC 2538)
19
- #
20
- #RFC 2782
21
- class CERT < RR
22
- ClassValue = nil #:nodoc: all
23
- TypeValue = Types::CERT #:nodoc: all
24
-
25
- #Returns the format code for the certificate
26
- attr_accessor :certtype
27
- #Returns the key tag for the public key in the certificate
28
- attr_accessor :keytag
29
- #Returns the algorithm used by the certificate
30
- attr_accessor :alg
31
- #Returns the data comprising the certificate itself (in raw binary form)
32
- attr_accessor :cert
33
-
34
- class CertificateTypes < CodeMapper
35
- PKIX = 1 # PKIX (X.509v3)
36
- SPKI = 2 # Simple Public Key Infrastructure
37
- PGP = 3 # Pretty Good Privacy
38
- IPKIX = 4 # URL of an X.509 data object
39
- ISPKI = 5 # URL of an SPKI certificate
40
- IPGP = 6 # Fingerprint and URL of an OpenPGP packet
41
- ACPKIX = 7 # Attribute Certificate
42
- IACPKIX = 8 # URL of an Attribute Certificate
43
- URI = 253 # Certificate format defined by URI
44
- OID = 254 # Certificate format defined by OID
45
-
46
- update()
47
- end
48
-
49
- def from_data(data) #:nodoc: all
50
- @certtype = CertificateTypes::new(data[0])
51
- @keytag = data[1]
52
- @alg = Dnsruby::Algorithms.new(data[2])
53
- @cert= data[3]
54
- end
55
-
56
- def from_hash(hash) #:nodoc: all
57
- @certtype = CertificateTypes::new(hash[:certtype])
58
- @keytag = hash[:keytag]
59
- @alg = Dnsruby::Algorithms.new(hash[:alg])
60
- @cert= hash[:cert]
61
- end
62
-
63
- def from_string(input) #:nodoc: all
64
- if (input != "")
65
- names = input.split(" ")
66
- begin
67
- @certtype = CertificateTypes::new(names[0])
68
- rescue ArgumentError
69
- @certtype = CertificateTypes::new(names[0].to_i)
70
- end
71
- @keytag = names[1].to_i
72
- begin
73
- @alg = Dnsruby::Algorithms.new(names[2])
74
- rescue ArgumentError
75
- @alg = Dnsruby::Algorithms.new(names[2].to_i)
76
- end
77
- buf = ""
78
- (names.length - 3).times {|index|
79
- buf += names[index + 3]
80
- }
81
-
82
-
83
- buf.gsub!(/\n/, "")
84
- buf.gsub!(/ /, "")
85
- @cert = buf.unpack("m*").first
86
- end
87
- end
88
-
89
- def rdata_to_string #:nodoc: all
90
- return "#{@certtype.string} #{@keytag} #{@alg.string} #{[@cert.to_s].pack("m*").gsub("\n", "")}"
91
- end
92
-
93
- def encode_rdata(msg, canonical=false) #:nodoc: all
94
- msg.put_pack('nnc', @certtype.code, @keytag, @alg.code)
95
- msg.put_bytes(@cert)
96
- end
97
-
98
- def self.decode_rdata(msg) #:nodoc: all
99
- certtype, keytag, alg = msg.get_unpack('nnc')
100
- cert = msg.get_bytes
101
- return self.new([certtype, keytag, alg, cert])
102
- end
103
- end
104
- end
105
- end
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ # Class for DNS Certificate (CERT) resource records. (see RFC 2538)
19
+ #
20
+ # RFC 2782
21
+ class CERT < RR
22
+ ClassValue = nil #:nodoc: all
23
+ TypeValue = Types::CERT #:nodoc: all
24
+
25
+ # Returns the format code for the certificate
26
+ attr_accessor :certtype
27
+ # Returns the key tag for the public key in the certificate
28
+ attr_accessor :keytag
29
+ # Returns the algorithm used by the certificate
30
+ attr_accessor :alg
31
+ # Returns the data comprising the certificate itself (in raw binary form)
32
+ attr_accessor :cert
33
+
34
+ class CertificateTypes < CodeMapper
35
+ PKIX = 1 # PKIX (X.509v3)
36
+ SPKI = 2 # Simple Public Key Infrastructure
37
+ PGP = 3 # Pretty Good Privacy
38
+ IPKIX = 4 # URL of an X.509 data object
39
+ ISPKI = 5 # URL of an SPKI certificate
40
+ IPGP = 6 # Fingerprint and URL of an OpenPGP packet
41
+ ACPKIX = 7 # Attribute Certificate
42
+ IACPKIX = 8 # URL of an Attribute Certificate
43
+ URI = 253 # Certificate format defined by URI
44
+ OID = 254 # Certificate format defined by OID
45
+
46
+ update()
47
+ end
48
+
49
+ def from_data(data) #:nodoc: all
50
+ @certtype = CertificateTypes::new(data[0])
51
+ @keytag = data[1]
52
+ @alg = Dnsruby::Algorithms.new(data[2])
53
+ @cert= data[3]
54
+ end
55
+
56
+ def from_hash(hash) #:nodoc: all
57
+ @certtype = CertificateTypes::new(hash[:certtype])
58
+ @keytag = hash[:keytag]
59
+ @alg = Dnsruby::Algorithms.new(hash[:alg])
60
+ @cert= hash[:cert]
61
+ end
62
+
63
+ def from_string(input) #:nodoc: all
64
+ if (input != "")
65
+ names = input.split(" ")
66
+ begin
67
+ @certtype = CertificateTypes::new(names[0])
68
+ rescue ArgumentError
69
+ @certtype = CertificateTypes::new(names[0].to_i)
70
+ end
71
+ @keytag = names[1].to_i
72
+ begin
73
+ @alg = Dnsruby::Algorithms.new(names[2])
74
+ rescue ArgumentError
75
+ @alg = Dnsruby::Algorithms.new(names[2].to_i)
76
+ end
77
+ buf = ""
78
+ (names.length - 3).times {|index|
79
+ buf += names[index + 3]
80
+ }
81
+
82
+
83
+ buf.gsub!(/\n/, "")
84
+ buf.gsub!(/ /, "")
85
+ @cert = buf.unpack("m*").first
86
+ end
87
+ end
88
+
89
+ def rdata_to_string #:nodoc: all
90
+ return "#{@certtype.string} #{@keytag} #{@alg.string} #{[@cert.to_s].pack("m*").gsub("\n", "")}"
91
+ end
92
+
93
+ def encode_rdata(msg, canonical=false) #:nodoc: all
94
+ msg.put_pack('nnc', @certtype.code, @keytag, @alg.code)
95
+ msg.put_bytes(@cert)
96
+ end
97
+
98
+ def self.decode_rdata(msg) #:nodoc: all
99
+ certtype, keytag, alg = msg.get_unpack('nnc')
100
+ cert = msg.get_bytes
101
+ return self.new([certtype, keytag, alg, cert])
102
+ end
103
+ end
104
+ end
105
+ end