otp 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c73f2c47bcd8a1d4b36391d5b8ffd77fee13670
4
- data.tar.gz: 29c50f0d362b6abd5d018c69301f919dfffc748c
3
+ metadata.gz: 032b0bd99d66d97d8281cd5006409b1f482c2314
4
+ data.tar.gz: ca0320a12fe5d73c907e8cd445dac6fd0219112f
5
5
  SHA512:
6
- metadata.gz: 234d1455ead02f326578c8a2470586eb056c8c91ace926476ff384e53843ef1a58481d015e8dc05442b6830834703cb1b5205344cdca6e9aa7ad7e1df9204b0b
7
- data.tar.gz: cd3df6b91c9fb94f138646913aa6a3efdaa8988e0c3a96fb3b0dd58a3a9d32065425c932226cafad893d22fec14565997b2b4a92f76a0d30995498a4597820e5
6
+ metadata.gz: f60da46723a92855571fcabbf0b8e0ad264093822516ebdd9d152181cb102280c92a3ce97a499b9bf661aac9adf6ff2694e2ae02294eb39d2e6d1be70d3eb8ed
7
+ data.tar.gz: 8d90aba69fd87db84b94a3b0a374f817a8566d970be4820e868f16a1098b81e8de188247bc9b29c4f811a0e4779bb1c8cc43907aef5fc1b4fd974a7fd68e28bb
data/.rubocop.yml ADDED
@@ -0,0 +1,49 @@
1
+ AllCops:
2
+ Exclude: []
3
+ RunRailsCops: false
4
+ DisplayCopNames: true
5
+
6
+ Style/StringLiterals:
7
+ Enabled: false
8
+
9
+ Style/GuardClause:
10
+ Enabled: false
11
+
12
+ Style/TrailingComma:
13
+ Enabled: false
14
+
15
+ Style/SpaceAroundEqualsInParameterDefault:
16
+ Enabled: false
17
+
18
+ Style/SpaceAroundOperators:
19
+ Enabled: false
20
+
21
+ Style/SpaceBeforeBlockBraces:
22
+ Enabled: false
23
+
24
+ Style/SpaceInsideHashLiteralBraces:
25
+ Enabled: false
26
+
27
+ Style/SpaceInsideBlockBraces:
28
+ Enabled: false
29
+
30
+ Style/RedundantReturn:
31
+ Enabled: false
32
+
33
+ Style/SignalException:
34
+ Enabled: false
35
+
36
+ Style/FormatString:
37
+ Enabled: false
38
+
39
+ Style/EachWithObject:
40
+ Enabled: false
41
+
42
+ Metrics/AbcSize:
43
+ Max: 20
44
+
45
+ Metrics/MethodLength:
46
+ Max: 30
47
+
48
+ Style/IfUnlessModifier:
49
+ Enabled: false
data/Gemfile CHANGED
@@ -5,4 +5,7 @@ gemspec
5
5
 
6
6
  group :development, :test do
7
7
  gem "test-unit"
8
+ gem "simplecov"
9
+ gem "rubocop", require: false
8
10
  end
11
+
data/lib/otp/base.rb CHANGED
@@ -42,8 +42,8 @@ module OTP
42
42
  end
43
43
 
44
44
  def verify(given_pw, last:0, post:0)
45
- raise "last must be greater than or equal to 0" if last < 0
46
- raise "post must be greater than or equal to 0" if post < 0
45
+ raise ArgumentError, "last must be greater than or equal to 0" if last < 0
46
+ raise ArgumentError, "post must be greater than or equal to 0" if post < 0
47
47
  return false if given_pw.nil? || given_pw.empty?
48
48
  return (-last..post).any?{|i| compare(password(i), given_pw) }
49
49
  end
data/lib/otp/base32.rb CHANGED
@@ -6,11 +6,11 @@ module OTP
6
6
  )
7
7
 
8
8
  DECODE_MAP = {
9
- ?A=>0, ?B=>1, ?C=>2, ?D=>3, ?E=>4, ?F=>5, ?G=>6, ?H=>7,
10
- ?I=>8, ?J=>9, ?K=>10, ?L=>11, ?M=>12, ?N=>13, ?O=>14, ?P=>15,
11
- ?Q=>16, ?R=>17, ?S=>18, ?T=>19, ?U=>20, ?V=>21, ?W=>22, ?X=>23,
12
- ?Y=>24, ?Z=>25, ?2=>26, ?3=>27, ?4=>28, ?5=>29, ?6=>30, ?7=>31,
13
- ?==>-1,
9
+ "A"=>0, "B"=>1, "C"=>2, "D"=>3, "E"=>4, "F"=>5, "G"=>6, "H"=>7,
10
+ "I"=>8, "J"=>9, "K"=>10, "L"=>11, "M"=>12, "N"=>13, "O"=>14, "P"=>15,
11
+ "Q"=>16, "R"=>17, "S"=>18, "T"=>19, "U"=>20, "V"=>21, "W"=>22, "X"=>23,
12
+ "Y"=>24, "Z"=>25, "2"=>26, "3"=>27, "4"=>28, "5"=>29, "6"=>30, "7"=>31,
13
+ "="=>-1,
14
14
  }
15
15
 
16
16
  DECODE_LENGTH = {
@@ -28,7 +28,7 @@ module OTP
28
28
 
29
29
  def encode(bytes, padding: true)
30
30
  return nil unless bytes
31
- pad = padding ? ?= : ""
31
+ pad = padding ? "=" : ""
32
32
  ret = ""
33
33
  bytes = bytes.dup.force_encoding("binary")
34
34
  off = 0
@@ -68,7 +68,6 @@ module OTP
68
68
  else
69
69
  n <<= 5
70
70
  n |= d
71
- l = ((i+1) * 5.0 / 8.0).floor
72
71
  l = DECODE_LENGTH[i+1]
73
72
  end
74
73
  end
data/lib/otp/uri.rb CHANGED
@@ -10,10 +10,9 @@ module OTP
10
10
  uri = ::URI.parse(uri_string)
11
11
  raise "URI scheme not match: #{uri.scheme}" unless uri.scheme != SCHEME
12
12
  otp = otp_class(uri).new
13
- if %r{/(?:([^:]*): *)?(.+)} =~ uri.path
14
- otp.issuer = $1
15
- otp.accountname = $2
16
- end
13
+ m = %r{/(?:([^:]*): *)?(.+)}.match(::URI.decode(uri.path))
14
+ otp.issuer = m[1] if m[1]
15
+ otp.accountname = m[2]
17
16
  query = Hash[::URI.decode_www_form(uri.query)]
18
17
  otp.secret = query["secret"]
19
18
  if value = query["algorithm"]
data/lib/otp/version.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  module OTP
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
4
-
data/test/helper.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "simplecov"
2
+ SimpleCov.start do
3
+ add_filter "/test/"
4
+ end
5
+
6
+ require "test/unit"
7
+ require "otp"
8
+
data/test/test_base.rb ADDED
@@ -0,0 +1,25 @@
1
+ require_relative "helper"
2
+
3
+ class TestBase < Test::Unit::TestCase
4
+ def test_base
5
+ otp = OTP::Base.new
6
+ otp.new_secret(20)
7
+ assert_equal(32, otp.secret.length)
8
+ otp.new_secret(40)
9
+ assert_equal(64, otp.secret.length)
10
+ end
11
+
12
+ def test_methods_expected_to_be_override
13
+ base = OTP::Base.new
14
+ totp = OTP::TOTP.new
15
+
16
+ [
17
+ [:moving_factor, ],
18
+ [:type_specific_uri_params, ],
19
+ [:extract_type_specific_uri_params, {}],
20
+ ].each do |m, *args|
21
+ assert_raise(NotImplementedError){ base.send(m, *args) }
22
+ assert_nothing_raised{ totp.send(m, *args) }
23
+ end
24
+ end
25
+ end
data/test/test_base32.rb CHANGED
@@ -1,5 +1,4 @@
1
- require "test/unit"
2
- require "otp/base32"
1
+ require_relative "helper"
3
2
 
4
3
  class TestBase32 < Test::Unit::TestCase
5
4
  def assert_encode(encoded, plain, padding: true)
data/test/test_hotp.rb CHANGED
@@ -1,5 +1,4 @@
1
- require "test/unit"
2
- require "otp"
1
+ require_relative "helper"
3
2
 
4
3
  class TestHTOP < Test::Unit::TestCase
5
4
  def assert_hotp(hotp, count, pass)
data/test/test_totp.rb CHANGED
@@ -1,5 +1,4 @@
1
- require "test/unit"
2
- require "otp"
1
+ require_relative "helper"
3
2
 
4
3
  class TestTOTP < Test::Unit::TestCase
5
4
  def assert_totp(totp, time, pass)
@@ -71,4 +70,11 @@ class TestTOTP < Test::Unit::TestCase
71
70
  assert(totp.verify("78660635", last:2, post:2))
72
71
  assert(!totp.verify("97845627", last:2, post:2))
73
72
  end
73
+
74
+ def test_error
75
+ seed = "12345678901234567890"
76
+ totp = OTP::TOTP.new(OTP::Base32.encode(seed), "SHA1", 8)
77
+ assert_raise(ArgumentError){ assert(totp.verify("50451956", last:-2)) }
78
+ assert_raise(ArgumentError){ assert(totp.verify("50451956", post:-2)) }
79
+ end
74
80
  end
data/test/test_uri.rb CHANGED
@@ -1,7 +1,23 @@
1
- require "test/unit"
2
- require "otp"
1
+ require_relative "helper"
3
2
 
4
3
  class TestURI < Test::Unit::TestCase
4
+ def test_parse
5
+ uri = "otpauth://totp/account@example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
6
+ otp = OTP::URI.parse(uri)
7
+ assert_equal("account@example.com", otp.accountname)
8
+ assert_equal(nil, otp.issuer)
9
+
10
+ uri = "otpauth://totp/My%20Company:%20%20account@example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
11
+ otp = OTP::URI.parse(uri)
12
+ assert_equal("account@example.com", otp.accountname)
13
+ assert_equal("My Company", otp.issuer)
14
+
15
+ uri = "otpauth://totp/My%20Company:%20%20account@example.com?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
16
+ otp = OTP::URI.parse(uri)
17
+ assert_equal("account@example.com", otp.accountname)
18
+ assert_equal("My Company", otp.issuer)
19
+ end
20
+
5
21
  def test_totp
6
22
  secret = OTP::Base32.encode("12345678901234567890")
7
23
  totp = OTP::TOTP.new
@@ -46,4 +62,9 @@ class TestURI < Test::Unit::TestCase
46
62
  assert_equal("My Company", otp.issuer)
47
63
  assert_equal(otp.password, hotp.password)
48
64
  end
65
+
66
+ def test_parse_invalid
67
+ assert_raise(RuntimeError){ OTP::URI.parse("http://www.netlab.jp") }
68
+ assert_raise(RuntimeError){ OTP::URI.parse("otpauth://foo") }
69
+ end
49
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: otp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuuzou Gotou
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
+ - ".rubocop.yml"
49
50
  - ".travis.yml"
50
51
  - Gemfile
51
52
  - LICENSE.txt
@@ -60,6 +61,8 @@ files:
60
61
  - lib/otp/utils.rb
61
62
  - lib/otp/version.rb
62
63
  - otp.gemspec
64
+ - test/helper.rb
65
+ - test/test_base.rb
63
66
  - test/test_base32.rb
64
67
  - test/test_hotp.rb
65
68
  - test/test_totp.rb
@@ -89,6 +92,8 @@ signing_key:
89
92
  specification_version: 4
90
93
  summary: One-Time Password Library
91
94
  test_files:
95
+ - test/helper.rb
96
+ - test/test_base.rb
92
97
  - test/test_base32.rb
93
98
  - test/test_hotp.rb
94
99
  - test/test_totp.rb