From ec9a4c77947e0270ac00f0391a0ad68d2b4cc832 Mon Sep 17 00:00:00 2001 From: Joakim Antman Date: Fri, 2 Oct 2020 11:59:49 +0300 Subject: [PATCH] Use kid and keypair accessors from the abstract --- lib/jwt/jwk/rsa.rb | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/lib/jwt/jwk/rsa.rb b/lib/jwt/jwk/rsa.rb index 61249692..431a809a 100644 --- a/lib/jwt/jwk/rsa.rb +++ b/lib/jwt/jwk/rsa.rb @@ -3,17 +3,13 @@ module JWT module JWK class RSA < KeyAbstract - attr_reader :keypair - BINARY = 2 KTY = 'RSA'.freeze RSA_KEY_ELEMENTS = %i[n e d p q dp dq qi].freeze 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 +20,6 @@ def public_key keypair.public_key end - def kid - @kid ||= generate_kid - end - def export(options = {}) exported_hash = { kty: KTY, @@ -54,12 +46,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 +59,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)