module Base32

Constants

ALPHABET

Public Instance Methods

a2b(ascstr) click to toggle source
# File lib/base32/base32.rb, line 13
def a2b(ascstr)
  n_octets = (ascstr.length * 5) / 8
  bigint = ascstr.to_i(32)
  octet_arr = Array.new(n_octets)

  while n_octets > 0
    octet_arr[n_octets - 1] = bigint & 0b11111111
    bigint >>= 8
    n_octets -= 1
  end

  octet_arr.pack('C*')
end
b2a(binstr) click to toggle source

native-ruby encoding/decoding implementation probably could be a lot faster!

# File lib/base32/base32.rb, line 7
def b2a(binstr)
  n_pentets = ((binstr.length * 8) + 4) / 5
  bigint = binstr.bytes.inject(0){ |i,octet| (i << 8) | octet }
  bigint.to_s(32).rjust(n_pentets, '0')
end
decode32(ascstr, variant_name = :plain) click to toggle source
# File lib/base32.rb, line 13
def decode32(ascstr, variant_name = :plain)
  variant = Variant[variant_name]
  cleanascstr = variant.clean(ascstr)

  if cleanascstr.length == 0 && ascstr.length != 0
    raise ArgumentError, "invalid Base32 sequence"
  end

  self.a2b(variant.unwrap(cleanascstr))
end
encode32(binstr, variant_name = :plain) click to toggle source
# File lib/base32.rb, line 9
def encode32(binstr, variant_name = :plain)
  Variant[variant_name].wrap(self.b2a(binstr))
end