module JsonWebToken::Format::Base64Url

Provide base64url encoding and decoding functions without padding, based upon standard base64 encoding and decoding functions that do use padding @see tools.ietf.org/html/rfc7515#appendix-C

Public Instance Methods

base64_padding_added(str) click to toggle source
# File lib/json_web_token/format/base64_url.rb, line 33
def base64_padding_added(str)
  mod = str.length % 4
  return str if mod == 0
  fail('Invalid base64 string') if mod == 1
  "#{str}#{'=' * (4 - mod)}"
end
base64_padding_removed(encoded) click to toggle source
# File lib/json_web_token/format/base64_url.rb, line 29
def base64_padding_removed(encoded)
  encoded.gsub(/[=]/, '')
end
decode(str) click to toggle source

@param str [String] encoded as url_encode64 @return [String] with trailing '=' padding added before decoding @example

Base64Url.decode("YmFy")
# => 'bar'
# File lib/json_web_token/format/base64_url.rb, line 25
def decode(str)
  Base64.urlsafe_decode64(base64_padding_added(str))
end
encode(str) click to toggle source

@param str [String] @return [String] a urlsafe_encode64 string with all trailing '=' padding removed @example

Base64Url.encode('foo')
# => 'Zm9v'
# File lib/json_web_token/format/base64_url.rb, line 16
def encode(str)
  base64_padding_removed(Base64.urlsafe_encode64(str))
end