Sha256: cc766de5cdf834bd90755f2e50b2bfb4bdbbd05dcdf8f83bf81e0987fbbd0524

Contents?: true

Size: 656 Bytes

Versions: 1

Compression:

Stored size: 656 Bytes

Contents

require "base64"
require "json"
require "jose"

module JsonJws::Verify
  def verify_signature(jwk, b64_payload, jws_json_signature)
    verify_hash = {
      "payload" => b64_payload,
      "protected" => jws_json_signature["protected"],
      "signature" => jws_json_signature["signature"],
    }

    JOSE::JWS.verify(jwk, verify_hash).first
  end

  def verify(jws, jwks)
    # verify payload is base64 encoded
    Base64.urlsafe_decode64(jws["payload"])

    jws["signatures"].each_with_index do |signature, index|
      return false unless verify_signature(jwks[index], jws["payload"], signature)
    end

    true
  rescue
    return false
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
json_jws-0.2.0 lib/json_jws/verify.rb