Module: Base32

Defined in:
lib/base32.rb,
lib/base32/base32.rb,
lib/base32/variant.rb,
lib/base32/version.rb

Defined Under Namespace

Modules: VERSION Classes: Variant

Constant Summary collapse

ALPHABET =
'0123456789ABCDEFGHIJKLMNOPQRSTUV'

Class Method Summary collapse

Class Method Details

.a2b(ascstr) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Object



7
8
9
10
11
# 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) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# 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) ⇒ Object



9
10
11
# File 'lib/base32.rb', line 9

def encode32(binstr, variant_name = :plain)
  Variant[variant_name].wrap(self.b2a(binstr))
end