class Multibases::Base64

Constants

Default

rubocop:disable Metrics/LineLength

UrlSafe

Public Class Methods

decode(packed) click to toggle source
# File lib/multibases/base64.rb, line 27
def self.decode(packed)
  packed = packed.pack('C*') if packed.is_a?(Array)
  # Base64.strict_decode64("m").first
  # Don't use m0, as that requires padderding _always_
  DecodedByteArray.new(packed.unpack1('m').bytes)
end
encode(plain) click to toggle source

RFC 4648 implementation

# File lib/multibases/base64.rb, line 17
def self.encode(plain)
  plain = plain.pack('C*') if plain.is_a?(Array)

  # Base64.strict_encode(plain)
  EncodedByteArray.new(
    Array(String(plain)).pack('m0').bytes,
    encoding: Encoding::US_ASCII
  )
end
new(alphabet, strict: false, encoding: nil) click to toggle source
# File lib/multibases/base64.rb, line 58
def initialize(alphabet, strict: false, encoding: nil)
  @table = Table.from(alphabet, strict: strict, encoding: encoding)
end

Public Instance Methods

==(other)
Alias for: eql?
decodable?(encoded) click to toggle source
# File lib/multibases/base64.rb, line 108
def decodable?(encoded)
  (encoded.uniq - table_ords).length.zero?
end
decode(encoded) click to toggle source
# File lib/multibases/base64.rb, line 76
def decode(encoded)
  return DecodedByteArray::EMPTY if encoded.empty?

  unless encoded.is_a?(Array)
    encoded = encoded.force_encoding(@table.encoding).bytes
  end

  unless decodable?(encoded)
    raise ArgumentError, "'#{encoded}' contains unknown characters'"
  end

  unless default?
    encoded = ByteArray.new(encoded).transcode(
      table_ords,
      Default.table_ords(force_strict: @table.strict?),
      encoding: Encoding::US_ASCII
    )
  end

  Multibases::Base64.decode(encoded)
end
default?() click to toggle source
# File lib/multibases/base64.rb, line 98
def default?
  eql?(Default)
end
encode(plain) click to toggle source
# File lib/multibases/base64.rb, line 62
def encode(plain)
  return EncodedByteArray::EMPTY if plain.empty?

  encoded = Multibases::Base64.encode(plain)
  encoded.chomp!(Default.table_padder) unless @table.padder
  return encoded if default?

  encoded.transcode(
    Default.table_ords(force_strict: @table.strict?),
    table_ords,
    encoding: @table.encoding
  )
end
eql?(other) click to toggle source
# File lib/multibases/base64.rb, line 102
def eql?(other)
  other.is_a?(Base64) && other.instance_variable_get(:@table) == @table
end
Also aliased as: ==
inspect() click to toggle source
# File lib/multibases/base64.rb, line 9
def inspect
  '[Multibases::Base64 ' \
    "alphabet=\"#{@table.alphabet}\"" \
    "#{@table.padder.nil? ? '' : ' pad="' + @table.padder.chr + '"'}" \
  ']'
end
table_ords(force_strict: nil) click to toggle source
# File lib/multibases/base64.rb, line 112
def table_ords(force_strict: nil)
  @table.tr_ords(force_strict: force_strict)
end
table_padder() click to toggle source
# File lib/multibases/base64.rb, line 116
def table_padder
  @table.padder
end