Sha256: 29e10c94fcfb3630c2f91655abd8b6fecab44f2ed1fd02929a4e935aabb9fa7e
Contents?: true
Size: 1.51 KB
Versions: 2
Compression:
Stored size: 1.51 KB
Contents
module JSON class JWK < Hash class UnknownAlgorithm < JWT::Exception; end def initialize(public_key, options = {}) replace encode(public_key, options) end private def ecdsa_curve_name(ecdsa_key) case ecdsa_key.group.curve_name when 'secp256k1' :'P-256' when 'secp384r1' :'P-384' when 'secp521r1' :'P-521' else raise UnknownAlgorithm.new('Unknown ECDSA Curve') end end def ecdsa_coodinates(ecdsa_key) unless @ecdsa_coodinates hex = ecdsa_key.public_key.to_bn.to_s(16) data_len = hex.length - 2 type = hex[0,2] hex_x = hex[2, data_len/2] hex_y = hex[2+data_len/2, data_len/2] @ecdsa_coodinates = { :x => hex_x, :y => hex_y } end @ecdsa_coodinates end def encode(public_key, options = {}) hash = case public_key when OpenSSL::PKey::RSA { :alg => :RSA, :exp => UrlSafeBase64.encode64(public_key.e.to_s(2)), :mod => UrlSafeBase64.encode64(public_key.n.to_s(2)) } when OpenSSL::PKey::EC { :alg => :EC, :crv => ecdsa_curve_name(public_key), :x => UrlSafeBase64.encode64(ecdsa_coodinates(public_key)[:x].to_s), :y => UrlSafeBase64.encode64(ecdsa_coodinates(public_key)[:y].to_s) } else raise UnknownAlgorithm.new('Unknown Algorithm') end hash.merge(options) end end end require 'json/jwk/set'
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
json-jwt-0.1.8 | lib/json/jwk.rb |
json-jwt-0.1.7 | lib/json/jwk.rb |