rotp 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rotp/totp.rb +4 -2
- data/lib/rotp/version.rb +1 -1
- data/spec/totp_spec.rb +9 -1
- metadata +4 -4
data/lib/rotp/totp.rb
CHANGED
@@ -38,8 +38,10 @@ module ROTP
|
|
38
38
|
# @param [Integer] drift the number of seconds that the client
|
39
39
|
# and server are allowed to drift apart
|
40
40
|
def verify_with_drift(otp, drift, time = Time.now)
|
41
|
-
|
42
|
-
(-
|
41
|
+
time = time.to_i
|
42
|
+
times = (time-drift..time+drift).step(interval).to_a
|
43
|
+
times << time + drift if times.last < time + drift
|
44
|
+
times.any? { |ti| verify(otp, ti) }
|
43
45
|
end
|
44
46
|
|
45
47
|
# Returns the provisioning URI for the OTP
|
data/lib/rotp/version.rb
CHANGED
data/spec/totp_spec.rb
CHANGED
@@ -26,10 +26,18 @@ describe ROTP::TOTP do
|
|
26
26
|
subject.verify_with_drift(subject.at(@now - 30), 60, @now).should be_true
|
27
27
|
end
|
28
28
|
it "should verify a slightly new number" do
|
29
|
-
subject.verify_with_drift(subject.at(@now
|
29
|
+
subject.verify_with_drift(subject.at(@now + 60), 60, @now).should be_true
|
30
30
|
end
|
31
31
|
it "should reject a number that is outside the allowed drift" do
|
32
32
|
subject.verify_with_drift(subject.at(@now - 60), 30, @now).should be_false
|
33
33
|
end
|
34
|
+
context "with drift that is not a multiple of the TOTP interval" do
|
35
|
+
it "should verify a slightly old number" do
|
36
|
+
subject.verify_with_drift(subject.at(@now - 45), 45, @now).should be_true
|
37
|
+
end
|
38
|
+
it "should verify a slightly new number" do
|
39
|
+
subject.verify_with_drift(subject.at(@now + 40), 40, @now).should be_true
|
40
|
+
end
|
41
|
+
end
|
34
42
|
end
|
35
43
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rotp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 1.4.
|
9
|
+
- 1
|
10
|
+
version: 1.4.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mark Percival
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-05-
|
18
|
+
date: 2012-05-21 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rspec
|