From 699dfaa396789b8371e9b677e79f0dbeeefa7c24 Mon Sep 17 00:00:00 2001 From: Joakim Antman Date: Sun, 25 Oct 2020 22:20:15 +0200 Subject: [PATCH] Support JWKs for pre 2.3 rubies --- lib/jwt/base64.rb | 8 ++++++-- lib/jwt/jwk/rsa.rb | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/jwt/base64.rb b/lib/jwt/base64.rb index e69808b1..0da612b7 100644 --- a/lib/jwt/base64.rb +++ b/lib/jwt/base64.rb @@ -7,12 +7,16 @@ module JWT class Base64 class << self def url_encode(str) - ::Base64.encode64(str).tr('+/', '-_').gsub(/[\n=]/, '') + encoded = ::Base64.encode64(str) + encoded.tr!('+/', '-_') + encoded.gsub!(/[\n=]/, '') + encoded end def url_decode(str) str += '=' * (4 - str.length.modulo(4)) - ::Base64.decode64(str.tr('-_', '+/')) + str.tr!('-_', '+/') + ::Base64.decode64(str) end end end diff --git a/lib/jwt/jwk/rsa.rb b/lib/jwt/jwk/rsa.rb index bd66d509..e9ae4057 100644 --- a/lib/jwt/jwk/rsa.rb +++ b/lib/jwt/jwk/rsa.rb @@ -54,7 +54,7 @@ def append_private_parts(the_hash) end def encode_open_ssl_bn(key_part) - ::Base64.urlsafe_encode64(key_part.to_s(BINARY), padding: false) + ::JWT::Base64.url_encode(key_part.to_s(BINARY)) end class << self @@ -107,7 +107,7 @@ def populate_key(rsa_key, rsa_parameters) # rubocop:disable Metrics/CyclomaticCo def decode_open_ssl_bn(jwk_data) return nil unless jwk_data - OpenSSL::BN.new(::Base64.urlsafe_decode64(jwk_data), BINARY) + OpenSSL::BN.new(::JWT::Base64.url_decode(jwk_data), BINARY) end end end