diff --git a/lib/jwt/jwk/key_abstract.rb b/lib/jwt/jwk/key_abstract.rb index b9271469..fd8a234c 100644 --- a/lib/jwt/jwk/key_abstract.rb +++ b/lib/jwt/jwk/key_abstract.rb @@ -3,7 +3,8 @@ module JWT module JWK class KeyAbstract - attr_reader :keypair, :kid + attr_reader :keypair + attr_accessor :kid def initialize(keypair, kid = nil) @keypair = keypair diff --git a/lib/jwt/jwk/rsa.rb b/lib/jwt/jwk/rsa.rb index 431a809a..d177bf72 100644 --- a/lib/jwt/jwk/rsa.rb +++ b/lib/jwt/jwk/rsa.rb @@ -9,7 +9,8 @@ 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) - super(keypair, kid || self.class.generate_kid(keypair.public_key)) + super + kid ||= generate_kid end def private? @@ -35,6 +36,12 @@ def export(options = {}) private + 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 append_private_parts(the_hash) the_hash.merge( d: encode_open_ssl_bn(keypair.d), @@ -59,12 +66,6 @@ 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)