Module: Decidim::BulletinBoard::JwkUtils
- Defined in:
- lib/decidim/bulletin_board/jwk_utils.rb
Constant Summary collapse
- JWK_PRIVATE_FIELDS =
[:d, :p, :q, :dp, :dq, :qi].freeze
Class Method Summary collapse
- .decode_open_ssl_bn(jwk_data) ⇒ Object
- .encode_open_ssl_bn(key_part) ⇒ Object
- .import_private_key(json) ⇒ Object
- .private_export(jwk) ⇒ Object
- .private_key?(json) ⇒ Boolean
- .thumbprint(json) ⇒ Object
Class Method Details
.decode_open_ssl_bn(jwk_data) ⇒ Object
37 38 39 40 41 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 37 def self.decode_open_ssl_bn(jwk_data) return nil unless jwk_data OpenSSL::BN.new(::Base64.urlsafe_decode64(jwk_data), 2) end |
.encode_open_ssl_bn(key_part) ⇒ Object
33 34 35 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 33 def self.encode_open_ssl_bn(key_part) ::Base64.urlsafe_encode64(key_part.to_s(2), padding: false) end |
.import_private_key(json) ⇒ Object
16 17 18 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 16 def self.import_private_key(json) JWT::JWK.import(json) end |
.private_export(jwk) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 20 def self.private_export(jwk) raise "Not a private key" unless jwk.private? jwk.export.merge( d: encode_open_ssl_bn(jwk.keypair.d), p: encode_open_ssl_bn(jwk.keypair.p), q: encode_open_ssl_bn(jwk.keypair.q), dp: encode_open_ssl_bn(jwk.keypair.dmp1), dq: encode_open_ssl_bn(jwk.keypair.dmq1), qi: encode_open_ssl_bn(jwk.keypair.iqmp) ) end |
.private_key?(json) ⇒ Boolean
12 13 14 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 12 def self.private_key?(json) (json.keys & JWK_PRIVATE_FIELDS).any? end |
.thumbprint(json) ⇒ Object
8 9 10 |
# File 'lib/decidim/bulletin_board/jwk_utils.rb', line 8 def self.thumbprint(json) Base64.urlsafe_encode64(Digest::SHA256.digest(json.slice(:e, :kty, :n).to_json), padding: false) end |