class JWEToken

This class generates JSON Web Encryption (JWE) tokens as per RFC 7516.

Attributes

value[R]

Public Class Methods

new(key_id, claims, public_key, private_key) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 9
def initialize(key_id, claims, public_key, private_key)
  validate_key_id(key_id)
  validate_claims(claims)
  validate_public_key(public_key)
  validate_private_key(private_key)
  jwt    = build_jwt(claims, key_id)
  jws    = build_jws(jwt, private_key)
  @value = build_jwe(jws, public_key).to_s
end

Public Instance Methods

to_s() click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 19
def to_s
  @value
end

Private Instance Methods

build_jwe(jws, public_key) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 25
def build_jwe(jws, public_key)
  jws.encrypt(public_key, :'RSA-OAEP', :A256GCM)
end
build_jws(jwt, private_key) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 37
def build_jws(jwt, private_key)
  jwt.sign(private_key, :RS256)
end
build_jwt(claims, key_id) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 29
def build_jwt(claims, key_id)
  jwt = JSON::JWT.new(claims)
  jwt.kid = key_id
  jwt.alg = :RS256
  jwt.header[:jti] = SecureRandom.uuid
  jwt
end
validate_claims(claims) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 41
def validate_claims(claims)
  raise ArgumentError, 'claims must be specified' if claims.nil? ||
                                                     claims.empty?
end
validate_key_id(key_id) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 46
def validate_key_id(key_id)
  raise ArgumentError, 'key_id must be specified' if key_id.nil? ||
                                                     key_id.empty?
end
validate_private_key(private_key) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 51
def validate_private_key(private_key)
  raise ArgumentError, 'private_key must be specified' if private_key.nil?
  validate_rsa_key(private_key, 'private_key')
end
validate_public_key(public_key) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 56
def validate_public_key(public_key)
  raise ArgumentError, 'public_key must be specified' if public_key.nil?
  validate_rsa_key(public_key, 'public_key')
end
validate_rsa_key(key, key_type) click to toggle source
# File lib/ons-jwe/jwe_token.rb, line 61
def validate_rsa_key(key, key_type)
  unless key.instance_of? OpenSSL::PKey::RSA
    raise ArgumentError, "#{key_type} must be an RSA key"
  end
end