Class: Net::DNS::RR::SSHFP
- Inherits:
-
Net::DNS::RR
- Object
- Net::DNS::RR
- Net::DNS::RR::SSHFP
- Defined in:
- lib/Net/DNS/RR/SSHFP.rb
Overview
NAME
Net::DNS::RR::SSHFP - DNS SSHFP resource record
DESCRIPTION
Class for Delegation signer (SSHFP) resource records.
ACKNOWLEDGEMENT
Jakob Schlyter for code review and supplying patches.
COPYRIGHT
Copyright (c) 2004 RIPE NCC, Olaf Kolkman.
"All rights reserved, This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
Net::DNS, Net::DNS::Resolver, Net::DNS::Packet, Net::DNS::Header, Net::DNS::Question, Net::DNS::RR, draft-ietf-dnssext-delegation-signer
Constant Summary collapse
- HasBabble =
BEGIN { eval { require Digest::BubbleBabble; Digest::BubbleBabble->import(qw(bubblebabble)) };
$HasBabble = $@ ? 0 : 1; } @TODO Use BubbleBabble!! false- @@algtype =
{ 'RSA' => 1, 'DSA' => 2}
- @@fingerprinttype =
{'SHA-1' => 1}
- @@fingerprinttypebyval =
@@fingerprinttype.reverse
- @@algtypebyval =
@@algtype.reverse
Constants inherited from Net::DNS::RR
Instance Attribute Summary collapse
-
#algorithm ⇒ Object
Returns the RR's algorithm field in decimal representation.
-
#fingerprint ⇒ Object
Returns the value of attribute fingerprint.
-
#fpbin ⇒ Object
Returns the SHA1 fingerprint over the label and key in hexadecimal representation.
-
#fptype ⇒ Object
Returns the fingerprint type of the SSHFP RR.
Attributes inherited from Net::DNS::RR
#name, #rdata, #rdlength, #rrclass, #ttl, #type
Instance Method Summary collapse
- #babble ⇒ Object
- #new_from_data(data, offset) ⇒ Object
- #new_from_hash(values) ⇒ Object
- #new_from_string(instring) ⇒ Object
- #rdatastr ⇒ Object
- #rr_rdata ⇒ Object
Methods inherited from Net::DNS::RR
#_canonicalRdata, #_canonicaldata, _get_subclass, _name2wire, #_name2wire, build_regex, create, #create_rrsort_func, #data, #get_rrsort_func, #init, #init_rrsort_func, #inspect, new_from_data, new_from_hash, new_from_string, #set_rrsort_func
Instance Attribute Details
#algorithm ⇒ Object
Returns the RR's algorithm field in decimal representation
1 = RSA
2 = DSS
print "algoritm" = ", rr.algorithm, "\n"
51 52 53 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 51 def algorithm @algorithm end |
#fingerprint ⇒ Object
Returns the value of attribute fingerprint.
53 54 55 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 53 def fingerprint @fingerprint end |
#fpbin ⇒ Object
Returns the SHA1 fingerprint over the label and key in hexadecimal representation.
Returns the fingerprint as binary material.
60 61 62 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 60 def fpbin @fpbin end |
#fptype ⇒ Object
Returns the fingerprint type of the SSHFP RR.
print "fingerprint type = " + rr.fptype + "\n"
66 67 68 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 66 def fptype @fptype end |
Instance Method Details
#babble ⇒ Object
175 176 177 178 179 180 181 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 175 def babble if (HasBabble) return bubblebabble(Digest => fpbin()) else return "" end end |
#new_from_data(data, offset) ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 104 def new_from_data(data, offset) if (@rdlength > 0) offsettoalg = offset offsettofptype = offset+1 offsettofp = offset+2 fplength = 20 # This will need to change if other fingerprint types # are being deployed. @algorithm = data[oggsettoalg, 1].unpack('C') # , substr($$data, $offsettoalg, 1)) @fptype = data[offsettofptype, 1].unpack('C') # , substr($$data, $offsettofptype, 1)) raise NotImplementedError, "This fingerprint type #{@fptype} has not yet been implemented\n." + "Contact developer of Net::DNS::RR::SSHFP.\n" unless fingerprinttypebyval[@fptype] != nil # All this is SHA-1 dependend @fpbin = data[offsettofp, fplength] # SHA1 digest 20 bytes long @fingerprint = @fpbin.unpack('H*').upcase! # uc unpack('H*', $self->{:fpbin}); end end |
#new_from_hash(values) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 140 def new_from_hash(values) if values.has_key?(:fingerprint) @fingerprint = values[:fingerprint] end if values.has_key?(:fptype) @fptype = values[:fptype] end if values.has_key?(:fpbin) @fpbin = values[:fpbin] end if values.has_key?(:algorithm) @algorithm = values[:algorithm] end end |
#new_from_string(instring) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 127 def new_from_string(instring) if (string) instring = string.tr("()", "") # /()//d string.gsub!(/;.*$/, "") # /mg string.gsub!(/\n/, "") @algorithm, @fptype, @fingerprint = string.split(/\s+/, 3) # We allow spaces in the fingerprint. @fingerprint.gsub!(/\s/, "") end end |
#rdatastr ⇒ Object
156 157 158 159 160 161 162 163 164 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 156 def rdatastr rdatastr = '' if (@algorithm!=nil) rdatastr = [@algorithm, @fptype, @fingerprint].join(' ') + ' ; ' + babble() end return rdatastr end |
#rr_rdata ⇒ Object
166 167 168 169 170 171 172 |
# File 'lib/Net/DNS/RR/SSHFP.rb', line 166 def rr_rdata if (@algorithm != nil) return [@algorithm, @fptype].pack('C2') + fpbin() end return '' end |