class Multichain::Encoder

Public Class Methods

decode(hexified) click to toggle source
# File lib/multichain/encoder.rb, line 56
def self.decode hexified
  dehexify hexified
end
dehexify(hexified) click to toggle source
# File lib/multichain/encoder.rb, line 52
def self.dehexify hexified
  hexified.scan(/../).map { |x| x.hex.chr }.join
end
encode(url, headers = self.headers) click to toggle source
# File lib/multichain/encoder.rb, line 48
def self.encode url, headers = self.headers
  hexify url, headers = self.headers
end
extract(input_string) click to toggle source
# File lib/multichain/encoder.rb, line 27
def self.extract input_string
  parts = input_string.split '|'
  keys = [
    :timestamp,
    :url,
    :headers,
    :hash
  ]
  h = {}

  keys.each_with_index do |k, i|
    h[k] = parts[i]
  end

  h
end
hash(url, headers = self.headers) click to toggle source
# File lib/multichain/encoder.rb, line 13
def self.hash url, headers = self.headers
  sha256 url, headers = self.headers
end
headers() click to toggle source
# File lib/multichain/encoder.rb, line 3
def self.headers
  {
    'Accept' => 'application/json'
  }
end
hexify(url, headers = self.headers) click to toggle source
# File lib/multichain/encoder.rb, line 44
def self.hexify url, headers = self.headers
  input_string(url).each_byte.map { |b| b.to_s(16) }.join
end
input_string(url, headers = self.headers) click to toggle source
# File lib/multichain/encoder.rb, line 17
def self.input_string url, headers = self.headers
  a = []
  a.push Time.new.to_i
  a.push url
  a.push headers.to_json
  a.push sha256(url)

  a.join '|'
end
sha256(url, headers = self.headers) click to toggle source
# File lib/multichain/encoder.rb, line 9
def self.sha256 url, headers = self.headers
  body = Digest::SHA256.hexdigest(HTTParty.get(url, headers: headers).body)
end
verify(hexified) click to toggle source
# File lib/multichain/encoder.rb, line 60
def self.verify hexified
  parts = extract dehexify hexified
  parts[:hash] == sha256(parts[:url])
end