Class: TimeSensitiveHmac::Signature

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secret, opts = {}) ⇒ Signature

Returns a new instance of Signature.



9
10
11
12
13
14
# File 'lib/time_sensitive_hmac/signature.rb', line 9

def initialize(secret, opts={})
  @secret = secret
  @digest = OpenSSL::Digest::Digest.new(
              opts[:digest] || 'sha256'
            )
end

Instance Attribute Details

#digestObject (readonly)

Returns the value of attribute digest.



7
8
9
# File 'lib/time_sensitive_hmac/signature.rb', line 7

def digest
  @digest
end

#secretObject (readonly)

Returns the value of attribute secret.



7
8
9
# File 'lib/time_sensitive_hmac/signature.rb', line 7

def secret
  @secret
end

Instance Method Details

#generate(time, data, context = nil) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/time_sensitive_hmac/signature.rb', line 16

def generate(time, data, context=nil)
  raw = OpenSSL::HMAC.digest(
    digest,
    secret,
    data_from_parts(time, context, data)
  )
  encode(raw)
end

#verify(sig, time, data, context = nil, grace_period_in_seconds = 0) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/time_sensitive_hmac/signature.rb', line 25

def verify(sig, time, data, context=nil, grace_period_in_seconds=0)
  # TODO: grace period
  # Take inspiration from HOTP (RFC 4226) for time intervals:
  # http://tools.ietf.org/html/rfc4226#page-35
  check_sig = generate(time, data, context)
  sig == check_sig
end

#verify_now(sig, data, context = nil, grace_period_in_seconds = 0) ⇒ Object



33
34
35
# File 'lib/time_sensitive_hmac/signature.rb', line 33

def verify_now(sig, data, context=nil, grace_period_in_seconds=0)
  verify(sig, Time.now, context, grace_period_in_seconds)
end