class SelfSDK::Operation

Attributes

actions[R]
jws[R]
previous[R]
sequence[R]
signing_key[R]
timestamp[R]

Public Class Methods

new(operation) click to toggle source
# File lib/signature_graph.rb, line 19
def initialize(operation)
  @jws = operation

  payload = Base64.urlsafe_decode64(@jws[:payload])
  header = Base64.urlsafe_decode64(@jws[:protected])

  op = JSON.parse(payload, symbolize_names: true)
  hdr = JSON.parse(header, symbolize_names: true)

  @sequence = op[:sequence]
  @previous = op[:previous]
  @timestamp = op[:timestamp]
  @version = op[:version]
  @actions = op[:actions]
  @signing_key = hdr[:kid]

  validate!
end

Public Instance Methods

revokes(kid) click to toggle source
# File lib/signature_graph.rb, line 48
def revokes(kid)
  @actions.each do |action|
    if action[:kid] == kid && action[:action] == ACTION_REVOKE
      return true
    end
  end
  return false
end
validate!() click to toggle source
# File lib/signature_graph.rb, line 38
def validate!
  raise "unknown operation version" if @version != "1.0.0"
  raise "invalid operation sequence" if @sequence < 0
  raise "operation does not specify a previous signature" if @previous.nil?
  raise "invalid operation timestamp" if @timestamp < 1
  raise "operation does not specify any actions" if @actions.nil?
  raise "operation does not specify any actions" if @actions.length < 1
  raise "operation does not specify an identifier for the signing key" if @signing_key.nil?
end