diff options
Diffstat (limited to 'lib/nickserver/hkp/key_info.rb')
-rw-r--r-- | lib/nickserver/hkp/key_info.rb | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/lib/nickserver/hkp/key_info.rb b/lib/nickserver/hkp/key_info.rb index ed38643..5c8b845 100644 --- a/lib/nickserver/hkp/key_info.rb +++ b/lib/nickserver/hkp/key_info.rb @@ -1,65 +1,83 @@ require 'cgi' require 'nickserver/hkp' -# -# Class to represent the key information result from a query to a key server -# (but not the key itself). -# -# The initialize method parses the hkp 'machine readable' output. -# -# format definition of machine readable index output is here: -# http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2 -# module Nickserver::Hkp + # + # Class to represent the key information result from a query to a key server + # (but not the key itself). + # + # The initialize method parses the hkp 'machine readable' output. + # + # format definition of machine readable index output is here: + # http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2 + # class KeyInfo - attr_accessor :uids, :keyid, :algo, :flags + attr_accessor :uids def initialize(hkp_record) uid_lines = hkp_record.split("\n") pub_line = uid_lines.shift - @keyid, @algo, @keylen_s, @creationdate_s, @expirationdate_s, @flags = pub_line.split(':')[1..-1] - @uids = [] - uid_lines.each do |uid_line| - uid, _creationdate, _expirationdate, _flags = uid_line.split(':')[1..-1] - # for now, ignore the expirationdate and flags of uids. sks does return them anyway - @uids << CGI.unescape(uid.sub(/.*<(.+)>.*/, '\1')) - end + @properties = pub_line.split(':')[1..-1] + @uids = extract_uids(uid_lines) + end + + def keyid + properties.first + end + + def algo + properties.second end def keylen - @keylen ||= @keylen_s.to_i + properties[2].to_i end def creationdate - @creationdate ||= begin - Time.at(@creationdate_s.to_i) if @creationdate_s - end + created = properties[3] + Time.at(created.to_i) end def expirationdate - @expirationdate ||= begin - Time.at(@expirationdate_s.to_i) if @expirationdate_s - end + expires = properties[4] + Time.at(expires.to_i) + end + + def flags + properties.last end def rsa? - @algo == '1' + algo == '1' end def dsa? - @algo == '17' + algo == '17' end def revoked? - @flags =~ /r/ + flags =~ /r/ end def disabled? - @flags =~ /d/ + flags =~ /d/ end def expired? - @flags =~ /e/ + flags =~ /e/ + end + + protected + + attr_reader :properties + + def extract_uids(uid_lines) + uid_lines.map do |uid_line| + # for now, ignore the expirationdate and flags of uids. + # sks does return them anyway + uid, _creationdate, _expirationdate, _flags = uid_line.split(':')[1..-1] + CGI.unescape(uid.sub(/.*<(.+)>.*/, '\1')) + end end end end |