Class: Fediverse::Signature::DraftCavage12
- Inherits:
-
Object
- Object
- Fediverse::Signature::DraftCavage12
- Defined in:
- lib/fediverse/signature/draft_cavage12.rb
Class Method Summary collapse
Class Method Details
.sign(sender:, request:) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/fediverse/signature/draft_cavage12.rb', line 7 def sign(sender:, request:) request = set_headers(request) parts = { keyId: sender.key_id, headers: signature_headers(request).join(' '), signature: signature(sender: sender, request: request), } request.headers['Signature'] = parts.map { |k, v| "#{k}=\"#{v}\"" }.join(',') request end |
.verify!(request:) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fediverse/signature/draft_cavage12.rb', line 19 def verify!(request:) # Do we have a signature to verify? return false unless request.headers.key?('Signature') # Have we got what we need? components = signature_components(request) raise Fediverse::Signature::BadSignature, 'Malformed signature' unless components['signature'] && components['headers'] # Find the sender sender = find_sender_by_key_id(components['keyId']) raise Fediverse::Signature::BadSignature, "Couldn't find sender" unless sender # Build the expected payload comparison_string = signature_payload(request: request, headers: components['headers']) # Verify the payload against the signature result = do_verification(components['signature'], sender, comparison_string) raise Fediverse::Signature::BadSignature unless result result end |