Skip to content

Commit

Permalink
fix protected_header issue
Browse files Browse the repository at this point in the history
  • Loading branch information
thien0291 committed Jun 9, 2024
1 parent b4f2420 commit 3f968e6
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 20 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
/tmp/

json_jws-*
/bin/build
/bin/build
.byebug_history
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ verify_result = JSON_JWS.verify(json_jws, [jwk])
print "verify_result: ", verify_result

puts "\n\nAdd another signature"
# json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, { "alg" => "RS256", "extra" => "field" }, payload)
json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, header, payload)
json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, { "alg" => "RS256", "extra" => "field" })
# json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, header)
puts "json_jws_2: \n", json_jws_2

puts "\n\nVerify json jws 2"
Expand Down
4 changes: 2 additions & 2 deletions bin/console
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ verify_result = JSON_JWS.verify(json_jws, [jwk])
print "verify_result: ", verify_result

puts "\n\nAdd another signature"
# json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, { "alg" => "RS256", "extra" => "field" }, payload)
json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, header, payload)
json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, { "alg" => "RS256", "extra" => "field" })
# json_jws_2 = JSON_JWS.add_signature(json_jws, jwk2, header)
puts "json_jws_2: \n", json_jws_2

puts "\n\nVerify json jws 2"
Expand Down
3 changes: 2 additions & 1 deletion lib/json_jws/encode.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ def encode(jwk, header, payload)
protected_header = Base64.urlsafe_encode64(header.to_json)
payload = payload.to_json unless payload.is_a?(String)

protected_header, signature = build_signature(jwk, header, payload)
{
"payload" => Base64.urlsafe_encode64(payload),
"signatures" => [
{
"protected" => protected_header,
"signature" => build_signature(jwk, header, payload),
"signature" => signature,
},
],
}
Expand Down
15 changes: 7 additions & 8 deletions lib/json_jws/sign.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,18 @@ def build_signature(jwk, header, payload)
payload = payload.to_json unless payload.is_a?(String)
raise "header must be a Hash" unless header.is_a?(Hash)

encoded_payload = Base64.urlsafe_encode64(payload)
encoded_header = Base64.urlsafe_encode64(header.to_json)

JOSE::JWS.sign(jwk, payload, header).to_hash["signature"]
jose_signed_map = JOSE::JWS.sign(jwk, payload, header)
jose_signed_map.to_hash.slice("protected", "signature").values
end

def add_signature(jws, jwk, header, payload)
protected_header = Base64.urlsafe_encode64(header.to_json)
payload = payload.to_json unless payload.is_a?(String)
def add_signature(jws, jwk, protected_header)
encoded_protected_header = Base64.urlsafe_encode64(protected_header.to_json)
raw_payload = Base64.decode64(jws["payload"])
protected_header, signature = build_signature(jwk, protected_header, raw_payload)

jws["signatures"] << {
"protected" => protected_header,
"signature" => build_signature(jwk, header, payload),
"signature" => signature,
}

jws
Expand Down
9 changes: 3 additions & 6 deletions lib/json_jws/verify.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,15 @@ def verify_signature(jwk, b64_payload, jws_json_signature)
end

def verify(jws, jwks)

# verify payload is base64 encoded
begin
Base64.urlsafe_decode64(jws["payload"])
rescue
return false
end
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

0 comments on commit 3f968e6

Please sign in to comment.