Class: Fediverse::Signature::Rfc9421

Inherits:
Object
  • Object
show all
Defined in:
lib/fediverse/signature/rfc9421.rb

Class Method Summary collapse

Class Method Details

.sign(sender:, request:) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/fediverse/signature/rfc9421.rb', line 11

def sign(sender:, request:)
  request.headers['Content-Digest'] = digest(request.body) if request.body
  Linzer.sign!(
    request,
    key:        linzer_private_key(sender),
    components: components(request),
    params:     {
      created: Time.now.to_i,
      alg:     'rsa-v1_5-sha256',
    }
  )
  request
end

.verify!(request:) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fediverse/signature/rfc9421.rb', line 25

def verify!(request:)
  # Do we have a signature to verify?
  return false if !request.headers.key?('Signature-Input') || !request.headers.key?('Signature')

  # Verify the signature
  Linzer.verify!(request) do |key_id|
    sender = Fedipub::Actor.find_or_create_by_federation_url(key_id.split('#', 2).first)
    raise Fediverse::Signature::BadSignature if sender.nil?

    linzer_public_key(sender)
  end
rescue Linzer::Error
  raise Fediverse::Signature::BadSignature
end