class OpenPGP::S2K::DEFAULT

@see tools.ietf.org/html/rfc4880#section-3.7.1.3

Constants

EXPBIAS
IDENTIFIER

Attributes

count[R]

@return [Integer]

Public Class Methods

new(passphrase = nil, options = {}, &block) click to toggle source

@param [String, to_s] passphrase @param [Hash{Symbol => Object}] options

Calls superclass method OpenPGP::S2K::Salted::new
# File lib/openpgp/s2k.rb, line 193
def initialize(passphrase = nil, options = {}, &block)
  super(passphrase, options, &block)
  @count = 65536 unless @count
end
parse(input) click to toggle source

@param [Buffer] input @return [S2K]

# File lib/openpgp/s2k.rb, line 181
def self.parse(input)
  self.new(nil, :algorithm => input.read_byte, :salt => input.read_bytes(8)) do |s2k|
    s2k.count = s2k.decode_count(input.read_byte)
  end
end

Public Instance Methods

digest_input() click to toggle source

@return [String]

Calls superclass method OpenPGP::S2K::Salted#digest_input
# File lib/openpgp/s2k.rb, line 214
def digest_input
  buffer = Buffer.write do |buffer|
    iterations = count
    while iterations > 0
      buffer << (digest_input = super())
      iterations -= digest_input.size
    end
  end
end
to_hash() click to toggle source

@return [Hash]

Calls superclass method OpenPGP::S2K::Salted#to_hash
# File lib/openpgp/s2k.rb, line 208
def to_hash
  super.merge(:count => count)
end
write(buffer) click to toggle source

@param [Buffer] buffer @return [void]

Calls superclass method OpenPGP::S2K::Salted#write
# File lib/openpgp/s2k.rb, line 201
def write(buffer)
  super(buffer)
  buffer.write_byte(encode_count(count))
end

Protected Instance Methods

decode_count(count) click to toggle source

@param [Integer] count @return [Integer]

# File lib/openpgp/s2k.rb, line 231
def decode_count(count)
  (16 + (count & 15)) << ((count >> 4) + EXPBIAS)
end
encode_count(iterations) click to toggle source

@param [Integer] iterations @return [Integer]

# File lib/openpgp/s2k.rb, line 238
def encode_count(iterations)
  case iterations
    when 0..1024           then 0
    when 65011712..(1.0/0) then 255
    else
      count1 = iterations >> 6
      count2 = (count2 || 0) + 1 while count1 >= 32 && count1 >>= 1
      result = (count2 << 4) | (count1 - 16)
      result += 1 if decode_count(result) < iterations
      result
  end
end