Welcome to the "trac"-ing site of openpgp4u!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 29

Show
Ignore:
Timestamp:
11/06/04 09:50:36 (4 years ago)
Author:
nahi
Message:

* Partial Body Lengths packet support.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/pgp/packet/packet.rb

    r23 r29  
    9090    loadport = wrap_port(port) 
    9191    packets = [] 
     92    continue = false 
    9293    while !loadport.eof? 
    93       newheader, tag, lengthdefined = load_header(loadport) 
     94      if continue 
     95        lengthdefined, partial = load_length_new(loadport) 
     96      else 
     97        newheader, tag, lengthdefined, partial = load_header(loadport) 
     98      end 
     99      if partial and continue 
     100        raise "Partial Body Lengths packet not supported" 
     101      end 
     102      continue = partial 
    94103      initpos = loadport.readlength 
    95104      unless TAG_LOADER.key?(tag) 
     
    112121      dumpport = IndentDumpPort.for(io) 
    113122    end 
     123    continue = false 
    114124    loadport = wrap_port(port) 
    115125    while !loadport.eof? 
    116126      initpos = nil 
    117127      begin 
    118         newheader, tag, lengthdefined = load_header(loadport) 
     128        if continue 
     129          lengthdefined, partial = load_length_new(loadport) 
     130        else 
     131          newheader, tag, lengthdefined, partial = load_header(loadport) 
     132        end 
    119133        newtag = newheader ? "New" : "Old" 
    120         dumpport.puts "#{newtag}: #{taglabel(tag)}(tag #{tag})(#{lengthdefined} bytes)\n" 
     134        if partial 
     135          if continue 
     136            dumpport.puts "#{newtag}(partial continue): - (tag #{tag})(#{lengthdefined} bytes)" 
     137            loadport.read(lengthdefined) 
     138            next 
     139          else 
     140            newtag += '(partial start)' 
     141          end 
     142        else 
     143          if continue 
     144            newtag += '(partial end)' 
     145          end 
     146        end 
     147        continue = partial 
     148        dumpport.puts "#{newtag}: #{taglabel(tag)}(tag #{tag})(#{lengthdefined} bytes)" 
    121149        initpos = loadport.readlength 
    122150        dumpport.indent(4) do 
     
    175203  def self.load_header(port) 
    176204    v = load_1octet(port) 
     205    partial = false 
    177206    if (H_BASE & v).zero? 
    178207      raise "Illegal PGP packet (#{H_BASE} must be always one): #{v}" 
     
    180209    if (H_FORMAT_MASK & v).nonzero? 
    181210      tag = H_NEW_TAG_MASK & v 
    182       length = load_length_new(port) 
     211      length, partial = load_length_new(port) 
    183212      newheader = true 
    184213    else 
     
    188217      newheader = false 
    189218    end 
    190     return [newheader, tag, length
     219    return [newheader, tag, length, partial
    191220  end 
    192221 
  • trunk/lib/pgp/packet/sigsubpacket/packet.rb

    r18 r29  
    9999 
    100100  def self.load(port) 
    101     length = load_length_new(port) 
     101    length, partial = load_length_new(port) 
     102    if partial 
     103      raise "Partial Body Lengths not allowed" 
     104    end 
    102105    type = load_type(port) 
    103106    critical = type & T_CRITICAL 
  • trunk/lib/pgp/packet/support.rb

    r18 r29  
    114114      octet1 = load_1octet(port) 
    115115      if octet1 <= 191 
    116         octet1 
     116        return octet1, false 
    117117      elsif octet1 <= 223 
    118118        octet2 = load_1octet(port) 
    119         ((octet1 - 192) << 8) + octet2 + 192 
     119        return ((octet1 - 192) << 8) + octet2 + 192, false 
    120120      elsif octet1 == 255 
    121         load_4octet(port) 
    122       else 
    123         raise "Unknown format" 
     121        return load_4octet(port), false 
     122      else      # Partial Body Length 
     123        return (1 << (octet1 & 0x1f)), true 
    124124      end 
    125125    end 
  • trunk/lib/pgp/packet/userattrsubpacket/packet.rb

    r18 r29  
    7272 
    7373  def self.load(port) 
    74     length = load_length_new(port) 
     74    length, partial = load_length_new(port) 
     75    if partial 
     76      raise "Partial Body Lengths not allowed" 
     77    end 
    7578    type = load_type(port) 
    7679    unless TAG_LOADER.key?(type)