class OpenPGP::S2K::DEFAULT
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