diff --git a/lib/jwt/jwk/rsa.rb b/lib/jwt/jwk/rsa.rb index 61249692..ebb0f888 100644 --- a/lib/jwt/jwk/rsa.rb +++ b/lib/jwt/jwk/rsa.rb @@ -3,7 +3,6 @@ module JWT module JWK class RSA < KeyAbstract - attr_reader :keypair BINARY = 2 KTY = 'RSA'.freeze @@ -11,9 +10,7 @@ class RSA < KeyAbstract def initialize(keypair, kid = nil) raise ArgumentError, 'keypair must be of type OpenSSL::PKey::RSA' unless keypair.is_a?(OpenSSL::PKey::RSA) - - @keypair = keypair - @kid = kid + super(keypair, kid || self.class.generate_kid(keypair.public_key)) end def private? @@ -24,10 +21,6 @@ def public_key keypair.public_key end - def kid - @kid ||= generate_kid - end - def export(options = {}) exported_hash = { kty: KTY, @@ -54,12 +47,6 @@ def append_private_parts(the_hash) ) end - def generate_kid - sequence = OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer.new(public_key.n), - OpenSSL::ASN1::Integer.new(public_key.e)]) - OpenSSL::Digest::SHA256.hexdigest(sequence.to_der) - end - def encode_open_ssl_bn(key_part) ::Base64.urlsafe_encode64(key_part.to_s(BINARY), padding: false) end @@ -73,6 +60,12 @@ def import(jwk_data) self.new(rsa_pkey(pkey_params), kid) end + def generate_kid(public_key) + sequence = OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer.new(public_key.n), + OpenSSL::ASN1::Integer.new(public_key.e)]) + OpenSSL::Digest::SHA256.hexdigest(sequence.to_der) + end + private def jwk_attributes(jwk_data, *attributes)