Class: SimpleApiAuth::Signer

Inherits:
Object
  • Object
show all
Defined in:
lib/simple-api-auth/signer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Signer

Returns a new instance of Signer.



5
6
7
8
# File 'lib/simple-api-auth/signer.rb', line 5

def initialize(options = {})
  hahser_class = options[:hasher] || SimpleApiAuth.config.hasher
  self.hasher = hahser_class.new
end

Instance Attribute Details

#hasherObject

Returns the value of attribute hasher.



3
4
5
# File 'lib/simple-api-auth/signer.rb', line 3

def hasher
  @hasher
end

Instance Method Details

#make_hashed_request(request) ⇒ Object



32
33
34
35
36
# File 'lib/simple-api-auth/signer.rb', line 32

def make_hashed_request(request)
  canonical_request_string = make_canonical_request(request)
  SimpleApiAuth.log(Logger::DEBUG, "Canonical request string: #{canonical_request_string}")
  Digest.hexencode(hasher.hash(canonical_request_string))
end

#make_string_to_sign(request) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/simple-api-auth/signer.rb', line 23

def make_string_to_sign(request)
  hashed_request = make_hashed_request(request)
  SimpleApiAuth.log(Logger::DEBUG, "Hashed request: #{hashed_request}")
  [
    request.time.iso8601,
    hashed_request
  ].join("\n")
end

#sign(request, secret_key) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/simple-api-auth/signer.rb', line 10

def sign(request, secret_key)
  fail SigningError, 'time header is not present' if request.time.nil?

  signing_key = make_signing_key(request, secret_key)
  SimpleApiAuth.log(Logger::DEBUG, "Signing key(hex): #{Digest.hexencode(signing_key)}")

  string_to_sign = make_string_to_sign(request)
  SimpleApiAuth.log(Logger::DEBUG, "String to sign: #{string_to_sign}")

  signature = hasher.hmac(signing_key, string_to_sign)
  Digest.hexencode(signature)
end