bnet-authenticator 0.1.5 → 0.1.6

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/README.md CHANGED
@@ -4,7 +4,7 @@ Ruby implementation of the Battle.net Mobile Authenticator.
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/bnet-authenticator.png)](http://badge.fury.io/rb/bnet-authenticator)
6
6
 
7
- [![Build Status](https://travis-ci.org/dorentus/bnet-authenticator.png?branch=master)](https://travis-ci.org/dorentus/bnet-authenticator) [![Dependency Status](https://gemnasium.com/dorentus/bnet-authenticator.png)](https://gemnasium.com/dorentus/bnet-authenticator) [![Coverage Status](https://coveralls.io/repos/dorentus/bnet-authenticator/badge.png)](https://coveralls.io/r/dorentus/bnet-authenticator) [![Code Climate](https://codeclimate.com/github/dorentus/bnet-authenticator.png)](https://codeclimate.com/github/dorentus/bnet-authenticator)
7
+ [![Build Status](https://travis-ci.org/dorentus/bnet-authenticator.svg?branch=master)](https://travis-ci.org/dorentus/bnet-authenticator) [![Dependency Status](https://gemnasium.com/dorentus/bnet-authenticator.png)](https://gemnasium.com/dorentus/bnet-authenticator) [![Coverage Status](https://coveralls.io/repos/dorentus/bnet-authenticator/badge.png)](https://coveralls.io/r/dorentus/bnet-authenticator) [![Code Climate](https://codeclimate.com/github/dorentus/bnet-authenticator.png)](https://codeclimate.com/github/dorentus/bnet-authenticator)
8
8
 
9
9
  Installation
10
10
  ====
@@ -9,7 +9,9 @@ module Bnet
9
9
 
10
10
  # @!attribute [r] serial
11
11
  # @return [String] serial
12
- attr_reader :serial
12
+ def serial
13
+ self.class.prettify_serial(@normalized_serial)
14
+ end
13
15
 
14
16
  # @!attribute [r] secret
15
17
  # @return [String] hexified secret
@@ -17,11 +19,16 @@ module Bnet
17
19
 
18
20
  # @!attribute [r] restorecode
19
21
  # @return [String] restoration code
20
- attr_reader :restorecode
22
+ def restorecode
23
+ restorecode_bin = Digest::SHA1.digest(@normalized_serial + secret.as_hex_to_bin)
24
+ self.class.encode_restorecode(restorecode_bin.split(//).last(10).join)
25
+ end
21
26
 
22
27
  # @!attribute [r] region
23
28
  # @return [Symbol] region
24
- attr_reader :region
29
+ def region
30
+ self.class.extract_region(@normalized_serial)
31
+ end
25
32
 
26
33
  # Create a new authenticator with given serial and secret
27
34
  # @param serial [String]
@@ -30,27 +37,20 @@ module Bnet
30
37
  raise BadInputError.new("bad serial #{serial}") unless self.class.is_valid_serial?(serial)
31
38
  raise BadInputError.new("bad secret #{secret}") unless self.class.is_valid_secret?(secret)
32
39
 
33
- normalized_serial = self.class.normalize_serial(serial)
34
-
35
- @serial = self.class.prettify_serial(normalized_serial)
40
+ @normalized_serial = self.class.normalize_serial(serial)
36
41
  @secret = secret
37
- @region = self.class.extract_region(normalized_serial)
38
-
39
- restorecode_bin = Digest::SHA1.digest(normalized_serial + secret.as_hex_to_bin)
40
- @restorecode = self.class.encode_restorecode(restorecode_bin.split(//).last(10).join)
41
42
  end
42
43
 
43
44
  # Request a new authenticator from server
44
45
  # @param region [Symbol]
45
46
  # @return [Bnet::Authenticator]
46
47
  def self.request_authenticator(region)
47
- region = region.to_s.upcase.to_sym
48
48
  raise BadInputError.new("bad region #{region}") unless is_valid_region?(region)
49
49
 
50
50
  k = create_one_time_pad(37)
51
51
 
52
52
  payload_plain = "\1" + k + region.to_s + CLIENT_MODEL.ljust(16, "\0")[0, 16]
53
- e = rsa_encrypted(payload_plain.as_bin_to_i)
53
+ e = rsa_encrypt_bin(payload_plain)
54
54
 
55
55
  response_body = request_for('new serial', region, ENROLLMENT_REQUEST_PATH, e)
56
56
 
@@ -80,7 +80,7 @@ module Bnet
80
80
  decode_restorecode(restorecode),
81
81
  Digest::SHA1)
82
82
 
83
- payload = normalized_serial + rsa_encrypted((digest + key).as_bin_to_i)
83
+ payload = normalized_serial + rsa_encrypt_bin(digest + key)
84
84
 
85
85
  response_body = request_for('restore (stage 2)', region, RESTORE_VALIDATE_REQUEST_PATH, payload)
86
86
 
@@ -91,6 +91,8 @@ module Bnet
91
91
  # @param region [Symbol]
92
92
  # @return [Integer] server timestamp in seconds
93
93
  def self.request_server_time(region)
94
+ raise BadInputError.new("bad region #{region}") unless is_valid_region?(region)
95
+
94
96
  server_time_big_endian = request_for('server time', region, TIME_REQUEST_PATH)
95
97
  server_time_big_endian.unpack('Q>')[0].to_f / 1000
96
98
  end
@@ -127,6 +129,7 @@ module Bnet
127
129
  :serial => serial,
128
130
  :secret => secret,
129
131
  :restorecode => restorecode,
132
+ :region => region,
130
133
  }
131
134
  end
132
135
 
@@ -1,5 +1,5 @@
1
1
  module Bnet
2
2
  class Authenticator
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
@@ -56,7 +56,7 @@ module Bnet
56
56
  def create_one_time_pad(length)
57
57
  (0..1.0/0.0).reduce('') do |memo, i|
58
58
  break memo if memo.length >= length
59
- memo << Digest::SHA1.digest(rand().to_s)
59
+ memo << Digest::SHA1.hexdigest(rand().to_s)
60
60
  end[0, length]
61
61
  end
62
62
 
@@ -66,8 +66,8 @@ module Bnet
66
66
  end
67
67
  end
68
68
 
69
- def rsa_encrypted(integer)
70
- (integer ** RSA_KEY % RSA_MOD).to_bin
69
+ def rsa_encrypt_bin(bin)
70
+ (bin.as_bin_to_i ** RSA_KEY % RSA_MOD).to_bin
71
71
  end
72
72
 
73
73
  def request_for(label, region, path, body = nil)
@@ -15,7 +15,7 @@ module Bnet
15
15
  end
16
16
 
17
17
  def run
18
- region = (args.shift || 'US').to_sym
18
+ region = (args.shift || 'US').upcase.to_sym
19
19
 
20
20
  authenticator = Authenticator.request_authenticator(region)
21
21
  puts authenticator.to_readable_text
metadata CHANGED
@@ -1,69 +1,78 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bnet-authenticator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - ZHANG Yi
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-03-21 00:00:00.000000000 Z
12
+ date: 2014-04-09 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rake
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - "~>"
19
+ - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: '10.1'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - "~>"
27
+ - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: '10.1'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: minitest
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - "~>"
35
+ - - ~>
32
36
  - !ruby/object:Gem::Version
33
37
  version: '5.0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - "~>"
43
+ - - ~>
39
44
  - !ruby/object:Gem::Version
40
45
  version: '5.0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: yard
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0.8'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0.8'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: coveralls
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - "~>"
67
+ - - ~>
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0.7'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - "~>"
75
+ - - ~>
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0.7'
69
78
  description: Ruby implementation of the Battle.net Mobile Authenticator
@@ -74,7 +83,7 @@ executables:
74
83
  extensions: []
75
84
  extra_rdoc_files: []
76
85
  files:
77
- - ".yardopts"
86
+ - .yardopts
78
87
  - COPYING
79
88
  - Gemfile
80
89
  - README.md
@@ -97,26 +106,27 @@ files:
97
106
  homepage: https://github.com/dorentus/bnet-authenticator
98
107
  licenses:
99
108
  - MIT
100
- metadata: {}
101
109
  post_install_message:
102
110
  rdoc_options: []
103
111
  require_paths:
104
112
  - lib
105
113
  required_ruby_version: !ruby/object:Gem::Requirement
114
+ none: false
106
115
  requirements:
107
- - - ">="
116
+ - - ! '>='
108
117
  - !ruby/object:Gem::Version
109
118
  version: 1.9.3
110
119
  required_rubygems_version: !ruby/object:Gem::Requirement
120
+ none: false
111
121
  requirements:
112
- - - ">="
122
+ - - ! '>='
113
123
  - !ruby/object:Gem::Version
114
124
  version: '0'
115
125
  requirements: []
116
126
  rubyforge_project:
117
- rubygems_version: 2.2.2
127
+ rubygems_version: 1.8.23
118
128
  signing_key:
119
- specification_version: 4
129
+ specification_version: 3
120
130
  summary: Battle.net Mobile Authenticator
121
131
  test_files:
122
132
  - test/test_battlenet_authenticator.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 028841465a3483415e852b56a2ca8e05552dafd4
4
- data.tar.gz: 2bf75662b2cdbe6bf3841e38fcc32b7a9a798b4c
5
- SHA512:
6
- metadata.gz: 93b5da7a8a001dc4720f9a2c4947e267a2afe16400d6971c6995ad1e2af7fe71da58a142c0f8ae28ac91c566f3f9f701b963de51df49f7e68b04d2446f9748fc
7
- data.tar.gz: 401d3af738845309d9690aaed1dfcb1cd33fec147e491afc370071c8f39d44b6a622c40338366025419b4a526b80a02216600a693372af4f9a80c625ec06ef0b